|
RTK-E是基于POOL,和CLUSTER对内存管理的,你可以定义任何数目的POOL个数(这受到内存实际大小的影响),对每一个POOL,你可以定义CLUSTER的大小,一个POOL的所有CLUSTER必须要有相同的大小。
这种方法是基于对内存BLOCK的联表形式实现的,这种形式是可以被TASK所使用的。当这些BLOCK被使用的时候,它们联表中再次移动。当他们不被使用的时候,他们被保存在空白内存POOL的联表中。
之所以这样的划分内存,是因为为了避免内存破碎。如果我们从堆栈(STACK)中使用任意大小的内存,最终内存会变得有很多的碎片导致没有足够大的连续内存空间的使用,这必将导致使用垃圾收集设置,这对手机的开发是不合适的。
内存POOL和CLUSTER(对RTK-E)是固定的。当一个TASK请求内存的时候,会寻找最合适大小的几个CLUSTER,RTK-E会选择一个可以使用的足够大的CLUSTER来使用。
内部128KRAM作为外部寻址空间,如果一个芯片选择了CS1_N或者CS3_N应该具有最大128K的空间。这128K空间可以用作IDLE模式,也可以由DMA方式进入。
内部寄存器和内部的ROM在0XFFFF 8000 到0XFFFF FFFF,在这里采用绝对短地址模式。
PCF50874的EMI包含了外部内存7.872M空间。对任何一个芯片选择了最大的地址空间。
必须注意中断出错向量表,在0000到001C(这些连续的地址空间为FIQ服务保留,避免在其他的地方留分支)。FIQ和IRQ可以重新映射外部内存用IMR的REV位。
SC寄存器的映射
下列情况会发生映射向量出错:
1. 外部企图进入一个芯片编程地址之外的地址空间
2. 内部企图进入一个外部步存在的外设地址
3. 一个关闭了时钟的外设地址
每一个寄存器的地址分配遵循了下列原则:
1.对每一个外设保留了256字节的地址空间
2.对每一个DMAU的地址通道保留了16字节的地址空间
3.以字为单位的寄存器存放在(基址地址+4)×N的地址上
4.以半字为单位的寄存器存放在(基址地址+6)×N的地址上
5.以字节为单位的寄存器存放在(基址地址+6)×N的地址上
芯片选择,系统控制,内存控制寄存器(FROM PCF5087X):
寄存器CS0:
BIT2: 0 ,等待的状态,7种状态,0为没有状态;13KHZ写周期不能用0状态;
BIT8:3 ,芯片基地址的选择;
BIT10:9, 读写控制位;
BIT13:11,总线模式的选择;
BIT15:14,内存模块大小的选择
其余三个寄存器类似;
SYSCON寄存器的位介绍:
BIT1:0 ,总线仲裁的形式。令牌窃取,公平竞争,DMA高速形式,DMA低优先级。
BIT2, 显示循环模式
BIT3, 快速总线循环,
BIT6, 数据地址总线下拉
MEMCTRL:仿真时候的内存控制。
总线接口可以配置成搭配不同的地址映射方式,根据实际连接的外部内存来定义地址映射,这样非法进入不存在的或者不相容的内存地址空间就会被检测到,会产生出错中断。
下列情况会导致出错中断:
1.将一个8位数据写到配置成16位的寄存器
2.写一个设置为只读的内存地址空间
3.读一个设置为只写的内存地址空间
4.读写一个地址以外的地址空间
BLOCK SIZE CONFIG |
|