1. C语言
很多学校安排的《计算机科学导论》学完,就是《HTML》然后《CSS》,后面《Javascript》,然后才是学习C语言。无所谓,反正你这个阶段学习C语言也没啥用,最多算是学习了一门C语言。
听着像是废话,但是本来就是这样,C语言用于UNIX环境高级编程,大学初期,你接触过Linux操作系统吗?学习过shell 编程吗?还是说学习过makefile?那留给你的就只有两个了:1. Windows C应用开发(这玩意还要学习数据库,你说可气不?),2. 单片机编程。
我推荐单片机。关于数据库,我工作三年,用C开发的环境都是驱动和系统编程,和数据库没有打过交道。我学习过数据库,忘完了,就记得一些SELECTE、正则表达式、选关键字,然后GROUP,已经很模糊了。
2. 单片机
选用arm系列的芯片,资料多,视频多,,学完就能外面找到工作了。对的,没有看错。也就4K~15K的样子。你是纯软的,工资不会很高。
中的事情说前面:学习寄存器操作,学会看IC的驱动流程,学会看通讯的时序图。
别TMD看着标准库函数就走不动道,一看到HAL库开发就觉得很牛X,然后偷懒,不看寄存器手册。嵌入式-----只有自己会做库开发,才是最屌的!小学生都能够操作的事儿,能够轮得到你吃几年红利!!!!
然后就是学习IC:CPU中断的机制,uart,SPI,IIC,flash,LED屏幕驱动,PWM,看门狗,定时器中断。(从寄存器手册层次去理解,多花点时间,不用背寄存器,就是熟悉,多看几次也就熟悉如何看芯片手册了)
开发的要求不高,就是能够通讯就好,能够发数据,收数据,能够控制GPIO输出高低电平,会直接操作外设的寄存器。能够看懂一些简单的芯片手册。
如果你达不到,就不要进入下一个专题。
3.数据结构
这时候,需要看是进攻裸机开发和操纵系统开发了。我们要在arm系列芯片上移植操作系统freeRTOS或者UCOSIII实时操作系统。如果这时候你的数据结构没有学习过,看不懂操作系统源码,那么,对于软件编码的能力必然会比较弱。接下来的专题是Liunx系统,对面向对象的编程思维方式非常有要求,这时候要多多学习一下操作系统的源码。
学习数据结构整本书。都是重点。
4. ucosiii 或者freeRTOS操作系统
不用我多说了吧,操作系统的概念和移植,都是非常重要的。通过小型操作系统的移植和应用开发,慢慢理解操作系统对资源的管理方式,而不是自己去瞎想像操作系统在做什么。
5. arm汇编
这时候要进入裸机了,那么CPU的架构就必须要了解一下了,ARM32汇编或者ARCH64(arm64)汇编都可以,只要你的开发板能够运行你的汇编代码,让你看到结果。
因为芯片上电启动的是汇编代码在搭建环境,学习汇编语言是非常有必要的,而且,在驱动开发的调试过程中还会用到反汇编查bug等等(C++)。
6. 裸机开发
了解裸机的启动过程,学习如何搭建C语言运行环境。程序再芯片中是怎么分布于内存的。芯片不同的启动方式,学习DDR等等。你需要学习一本叫做《arm体系结构与编程》
7. shell编程
shell 编程是因为linux系统一般都需要用shell命令处理文件,而makefile中大量用到shell命令和shell脚本语言。那不如就把shell编程排在前面。尤其是在linux操作系统中,命令查询用得最多,很多公司就是linux服务器,没有界面,只有命令终端,也就是说,你将来的工作环境就是敲命令和你的服务器上项目做编码。
8. gnu make或者《gnu make 项目管理》
makefile很重要,因为这是linux系统中重要的项目管理工具,大多数老项目并没有迁移到Cmake管理中,所以,你很可能就是遇上makefile。尤其是老项目要分平台,整个代码非常混乱。看不懂make,你想要确定自己是在哪一个预处理分支线上,只能够写printf一个个确认。同时linux很多工程文件和项目也是用makefile管理的。你要是不会makefile。有你的苦头吃。
9.Unix C高级环境编程
到这里差不多要结束了,因为一旦UnixC高级环境编程后,就是系统编程的API熟悉了。
10. linux驱动编程
到这里就已经差不多了。至于uboot移植,看你个人吧。
警告
1. 在arm裸机之后就可以选择是否学习《计算机组成原理》,看不看要靠个人需求,一般来说已经差不多熟悉计算机组成原理,但是深入理解总是没错的。
2. 在学习计算机组成原理之后,你才有资格学习计算机网络,同样,是否需要学习计算机网络,需要看你是否走linux网络编程,如果要学习,就需要修计算机网络。
3. 是否需要系统学习操作系统原理,需要看你你是否要深入学习linux内核,和linux系统编程,如果你感兴趣,就可以深入学习计算机系统。
|
|