今天分享一个知乎里一个嵌入式相关热门问题:学STM32需要学会哪些才建议去学Linux?
一个很不错的回答:
“
作者:snowdream
链接:https://www.zhihu.com/question/357775329/answer/2338874463
”
作为一枚嵌入式软件开发的老程序员,答主也是经历过STM32开发向Soc+Linux开发的技术栈转变过程。
总的来说, 具备stm32嵌入式开发技能对于掌握Soc+Linux的嵌入式开发有一定的促进作用
,但是如果题主志在走向Linux应用开发道路, 那么stm32的开发技能并不一定非要全部掌握
。
根据答主个人的技能栈转变的经历, 以下技能通常是stm32和Linux嵌入式应用开发所共有的,换句话说是可以复用的技能
。
1.C编码能力
做嵌入式开发,目前主流的编码语言依然是C语言。stm32如此,Linux也是一样。唯一不同的是,Linux的嵌入式开发中,会经常涉及到一些Linux库函数API,比如socket,比如锁等。
这些等到用到的时候拿来用就可以。所以,如果stm32开发项目足够多,一般来说C的编程技能是可以直接继承的。
2.功能模块和算法设计能力
做应用开发,关键在于理解需求,并根据需求设计合适的功能单元(为其他模块提供API接口)或者设计合适的控制逻辑算法。而这种领悟需求,设计模块和算法的能力也是可以通过在stm32项目中得到历练,并且可以为Linux应用开发提供基础的。
3.多线程和互斥保护思维
如果说Linux应用开发与stm32最大的区别在哪里?
那么多线程和互斥保护的思维会是首选。在Linux的开发世界里,离不开线程和进程,离不开对共享资源的互斥保护。但是stm32的开发中,如果没有涉及到RTOS的话,是需要学习一下RTOS的多任务思维的。
多任务与多线程有着很相似的逻辑,所以有了RTOS多任务思维的话,对于学习掌握Linux多线程多进程和互斥保护,可以起到极大的促进作用。
4.常用协议栈的基础能力
stm32这款mcu可以说外设及内部库支持力度已经非常强大,对于学习部分通信协议栈来说是非常有帮助的。**可能有的朋友说,我不做Linux驱动,没有必要学习什么UART,IIC,SPI,DMA,TCP/IP,RapidIO等硬件通信协议。这种想法是不对的
** 。
有此类的协议栈基础,总会在未来应用开发上用得上。
答主在Linux的很多应用开发中,曾经涉及到与其他嵌入式系统通信的功能单元开发和自有通信协议的设计,举个例子,如果不理解UART协议,你也没有办法去设计你的协议文本。如果不理解RapidIO协议,你怎么和其他单板的CPU通信,虽然驱动的同事会帮你做好驱动,但是上层的逻辑或者出现问题定位,懂些协议栈总会能帮到你。
所以,总结来说,不一定非要把stm32弄得精通再去学习嵌入式Linux开发。如果有了上述四点的stm32积累,就可以考虑向嵌入式Linux应用开发进行尝试。
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !