44922004.doc
CPSR寄存器表示当前ARM的工作状态 条件位: N = 1-结果为负,0-结果为正或0 Z = 1-结果为0,0-结果不为0 C =1-进位,0-借位
V =1-结果溢出,0结果没溢出
Q 位:仅ARM 5TE/J架构支持,指示增强型DSP指令是否溢出 J 位:ARM 5TE/J架构支持 J = 1: 处理器处于Jazelle状态 中断禁止位: I = 1: 禁止 IRQ. F = 1: 禁止 FIQ.
T Bit: T = 0: 处理器处于 ARM 状态T = 1: 处理器处于 Thumb 状态 Mode位(处理器模式位): 0b10000 User
联想移动产品开发部软件处 - 8 -
44922004.doc
0b10001 FIQ 0b10010 IRQ 0b10011 Supervisor 0b10111 Abort 0b11011 Undefined 0b11111 System
2.3.2 ARM存储器格式
在ARM体系中,每个字单元包含4个字节单元或者两个半字单元;一个半字单元中包含两个字节单元。但是在字单元中,4个字节哪一个是高位字节,哪一个是低位字节则有两种不同的格式;big_endian格式和little-endian格式。比如一个整型数0x12345678在内存中如下图所示
-----------
| 78 | xxxx_0000 -----------
| 56 | xxxx_0001 -----------
| 34 | xxxx_0002 -----------
| 12 | xxxx_0003 -----------
Little Endian
-----------
| 12 | xxxx_0000 -----------
| 34 | xxxx_0001 -----------
| 56 | xxxx_0002 -----------
| 78 | xxxx_0003 -----------
Big Endian
联想移动产品开发部软件处 - 9 -
44922004.doc
第3章 Driver相关模块介绍
3.1 REX简介
REX只是L4上面的一个Task。虽说目前QSC60x5平台上采用L4操作系统,但高通为了开发的兼容性,提供的API仍然采用老的一套接口(可能内部实现不一样),很容易将老的代码移植到新的架构中。那么我还试必要介绍一下REX。
REX是一个操作系统的名字,它是Real-time Executive的缩写。它是美国的QUALCOMM开发的,REX是一个简单的、高效的、抢占式的、多任务的、嵌入式实时操作系统。它最初是为应用于Intel的80186而设计的,如今它已经被移植到了ARM微处理器上。 下面是它比较重要的几个概念(其实和其他操作系统一样): 1、 Task
REX把任务当作独立运作的实体,每一个任务都有自己独立的堆栈和优先级。每个任务都有一个数REX允许在运行时,据结构,我们称为―任务控制块‖(TCB)。在任何时间动态的创建任意数量的任务。
但是创建的任务越多,REX的性能便稍微递降,这是因为你创建的任务越多,任务列表越长。所以你需要确保你创建的任务数量尽量小。另外,REX任务的负载量还跟你选择的处理器有关。 下面的图描述了REX任务的启动过程:
TCB也是一个比较重要的结构体,各个task都有一个全局变量tcb,这个tcb包含了很多重要信息如,任务优先级、堆栈指针,信号量等,这些有时对查死机问题很有帮助。 2、 任务调度
联想移动产品开发部软件处 - 10 -
44922004.doc
REX总是选择处于就绪态的最高优先级的任务进行调度,如果任务的优先级不是唯一的,REX可能选择任何一个处于就绪态的最高优先级的任务进行调度。被选择的任务会一直执行,直到它自愿挂起或者中断发生而激活了更高优先级的任务。
当被挂起的任务的等待条件得到满足时,该任务就变成了就绪态。如果所有的认为都挂起的时候,那么空闲认为就被执行。
REX提供了一种机制,允许任务可以动态的提高或降低自己或其它任务的优先级。 3、 信号量
信号量是任务之间进行通信和同步的桥梁。信号量是REX提供的一种任务间通信的机制。每个任务都有一套与之相关联的通用信号量,信号量通常作为任务的TCB的一部分,它们被用来通知任务某种事件的发生,任务的信号量可以被任何其它任务或中断设置或清除。 信号量实际上是一种约定机制,在多任务内核中普遍使用,信号量用于: ", 控制共享资源的使用权(满足互斥条件); ", 标志某事件的发生; ", 使2个任务的行为同步。
4、 中断
REX是一个可剥夺的内核。当从中断返回的时候,控制权就被传递给处于最高优先级的就绪任务,而没有必要返回到被ISR中断了的任务处。 一般我们只会挂载GPIO中断,后续会介绍。 5、 定时器
定时器,英文是timer。和其它内核一样,REX要求给用户提供定时时间,来实现超时控制等功能。REX中有些信号是事件触发引起,也可以由timer引起。一旦由于某种原因,等待的事件信号一直等不到,这时可以用timer定时来产生信号量。 关于以上几个概念,高通都提供了相关接口操作,具体参看代码!
3.2 Boot 高通平台系统Memory组成可以分为:NAND+SDRAM和NOR+PSRAM 。两者配置不能并存,这也就决定了有两种boot模式,具体决定采用哪种Boots方式是Boot_mode引脚决定。
联想移动产品开发部软件处 - 11 -
44922004.doc
高通60x5系列采用了Multi-Image-Boot技术,这可以从高通的代码看出,
从上述枚举变量中可以看出,flash中有多个image.其中QCSBL+OEMSBL =SBL,SBL就相当于bootloader, Bootloader主要是在Nand启动方式中起作用!原因后续介绍! 其中每个Image又是由三个部分组成:
联想移动产品开发部软件处 - 12 -