如果从应用层的应用开发出发,建议先熟悉API函数。如果从应用层的界面开发出发,则建议学习Qt,WinCE或Android等。
但真实的嵌入式开发,熟悉以上还是远远不够的,建议如下学习曲线:
第一节段 熟练使用Linux操作系统
学习Linux操作系统的概念和安装方法,理解Linux下的基本命令、管理配置和编辑器,包括VI编辑器,GCC编译器,GDB调试器和 Make 项目管理工具等知识。
第二阶段 精通linux下C语言
通过大量编程实例重点学习C语言的高级编程知识,包括函数与程序结构、指针、数组、常用算法、库函数的使用等知识,另外,还要学习数据结构的基础内容,包括链表、队列、栈、树、哈希表、图等内容。
第三阶段嵌入式Linux应用编程
精通嵌入式Linux下的程序设计,精通嵌入式Linux开发环境,强化对Linux应用开发的理解和编码调试的能力,包括系统编程、文件I/O、多进程和多线程、网络编程、GUI图形界面编程、数据库。
第四阶段嵌入式入门阶段-ARM体系结构
ARM处理器体系结构、编程环境、指令集、寻址方式、调试、汇编和混合编程。ARM的常用接口开发及硬件电路设计基础(包括IO、串口、看门狗、实时时钟、SPI、IIC、扫描键盘、FLASH操作等),为以后的设备驱动的学习打好基础。
第五阶段嵌入式高级阶段-Linux内核和驱动开发
深入内核细节,了解Linux相关运行机理,为后面的驱动开发打好理论基础,内容包括内核源码结构、内存管理、进程管理、中断管理、系统调用、内核同步、时钟和定时器管理、信号、调度、进程间通信、文件系统和I/O设备管理等方面的内容。
第六阶段嵌入式硬件开发(学软件的可以不学,但了解硬件对学嵌入式软件有更深入的了解,尤其对系统的理解更深入。)
内容包括单片机的学习,电路分析和电路的原理,PCB设计,主要包括Altium Designed,电子设计基础知识,原理图初步设计,进阶,提高,深入,pcb库的设计,集成库的作用和制作,pcb设计初步,PCB设计提高,PCB深入,对FPGA和CPLD系统的相关基础概念等
第七阶段嵌入式深入阶段
变成高手,你还要进一步学习内核和系统,内容包括计算机系统结构和汇编,linux内核编程,linux内核的基础知识,汇编及保护模式,linux内核体系结构,linux引导程序分析,linux内核代码分析,linux块设备驱动程序分析等
第八阶段 实践阶段
其实就是循序渐进,先学好基础理论知识,然后动手试验,最后总结试验结果,验证所学知识并积累经验
最近在工作上,给做算法的兄弟介绍系统工程师的作用,没有讲明白,大家看看是不是我理解错了?我的讲解:
系统工程师是研究系统的,系统很复杂,但是他理解的系统工程师搞得很杂,没有深度,就是打杂的,我却不知如何解释。
例如:
1. 想实现一个10ms定时读取某个传感器的数值的问题,怎么判断是否能够达成?
需要考虑系统响应时间,调度机制,各种信号的影响,内存分配等原理,信号量原理,中断相应,系统调用原理等......
2. nuttx中timer是用signal实现的,请问可以改成中断方式吗?一个进程发送了signal,另外一个进程立刻会响应吗?signal底层实现机制是什么?
3. 系统能否满足要求?例如,5ms控制精度能达到否?涉及到系统调度,优先级,中断响应时间等等......,多任务切换......., IO性能,计算瓶颈等