蒋迪的博客
| 关于 | 归档

#Arm Arm嵌入式系统开发 读书笔记

第一章 基于Arm的嵌入式系统

RISC 与 CISC

如何区别RISC和CISC的不同呢?因为RISC都是单周期的简单指令为主,所以RISC设计对编译器的要求更高,降低了硬件执行的复杂度。相反,CISC对硬件执行指令要求更高。

RISC 设计准则

  1. 指令集:由于RISC简化了指令种类,复杂的操作需要若干条指令组合执行。且每条指令的长度都是固定的;
  2. 流水线:流水线执行以提高CPU的吞吐量;
  3. 寄存器:RISC处理器拥有更多的通用寄存器,可以存放数据或者地址,为数据操作提供快速的局部存储访问;
  4. load-store结构:数据都在寄存器中处理(load指令从存储器复制数据到内核的计算器,store指令从寄存器里复制数据到存储器);

存储器的数据宽度

存储器的数据宽度是指每次访问存储器所返回的数据位数。

如果一个32位ARM指令和16位宽度的存储器芯片,则处理器每次取指就需要2个16位的存储器访问,会降低系统的性能;

第二章 ARM 处理器基础

寄存器

通用寄存器可以用来保存数据和地址;(用前缀字母r来标识)

流水线

流水线式RISC处理器执行指令时的工作方式。使用流水线,可以在取下一条指令的同时译码和执行其它的指令,从而加快系统的吞吐。

异常、中断及向量表

当异常或者中断发生时,处理器会把PC设置位一个特定的存储器地址。这一地址存放着一个中断向量表。向量表的入口时一些跳转的指令,跳转到专门处理某个中断或者异常的子程序处。

存储管理

通常嵌入式设备使用多个存储设备,因此需要实施某种策略或者方式来组织和管理这些存储设备,并保护系统,避免一些非法访问硬件。

ARM内核的存储器管理硬件有3种不同的类型:

  • 无硬件保护;
  • MPU(有限保护存储器管理单元);
  • MMU(全面保护存储器管理单元);

MMU是ARM上最广泛的存储器管理硬件,MMU使用一组转化表,提供虚拟地址与物理地址的映射与访问权限;

第五章 高效的C编程

  1. 局部变量类型:大多数ARM数据处理器都是32位的,基于这个原因,局部变量应尽可能使用32位的数据类型int或者long,可以有效改善性能并减小代码尺寸。而且使用char或者short可能出现数据溢出归零的情况。
  2. 函数参数类型:同局部变量类型一样,使用char或者short类型的函数参数和返回值都会产生额外的开销,导致性能的下降,增加代码的冗余;
  3. 有符号数与无符号数:在程序中执行加法、减法和乘法,有符号与无符号数没有区别。但是除法运算中,有符号数会增加一个步骤。
  4. 循环结构(定次数):无论对于有符号还是无符号的循环计数值,使用i != 0 作为循环的结束条件,比i>0少了一条指令。(使用减计数到0的循环结构,编译器可以不需要分配一个寄存器来保存循环终止值,而且与0比较的指令也可以省略)
  5. 循环结构(不定次数):使用do-while循环结构比for循环结构可以减少2个周期;
  6. 寄存器分配:尽量限制函数内部局部变量的数目,这样编译器就可以把这些变量分配给ARM寄存器;
  7. 结构体安排:
    1. 结构体元素按照大小来排列,最小的元素放在开始,最大的元素安排在最后;
    2. 避免使用很大的结构体,可以用层次化的小结构体来代替;

第九章 异常和中断处理

参考