-
1、深度不够
Windows底下有很好的图形界面单片机开发软件,如keil、MDK等。
它们封装了很多技术细节,如:你只会从mian函数开始编写代码,却不知道上电后第一条代码如何执行; 你可以编写中断处理函数,但是不知道它是怎么被调用的; 你不知道程序怎么从Flash上被读入内存; 也不知道内存是怎么划分使用的,不知道栈在哪堆在哪 当你想裁剪程序降低对Flash、内存的使用时,你却无从下手 当你新建一个文件时,它被自动添加到工厂,但其中的机理你完全不懂
-
2、基于arm+linux的裸机学习,可以学的更深,并且更贴合后续的Linux学习
实际上他就是Linux下的单片机学习,只是一切更加原始;所有的代码需要你自己来编写 哪些文件加入工程,需要你自己来管理
在工作中我们当然倾向于使用Windows下更便利的工具,但是在学习阶段,我们更像学习到程序的本质。
一切从零编写代码、管理代码,可以让我们学习到更多知识:
你需要了解芯片的上电过程,知道第一条代码如何运行
你需要掌握怎么把程序从Flash上读入内存
需要理解内存怎么规划使用,栈在哪堆在哪
需要理解代码重定位
需要知道中断发生后,软硬件怎么保护现场、跳到中断入口、调用中断程序、恢复现场
你会知道,main函数不是我们编写的第一个函数
你会知道,芯片从上电开始,程序时怎么被搬运执行的
你会知道,函数调用过程中,参数是如何传递的
你会知道,中断发生时,每一个寄存器的值都要小心对待
等等
当掌握了ARM+Linux的裸机开发,再回去看Windows下的单片机开发,会惊呼:怎么这么简单!
并且你会完全明白这些工具没有向你展示的技术细节。