一、 开发模式
- 单片机开发多为裸机,程序规模小,多为单个程序员独立开发。有些复杂产品也会使用高端单片机如STM32之类,并使用RTOS(uCOS、freeRTOS等)。
- 嵌入式开发几乎全部基于嵌入式操作系统,目前使用最多的是 linux 和Android。
二、 技术特征
编程语言方面
单片机主要使用C语言(少量用汇编),和标准C略有不同,很少使用结构体、函数指针等C语言高级特性。
嵌入式开发较复杂,一般分底层和应用层。底层使用C语言,应用层使用C、C++、Java等语言均有。嵌入式C语言对结构体、 数据结构、算法、函数指针(用来实现面向对象)等高级特性使用比较多)。
软硬件组件方面
单片机多涉及一些简单外设,譬如串口、I2C、ADC、LCD(小屏幕和分辨率);
嵌入式系统则涉及更多复杂外设,譬如网络(有线网卡、wifi、蓝牙等)、USB、音视频编解码等。
三、 嵌入式系统的特点
- 专用、软硬件可裁剪可配置
- 低功耗、高可靠性、高稳定性
- 软件代码短小精悍
- 代码可固化
- 实时性
- 弱交互性
- 专用开发工具及开发环境
- 专业开发人员
四、嵌入式系统的组成
硬件
软件
- 嵌入式操作系统
- BSP board support package板级支持包
- 应用软件
- 注:操作系统是中间人;应用软件通过给操作系统发命令,然后由操作系统来控制 BSP 中的驱动,最终控制硬件来完成任务。
五、地址总线和数据总线
- CPU 通过地址总线寻址,然后通过数据总线与外部设备互换信息。
- 地址总线的位数决定CPU寻址范围;数据总线的位数决定CPU单次通信能交换的信息数量;
- 总线的速度决定CPU和外设互换信息的速度。
六、为何使用交叉编译
- 嵌入式开发的CPU比较简单,本身无法搭建开发环境,有些甚至操作系统都没有。
- 交叉编译可以用高性能机器为低性能机器开发软件(包括裸机软件、系统级和应用级软件)。
七、嵌入式开发特点
- 交叉编译,不便于本机运行调试程序。
- 嵌入式系统需要 bootloader 来启动,而 bootloader 必须首先存在于可启动介质中,这个过程需要专用工具。
- 嵌入式系统无法通过纯软件实现单步调试,因此必须借助专用的调试器。
八、Jlink的作用
- 下载可执行程序到目标机。
- 在目标机上实现单步调试,便于开发bootloader。
九、USB转串口线的作用
- 串口本身用来做嵌入式目标机的调试输出,主要目的是用来监视及调试软件。
- 因为现在大部分个人电脑(大部分台式机和几乎全部的笔记本电脑)都未配置DB9串口,因此工作中一般直接使用USB转串口线来连接PC和开发板。
- USB虚拟串口的实现在系统上依赖于USB转串口驱动,一般由厂家直接提供,也可以使用操作系统自带的CDC类串口驱动等。驱动主要分为2个功能,其一注册USB设备驱动,完成对USB设备的控制与数据通讯,其二注册串口驱动,为串口应用层提供相应的实现方法。
十、程序的编译运行过程
- 程序员用汇编指令编程 ——> 经汇编器汇编成二进制可执行程序文件 ——> 二进制文件被CPU读取进去 ——> CPU内部电路对二进制文件解码 ——> 解码通过则CPU执行指令、完成指令动作。
- 如果程序员用C语言等高级语言编程,则编译器先将C语言程序编译为汇编程序,再进行上面的后续部分。
注:源自B站朱有鹏老师.
|