嵌入式应该什么都要涉及的到,从最开始的51单片机,之后到高级一些的微控制器 ARM cortexM3 M4等,STM32最为典型,她的主要特点就是功耗低,性能还算好些,再信号处理领域比较强的 就要选择TI的DSP了,这些都算是不能跑linux系统的,因为他们都不带MMU (内存管理单元),所以大部分都是裸机跑,或者任务多的时候,用一些实时操作系统,如UcosII uclinux MQX vxworks等等什么的,DSP跑的是自己的操作系统内核,叫Bios,也是很强大的。这些主频可以从几十Mhz到200M左右Mhz不等,如果再高点的话,那就要选择,ARM7 ARM9 ARM11 MIPS POWERPC等等的,但是ARM7现在已经很少使用了。大部分都是ARM, POWERPC的性能是比较强悍的,可能说是最强悍的,开发板也好贵,好几K,仿真器那更是如此。但是耗能,MIPS可以说是位于两者之间。
从开始到现在,我设计到了不少的芯片,但是玩转的确实没有几个,从STM32F103 STM32F205 等 东芝的cortexM3的 还有飞思卡尔半导体K40 k60 基于cortexM4内核的,再到DSPF2812 c2000 系列的,DSP28335 之后到ARM9 三星的2440 之后到POWERPC
51单片机 keil51开发 裸机程序
stm32 IAR KEIL4 4.6版本 带ucosii系统 和裸机的 jlink ulink都可以
dsp CCS5.5 自带系统的Bios的 仿真器用的是合众达的SEED XDS510 560等,前者一个1500左右 或者5000多,伤不起
ARM9 ADS开发裸机程序用的 jlink
STM32这个因为ST公司芯片出来的时候有固话的bootloader ,还不能改,所有如果这个bootloader的所有启动过程,如果有你不满意的地方,你只能自己从新写一个新的自己的bootloader了
用于IAP编程,可以有网管系统一键下载,不用到线程, 而ISP 只能短距离的 ,只能去现场了
我把STM32的0x08000000 到0x08005000 这段作为bootloader区,内部协议用Ik xmordem,其余的空间用作用户的应用程序,
ARM9 的bootloader一般分为vivi uboot等,vivi是三星芯片专用 的,所有如果你的设备选的是三星的ARM 那么用vivi很好很强大,移植改起来也方便
uboot呢,比vivi复杂,但是功能强大,在移植在MIPS powerpc arm等,都能用
开发linux嵌入式产品比单片机难写,我理解的是这么个过程
1.先选择开发设备的所使用的硬件资源,芯片什么的都确定好,之后硬件工程师开始做板子
2,软件工程师开始搭交叉编译环境,arm 或者powerpc的等,看你什么芯片了
3,开始移植编译vivi或者uboot,简单,针对于不同芯片时钟,驱动都配置好,就可以了
4,之后把vivi通过H jtag 或者klink (ARM)把vivi烧写进去,ARM启动的时候分为norflash启动和nandflash启动
先选好,因为两者的内存映射是不一样的,用norflash启动的话,直接把norflash的地址和0x00000000映射在一起就ok了
因为norflash也是总线型的,直接发地址就能得到数据,但是nandFlash接口,不一样,还需要一定的算法,必须先给命令,之后给地址才能出数据,
因此,一般从nandflash启动的时候,要先把nandflash的前4k代码copy出来到bootram中去,之后把bootram的地址映射到0x00000000
所以这个要记住了
5.开始移植 配置内核,
6内核版本选好,之后根据硬件设计的资源开始配置编译内核,第一次编译,错误多多,慢慢来吧 没办法
7之后可以编译出来一个zimage内核镜像文件
8之后通过vivi 用串口或者网口把内核镜像文件也烧写到flash中去
9 之后是文件系统
10之后就是应用程序
驱动的话,差别还是蛮大的 ,单片机是直接和硬件打交道,要看懂芯片手册,而且好多东西是不可服用的,如果你要写can驱动,你的设备上有三个can口
那你就可能要写三个can的驱动,虽说这三个驱动,除了中断好,地址,IO口等不一样,其于的配置都差不多,但是你也要写三个,
linux的驱动就不会这样,他典型的架构,和设备驱动模型,给驱动的开发带来了很多的好处,并且只看法一个can驱动,其他的都能复用,对于linux驱动来说,大部分设备驱动
在买芯片的时候,如果是常见的芯片,linux内核里面都有的或者与之类似芯片的驱动,只需要简单的改改,移植就可以了,如果说linux内核没有这个类似芯片的驱动,那么厂家也会有相应做好的了驱动,我们只要会修改就好了。
而单片机的驱动。 说白了就是配置寄存器,控制总线时序 读懂datasheet,如果你能很好的用开发库来进行驱动开发,那更是事半功倍,寄存器就麻烦些,但是能学到东西倒是真的
驱动有时候的问题,你的慢慢弄,就是配对了,但还不是不行,慢慢找吧,就是要耐得住寂寞,用示波器慢慢分析,
我觉的嵌入式有两大块是必须要学的,一个就是网络编程,毋庸置疑,TCP IP协议栈,哪里都用,一定要重视
之后我觉的usb作为嵌入式的接口,也是很重要的,做usb驱动编程什么的,我觉的路不错
以上都是自己意淫,不对勿喷,学的不精,见谅,