作为电子信息工程的学生,学完stm32后,是应该学fpga还是Linux?

论坛 期权论坛 期权     
热心用户   2019-5-18 02:34   99   5
即将毕业,想尽快速成些技能,先是学了c语言(也就考个二级的水平),再学了51单片机(对定时器的编程还算熟练,其他功能考虑到外设,打算先放一放,毕竟51已不是主流),现在还在自学stm32,打算毕业后面试跟嵌入式有关的工作,不知学完stm后应该学哪项,还请大神们指点
分享到 :
0 人收藏

5 个回复

倒序浏览
2#
zhihu用户  16级独孤 | 2019-5-18 02:34:14
学广,不要学深,毕竟你不知道今后工作环境会怎样。
学了C51和ARM就差不多了,各家的ARM只是外设有些不一样,当然ST的是主流。学到后来,玩单片机就是玩外设。其他的诸如430,MC,AVR或是一些DSP,其实用起来都差不多,IDE不同罢了。
最主要的是自己的编程能力,C语言的能力。
会玩一些单片机之后,再往两端做技术学习。
一端是电路,学会画原理图,Layout。硬件的设计可以和软件互补。软件(指的是固件)不好实现的,硬件解决;硬件不好处理的,软件来帮忙。
另一端是应用软件。PC端至少学会一门语言,可以独立开发调试工具、测试工具程序、升级工具等等。有时间的话,手机端也学一种,毕竟单片机加无线通讯的愈来愈多。学软件以实用为主,现在的一门计算机语言内容太多,精通不易。
最后,等你有能力做完这一整套的开发。恭喜你,你不必打工了,完成一个产品自己做老板吧。(别忘了找个人帮你卖)

3#
zhihu用户  16级独孤 | 2019-5-18 02:34:15
学32也好,arm+linux也罢。关键要深入下去,c语言,数据结构怎么样?找工作笔试和初面很多老鸟都爱看你手撕代码哦。大部分都是数据结构和一些基本算法;其他大神建议,学习应该广一些,可是太广也没太大意义,51入门的,430也会,avr也了解,什么树莓派,香蕉派各种派都玩过,什么各种duino都接触,我觉得不应该仅限于会用几个外设,现在ide都很强大,keil有rte环境,恩智浦有kex工具,32有cubemx,各种库开发,时钟,外设配置点点鼠标就可以了,以前的usb库移植rtos移植,现在都是标准化的东西,鼠标一点就可以了。你能发挥的也就应用层的东西了。可以找几个项目练练手,捎带手把项目中用到的功能深入下去,可能你深入了解了usb模块的驱动就能找到一个不错的工作了,或者rtos,不能仅仅局限于任务怎么创建,信号量怎么用。这都是很好的学习资料,尝试去阅读下别人的代码,这都是大牛鼓捣出来的东西,对一个人的编程能力,程序框架设计,软件规范都是很受益的。这个过程中,不光对编程能力的提升,对CortexM内核架构都能了解到一些,对以后的arm +linux学习也有帮助,现在rtos已经有设备驱动模型的概念了,比如rtthead,里面已经有设备驱动模型的概念啦!对比下和linux内核还真有几分相似。其次,学习stm32和arm_linux并不冲突,前期可以学一些linux系统编程的东西,之后uboot移植,kernel移植,驱动开发的学习。linux内核开发我并不熟悉,只是学习过一些uboot移植,和一些简单的设备驱动的概念,之后便没有深入下去了。都是用别人的东西,比如内核,uboot我都不会花代价去移植一个最新版本的。更多的是在应用层了,比如用opencv库去跑一些图像处理的东西。或者跑一些其他算法,去年我还在做我的毕设,算法在一个4412上跑的,里面有个很重要的网络通信的部分,我还真的看了下iocp模型,撸了个服务端出来。  总结,我觉得嵌入式是个很广泛的东西,除了和底层打交道,比如嵌入式linux中,除了驱动方向,有人专门做网络的,有人专门做嵌入式QT的,还有很多,例如音视频处理,协议等都可以算是嵌入式方向的
-------------------------------------------------------------------------------
利益相关,嵌入式渣硕一枚,即将毕业。
4#
zhihu用户  16级独孤 | 2019-5-18 02:34:16
已弃坑
5#
zhihu用户  16级独孤 | 2019-5-18 02:34:17
stm32,Linux,fpga是三个不同的东西,当然还是有很多相通的东西和概念,做32一般都是更底层,多半是做一些检测和控制的一些东西,由于没有mmu只能跑一些简单的rtos,其实如果想做一些控制类的东西,学到32这个级别的处理器就差不多了,32类单片机其实也只是一个平台,我们更应该注重的是能够用它实现什么控制,实现什么算法,而不只是单单的会用它的外设,比如同样的adc怎么滤波也是有学问的,同样的pwm用于不同的地方也是有讲究的,能用这些基本外设只是一个前提而已,更重要的是怎么用,Linux就更复杂了,也分得比较细,如果是做原厂底层那么对芯片就得非常非常了解才行,同时还得非常非常了解怎么利用Linux的底层接口来驱动自己芯片的外设给别人提供bsp,这部分人甚至不用太会应用层,如果做系统,其实做系统也会更细分,比如做系统移植就得对原厂的芯片比较熟悉,对原厂的bsp非常熟悉,然后利用原厂的bsp进行移植,移植到自己的硬件平台,还有就是做驱动,做简单的说就是根据芯片寄存器和系统底层驱动接口给应用层提供统一接口,但是很少有人真正这么去做,一般都是移植原厂驱动,然后进行相应的优化,虽然有原厂的模板参照还会有一些原厂的或者原厂代理公司的技术支持,但这个也是技术活,真正玩转的人还是少数,剩下的就是传说中最简单的做应用了,很多人说简单,但是我感觉也不是那么简单,只是容易入门,做这个就是根据需求和接口完成功能,最后就是做fpga说白了就是玩程序化的数字电路,fpga处理多并发的效率我感觉是单核或者多核的mpu无法达到的,感觉前景还不错,最后就是玩fpga和stm32或者Linux大不相同,如果非得说一个相似,那就是编程的思维还是有一些想通的,但是fpga和单片机的不同就是一个并行一个串行的,说这么多也不知道偏题没有,其实上面的三个都是不同的应用场景没有先后顺序之分,都是一个自己将来的一个不错的发展方向,看自己兴趣去选择吧,当然学Linux之前用32跑跑rtos能够起到一定的踏脚石的作用,但是不代表32就比Linux简单,只是做32后期更注重某某算法,做Linux后期更注重某某框架(做Linux应用也会涉及算法),好像是第一次回答说得有点乱!
6#
zhihu用户  16级独孤 | 2019-5-18 02:34:18
一定要学习外设 电路设计。。
STM32 只是MCU 离开外设它 没什么用。除非将来你的方向骗软件走(即便你搞嵌入式,硬件还是基础)。
只要是跟硬件打交道,电路设计 , 通信这部分才是重要的。
至于程序移植,没什么复杂的,多练练就行。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:64547
帖子:12910
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP