如果要系统点的话:
*、计算机体系结构。先弄懂什么总线,架构之类的。
*、编程语言。主要指C语言和汇编语言,汇编语言可以大大帮助你理解计算机体系结构,某时用来搞开发也很有用。
*、复变函数。用来理解下面那个东西,当然之前还有高数。
*、电路原理。告诉你怎么分析电路。
*、模拟电路。电容、电阻、电感那些有什么用。
1、单片机开发实践。AVR现在似乎有些竞争无力,STM32好像才14块左右了,不过拿来学习应该没啥不妥。后期最好拿STM32来搞一下,很快上手。
*、操作系统原理。理解操作系统架构。
2、拿块2440什么的来试一下,可以先裸机再上系统,有时间可以搞搞系统移植。
*、JAVA语言。现在无论android还是什么的,基本还是用这个多。
3、可以在android上搞搞实验,编几个android程序。
*标是理论内容,可以不用太去纠结。
另外2和3可以调过来,看自己喜欢。
嵌入式有四个层级:硬件层,驱动层,系统层,应用层
应用层和别的软件开发没什么区别。
硬件层和硬件设计差不多。
系统层,驱动层,才是真的嵌入式,这个就要去硬件软件都懂。
硬件:数电模电了解,不需学太深,CPU(你学的AVR可以作为学习SoC的基础,现在用的比较多的是基于ARM核的处理器)。
软件:数据结构,C/C++,系统原理,操作系统(linux,android,wince用的较多)。
这些是基础,如果你要做驱动,那么关于驱动的学习学完这些就可以开始了。
首先要有一定的动手能力,嵌入式大部分都是搞驱动,不看原理图,不抓示波器怎么调试。
其次要有扎实的C语言功底,驱动对效率要求特别高,大部分系统都是C语言实现驱动,而应用则有可能是c,c++,java等。C语言除了语法本身,还有很多高级特性的,如GCC扩展语法,如何结合elf格式进行程序代码段,数据段分析等。
再其次就是OS的了解,驱动都是运行在操作系统框架中,你不掌握它给你提供的资源,怎么实现阻塞调用,互斥访问,原子分配内存等。这里推荐一个linux驱动经典,ldd3。
先学CORTEX -M3内核的ARM芯片使用
然后是UCOSII LWIP
最后学ARM11或A8下的linux android移植开发