新手怎么学习ARM
新手怎么学ARM
LPC2378开发板
每个人都经历过初学阶段,有些很顺利,有些则很曲折,有些甚至还在徘徊!更有一些感叹!那就都在这说出来吧,说说自己的经历,自己难忘的经历!当作是一种回味,也给后来人一些经验和教训!
新手也要抓紧时间,有什么想请教老手的,也都再在提。另外这是一种学习方法的探讨,不是具体问题的解答,所以请不要问具体的什么如汇编语法之类的具体问题,这些还是自己踏踏实实的系统的学习课本吧,或让老手教您怎么去学,应该学哪些。
若有了相关的知识,建议先上ARM官网下载一些ARM的基本文档资料。了解一下ARM的结构体系,知晓ARM的几种版本和相应的典型结构。在此基础上可以购买一套开发实验系统(根据自己的经济实力和系统的适用性来选择),再根据具体的系统下载相应ARM芯片的资料,结合开发系统所提供的资料先从汇编入手做一些小实例(不要太大)。等到汇编和系统硬件都比较熟悉后就可转入用C编一些小软件,尽量搞得有趣些以便提高自己的兴趣。
到这个程度就可以试着接一些小的项目来练手了,从制板到在上面裸奔,等你做完了会发现ARM入门并不难。
接下来就要考虑上OS了,先可以考虑那些适合在ARM7上跑的系统。由于OS涉及到软件技术的方方面面,建议先搞一个简单易加载的系统,利用它真实了解一下OS的作用和基本功能。等到对OS的剪裁,加载和调用已经有了相当的了解就可以转入到基于多进程的当前流行的OS上来。
HWM
开始接触ARM是在2006年,那时还在大学,老师给我的毕业设计题目:《ARM嵌入式系统的bootloader编程》,原因是因为俺之前的单片机成绩还算相当不错。然后就开始学习,查资料。
有一本书对我的帮助最大:《ARM体系结构与编程》
这本书一直到我工作后才发现在公司里基本上是ARM嵌入式开发工程师人手一本。这在我工作之初给了我很大的信心——俺们大学看的书也不是完全没用啊--!
我的学习过程大致如下:
1.ARM汇编。不用记住汇编指令,只求能看懂,甚至只要能翻书看懂汇编程序即可。重要的是在学习ARM汇编的过程当中了解了ARM体系结构的过程:
CPU的几种模式极其作用,R1-R15的作用,CPSR,SPSR...
2.简单的程序编写以及编译。使用ARM汇编和C编写一些小的代码,一开始可能无从下手,可以去参考别人的代码,看他们是怎么写bootloader的,看他们的C和汇编是怎样混合编程的。还有,编译也是同样重要,一开始,通过书本以及ADS的集成开发环境能编译出简单的目标文件。这里了解了-ro-base,-rw-base,-first,-entry的作用,同时了解了汇编语言中的AREA以及ENTRY的用途。
3.项目需要,发现内存安排不太合理,需要分散加载,而后开始学习分散加载技术。这时才发现ADS12自带的文档是多么的全面——我想知道的里面都有。
4.工作后开始接触上万个文件组成的大项目,这时使用的编译方法已经不再是集成环境了。于是学习了makefile,同时学习了ADS12的编译器的命令行用法。
5.工作中,一边工作一边学习,逐渐深入的了解了分散加载,bootloader,Flash Driver,Makefile等。
6.现在,依然在学习中,我的OS还在构建中,multi-task,POSIX。
我的几点建议:
1.看书《ARM体系结构与编程》,这可以说是ARM圣经也不为过。
2.ADS12的文档。在安装ADS12时选择"FULL"完全安装,然后在安装目录下会找到PDF目录,里面的文档都相当详细。重点推荐:ADS_AssemblerGuide_B.pdf
ADS_CompilerGuide_D.pdfADS_LinkerGuide_A.pdf三个文档,英文的,慢慢嚼,会有收获的。
3.看书过程中可能遇到不懂的,问!问不到?跳过,看后面的。这样反复看,当一本书被你这样看几遍后你会发现值得你问的东西会越来越少,最后你甚至会发现:这书上居然有错!这时,恭喜你,可以对这本书说:俺懂你了。
4.对于分散加载和编译器的命令行格式,还有Makefile,我强烈建议立志于走这条路的兄弟一定要不畏艰难的啃下他们,当你啃下他们之后请再回头看看以前走过的路:一览众山小的感觉就是这样了。
5.加强各个知识点之间的联系。比如分散加载通常和bootloader有关系,也和汇编有关系,还与连接器有关系。如果能做到一个点一个点的联系起来,而后形成一个知识面,那么相信你的进步会非常迅速的。
6.ATPCS,当你不满足于简单的写汇编,简单的写C,当你想自己写一个OS出来的时候,ATPCS就是你需要了解的了。通过他,我们能进行汇编,C,C++的混合编程。呵呵,有了汇编和C还有什么做不到的呢。
以上只是我的一点小小建议,如果认为不对,全当一阵风吹过。