单片机编程用C语言还是汇编?

嵌入式基本学习路线

老实说,这个嵌入式学习路径看起来相当完整,但它绝对是路上的一个坎坷。
在学习中,我发现了一些值得思考的地方。

C语言编程是一个生死攸关的局面。
说实话,当我读到《C程序设计语言》的时候,我都怀疑自己的人生了。
我花了三个月的时间才弄清楚指针和内存管理部分。
有一次我参与了一个项目,由于野指针而崩溃了 3 次。
最后,我的导师告诉我“在嵌入式开发中,内存管理比理论课程重要十倍”。
后来,当我从事5 1 单片机项目时,我才真正明白为什么我必须坚持这些基础知识。

不要处理电路的基础知识。
记得第一次上模拟电路课,老师突然问:“运放反相放大器连接的负反馈比如何计算?”我当场就懵了。
结果期末做STM3 2 温湿度采集项目时,发现AD采样精度很差。
经过检查数据,发现滤波电路配置不正确。
这个教训刻在DNA里——如果理论不实现,硬件会直接“震惊”你。

数字电路部分是最烦人的。
我的团队在做FPGA项目的时候,时钟域交叉的问题困扰了我们半个月。
那时我根本不懂稳定性,就靠修改代码、用示波器抓毛刺谋生。
后来当我看到其他人使用同步器时我才意识到。
说白了,数字电路就像解魔方,每一步都必须精确。

Linux 操作系统是一个转折点。
老实说,我在 Linux 命令和 shell 脚本上花费的时间比 C 还要多。
我曾经调试过驱动程序,仅仅知道 strace 和 gdb 就救了我的命。
记得移植内核到STM3 2 F4 时,程序卡住了,因为MMU配置不正确。
最后,我在社区中发布帮助帖子时遇到了问题。
这次经历让我明白Linux不仅仅是学它,而是越用越有趣。

ARM开发部分主要是测试基础知识。
我开始直接使用Cortex-M4 ,但是定时器配置很乱,系统摇晃得像个壳。
导师直接告诉我:“先别急着进行安装优化,先了解一下这个定时器是如何计算频率的,如果最后看不懂计算,就不要碰安装。
”后来移植Bootloader的时候,才真正明白了异常向量表和中断向量表的区别。

Linux驱动程序开发是一次彻底的考试。
第一次做字符设备驱动时,忘记在中断处理中禁用中断。
结果系统一启动就挂了。
那时我每天都在内核崩溃日志上抓耳挠腮。
好在DMA传输终于解决了,传输Uart驱动时效率直接翻倍。
这是真正的技能,不是两年训练就能掌握的。

最后,这条路并不是一步一步走来的。
你需要自己找一个项目来练习。
后来我接了一个智能家居项目,把学到的知识都用上了。
这时我才真正感觉到这些课程并不是孤立的。
我们来谈谈嵌入式的东西。
理论是一个框架这个项目是有血有肉的。
两者都行不通。