提示:本文内容参考慕课课程:《ARM微控制器与嵌入式系统》
嵌入式开发领域的基本概念以及嵌入式开发流程中所需的工具。
最小系统+大量的外设,如:AD/DA,数码管,液晶,蜂鸣器,步进电机,时钟电路,温度测量等。
把芯片所有的引脚和外设都引出来,板子不会太小,可以很轻松搭建电路。
EVB的高度凝练,提供单片机工作所需的最小外围电路。
一般只包括电源,复位电路,振荡电路,以及将IO口全部引出。可灵活设计外围电路。
IDE:集成开发环境。例如:Visual C++,KEIL,IAR。
微处理器的内核不同,有不同的指令集和寄存器组,所以需要不同的开发工具。
一个完整的工具链构成包括:
交叉编译器是指一个在某个系统平台下可以产生另一个系统平台可执行文件的编译器。在对象系统平台难以或不容易编译时非常有用。
绝大多数的嵌入式开发都是使用计算机的平台进行编程,最终得到在嵌入式平台上可以使用的这样一个程序。
计算机虚拟出一款硬件平台。
嵌入式平台的指令集与计算机不同,我们在做纯软件和算法验证的时候可以借助模拟器。
可以通过编程语言写出一个虚拟的CPU构架,完成所有指令的功能解析,甚至完成所有对于存储和外设的调用,让程序误以为自己在一个硬件的平台上跑。
使用几根有限的通讯线非常高效的与CPU以及微处理器内置的调试模块接口进行通讯,然后发送和接收调试所用的信息。
有BDM,JTAG,SWD等通讯协议。绝大多数ARM Cortex处理器都使用的是SWD的调试接口。
1.USBDM:开源,使用BDM或SWD的协议,广泛支持一系列MCU。
2.OpenSDA
可以把编写好的一个程序放在烧写器里,然后批量更换芯片烧写程序。
一旦上电复位,在之前烧写的程序中,程序的入口地址会填写在PC指针处。
CPU会自动把堆栈初始地址和PC指针地址加载到CPU里,所以CPU从程序的第一条指令逐条向下执行,执行过程中会访问存储器,在内存中读写定义的变量数组等,在函数调用或参数传递时使用堆栈的内存,控制外设时即访问外设寄存器。
写C程序
→ 用工具链编译得到目标代码
→ 交叉编译得到所用的CPU上的程序
→ 通过仿真器验证运行
→ 通过调试器可以把程序以某种通讯协议让芯片执行。
C程序
→程序放到存储器里,被CPU读取
→控制相应的外设
链接配置文件:告诉微处理器哪个地址段是flash可以放程序,哪个地址段是RAM可以放变量,哪个地址段是RAM的底部可以是堆栈。
映射文件:详细记录了在链接的时候声明的每个变量,每个函数体所使用的地址空间。