0, 参考文档
0), TriCore™ V1.6 Core Architecture 32-bit Unified Processor Core User Manual (Volume 1).pdf
1, CSA的含义
CSA就是Context Save Areas的缩写,含义就是上下文存储区域。每次函数调用,进入中断或进入Trap都会存CSA对象,便于退出时候恢复。每个CSA对象的大小为固定的64字节。最大可以支持分配为2^16=4M。
2, CSA的内容
CSA的内容包括了2类:Upper CSA和Lower CSA。PCXI.UL=1代表此CSA对象是Upper CSA的内容,为0代表为Lower CSA的内容。Upper CSA中的内容类似全局变量,在调用的时候都能保存,主要用于传参。Lower CSA中的内容类似局部变量,除了A10, A11, PSW, PCXI和D[15]寄存器,一进入函数或Trap或中断就已经定义了值,其它的寄存器在未写值前就读取则会报错undefined operation。
3, CSA关联的任务切换操作指令
通过执行下图指令就会保存或恢复一个CSA对象。Upper CSA是自动保存的,Lower CSA必须通过指令来保存,如下图示。
4, CSA的保存和恢复
每个CSA对象通过Linkword地址来链接,Linkword的地址内容都是指向下一个链接的地址,如下图示。
- PCX寄存器的含义Previous Context List,内容为之前已经保存的CSA对象
- FCX寄存器的含义Free Context List,内容为空闲的CSA对象
- LCX寄存器定义了最后一个空闲的CSA对象,用来检查CSA使用度以便报Trap
1), Context Save Operation
FCX寄存器和PCX寄存器代表了Linkword的地址,至于CSA的地址和Linkword是等价的,它们有转换关系的。
a. 先把FCX地址指向的CSA3中的第一个内容(linkword)值,赋给FCX_NEW临时寄存器保存(代表保存新的free地址)
b. PCX的内容写入CSA3的linkword(代表CSA3的下一个地址是CSA2,即CSA3指向了CSA2)。因为之前是PCX指向CSA2
c. 将FCX的内容写入PCX,那么PCX的下一个地址是CSA3,即PCX指向了CSA3。因为之前是FCX指向CSA3的
d. FCX_NEW写入FCX
2), Context Restore Operation
FCX寄存器和PCX寄存器代表了Linkword的地址,至于CSA的地址和Linkword是等价的,它们有转换关系的。
a. 先把PCX地址指向的CSA3中的第一个内容(linkword)值,赋给PCX_NEW临时寄存器保存
b. FCX的内容写入CSA3的linkword(代表CSA3的下一个地址是CSA4,即CSA3指向了CSA4),因为之前是FCX指向CSA4
c. 因为之前是PCX指向CSA3的
d. PCX_NEW写入PCX
5, CSA调试
-
通过内核寄存器查看
-
通过常规寄存器查看
-
通过FCX,PCX,LCX菜单查看
-
通过CSA区域的内容地址查看
6, CSA初始化代码举例
启动代码中初始化CSA主要是建立链表关系,设置链表头(PCX)和尾(LCX),如下图示。