参考视频:慕课 嵌入式软件与设计
参考书本: 田泽 编著 《嵌入式系统 开发与应用教程(第2版)》
1.概述
1.1 嵌入式系统概述
嵌入式系统:是以应用为中心,以计算机技术为基础,软件硬件可裁减,对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
分为软件(嵌入式应用软件、*嵌入式图像系统、嵌入式操作系统)和硬件(处理器、外围电路)。
特点:固化存储、实时性、可靠稳定
1.2 嵌入式软件设计概述
嵌入式系统的开发语言从低到高:
汇编语言、C语言、C++语言、JAVA语言、Objective C/Swift、C#
开发语言越低执行效率越高,开发效率越低
嵌入式系统的开发模式:
应用软件、硬件:利用C、汇编等直接在硬件上编程,用在硬件资源有限的场合
应用软件、操作系统、硬件:基于操作系统编程
###采用嵌入式操作系统的好处是程序员可专注于问题
###直接针对硬件编程,不可以利用操作系统的调度机制
2.嵌入式C编程综述
2.1 软件架构
/1 模块划分
**模块是一个.c源文件和一个.h头文件的结合,头文件里声明该模块接口
**某模块提供给其他模块调用的外部函数及数据需要在头文件中以extern关键词声明
**仅在模块内使用的函数和全局变量需要在源文件开头以static关键词声明‘
**不能在头文件中定义变量,会分配内存
嵌入式系统通常包括
硬件驱动模块(一个特定硬件对应一个模块)和软件功能模块(模块划分满足 低耦合高内聚)。
/2 任务模式
单任务:微观串行、宏观串行
多任务:微观串行、宏观并行
/3 中断服务程序
标准C不含中断,现在提供了__interrupt关键词用于标识 中断服务程序ISR
当一个函数被定义为ISR,编译器会自动增加其需要的中断现场入栈、出栈代码
中断服务程序没有返回值,不传参,尽可能短小精悍
2.2 C的面向对象化
利用函数指针将结构体struct模拟成一个包含 数据和操作 的“类”。
### 关于无操作系统嵌入式系统的中断模型,中断程序中仅作中断登记
### 在采用C语言模拟面向对象特性时,通过结构体包含实现继承
### 采用C语言进行“面向对象编程”,可以实现部分“类”的功能,可以实现更好的程序结构,可以有效的组织汉字显示。
3.ARM C程序优化
3.1 思路优化
空间优化、时间优化
平衡代码优化与可读性
最先优化频繁使用的代码
通过研究编译器如何把C代码转换成ARM汇编代码,以帮助程序员区分 快速和慢速的C代码,进而指导程序员进行C程序设计。
3.2 变量的数据类型选择
采用整型变量效率最高
3.3 次数固定的循环优化 采用减计数改变循环变量
3.4 次数不定的循环优化
使用do...while 但是要保证至少循环一次
3.5 循环展开
每次循环都有 减法指令 和跳转指令 两个开销
3.6 指针别名
别名:两个指针指向同一个对象,这两个指针称为该对象的别名
LDR两次 重复读取 可以人为增加局部变量
3.7 结构体
结构体的问题:地址对齐和数据存取效率问题
在结构体中,短的成员先定义,长的成员后定义
使用关键字__packed对齐,但是会影响效率,大小端不一致也有同样问题,采用字符型指针char*可以实现天然对齐