我试图找出英飞凌为何决定在其 Tricore 架构链接列表中使用来保存任务上下文(切换到另一个任务时)的原因。
上下文保存在 RAM 中的固定大小/结构块中。每个 CSA(上下文保存区)都有一个指向下一个空闲 CSA 地址的“链接字”。当前的 CSA 存储在 CPU 寄存器 (PCXI) 中,因此当当前任务完成时,它可以恢复前一个任务的上下文。通常用于保存这些 CSA 的 RAM 区域是使用链接描述文件预先分配的。
因此,鉴于上述所有条件,我现在想知道为什么它以这种方式实现(链表),因为它也可以作为堆栈实现(考虑到 CSA 的固定大小/结构,甚至更容易)。
稍后编辑:我首先意识到然后在某处阅读,如果是链表,可以在空闲 CSA 耗尽时触发的陷阱中扩展 CSA 区域。这很容易做到,因为链表不关心节点的 RAM 位置,因此可以动态地为现有链表分配更多节点,以防它不够用。