初学者应该如何学习嵌入式系统?他们应该从什么开始?目前他们有一点C语言,数字,模拟,电气基础。他们应该学什么?如果要操作的话?
一、编程的基础,比如基本的编程语言基础,至少数据类型、程序结构、流程控制等最基本的内容要相当清楚,所以建议恶补C语言,推荐谭浩强的《C语言编程》好好看看,呵呵!另外,有很多同学问到数据结构基础。我一直认为学习数据结构和算法是一种很好的帮助形成编程逻辑思维的训练方法,对程序员长期职业素质的提升当然是有好处的,所以我建议即使是从事嵌入式行业以后,也要多补充一些相关的知识。很多在学校没学过数据结构的同学,往往觉得这部分很枯燥,很难学。事实上,如果你能理解学习计算机存储和数据组织的意义,你就能充分体会到数据结构的价值和魅力。一旦有了兴趣,一切就迎刃而解了,呵呵!
第二个是操作系统的工作原理,在学校非计算机专业的学生往往接触不到。因为嵌入式软件设计相关的多任务环境、模块间的同步和通信协作、驱动程序设计等等往往需要对操作系统的工作机制有一个了解和掌握作为基础,建议没有系统学习过的同学找一本关于操作系统工作原理的书认真读一读(没有超厚、超专业、超内核,先重点普及知识,呵呵!)。
第三,基础硬件基础。因为嵌入式Linux的开发往往是ARM+Linux的路线,为了在后续的学习中掌握主流嵌入式微处理器(如ARM9)的结构和原理,需要对硬件的工作原理有一个初步的了解和掌握。建议阅读计算机组成原理、架构等相关专业书籍。
要进一步学习,可以尝试以下路线:
(1) C语言是所有编程语言中最强的,单片机、DSP以及类似ARM的各种芯片的编程都可以用C语言来完成),所以一定要掌握的非常熟练。
推荐书籍:《C程序设计语言》,经典教材,外国人写的,也翻译成中文。
(2)操作系统的原理是必要的。如果你是计算机专业毕业的,没关系。如果不是计算机专业的,一定要找一本比较简单的计算机原理的书,把“进程”、“线程”、“系统调度”等基本问题讲清楚。
(3)Linux操作系统是用C语言写的,所以你也要先学习Linux的编程。只有你能应用它,你才能更深入地了解它的内核的本质。
推荐书籍:UNIX环境下的高级编程(第二版)
(4)了解arm的架构、原理和汇编指令。在嵌入式开发中,我们很少写汇编,但最起码的要求是要能看懂ARM汇编。
(5)移植系统时,需要从最低的bootloader开始,然后移植内核和文件系统。但是这部分迁移对硬件的依赖比较大,配置步骤也比较复杂,没有太多详细的信息。
(6)推动发展
Linux驱动程序设计不仅是一个具有挑战性的领域,也是一个深刻的内容。
linux驱动程序设计的本质属于linux内核编程的范畴,所以对linux内核和内核编程都有要求。在学习之前,你要了解linux内核的组成,因为每一部分如果研究的详细,都可以展开成一本厚厚的书。
以上只是一个大概的框架,实际开发中会涉及到很多东西,比如交叉编译、makefile、shell脚本等。所以学习嵌入式系统需要较长的周期,门槛较高。自学需要很强的学习能力和专业技能。只要你能坚持,你就会成功!
华清袁晶的嵌入式专业教材专业且有名。在大学图书馆和外面的书店都有卖。可以在网上搜一下,买一本。华清袁晶的网站和技术论坛也有很多嵌入式的学习资料和视频可以下载,更新速度也很快。LZ没事可以去转转。相信会对你有帮助!