C29x CPU 使用多个栈来确保不同进程之间的完整性和分离。每个链接在器件初始化时应映射一个关联的栈。多个链接可以共享一个栈,但多个栈不共享链接。下面列出了与 PIPE 和中断相关的栈,以及相应的安全特性:
- INT 栈:用户可为所有 INT 选择并分配一个栈。此栈是器件上可用的正常软件栈之一。向 CPU 发出的 INT 保持挂起状态,直到 CPU 返回此栈。通常,这应该是主进程的栈。
- RTINT 栈:这是专用栈用于 RTINT 和 NMI 的背景保存和恢复。对于任何用户代码而言,该栈均无法访问或查看,因此它包含了 ECC(错误校正代码)与寄存器。寄存器被置为零,这样就不能监测中断服务之前所发生的情况。高优先级中断栈上提供的特性包括:
- WARNRTISP 级别::该级别由安全软件代码进行预编程。如果来自 CPU 的 ISP 达到此级别,则外部 PIPE 模块停止向 CPU 发送 RTINT。这是为了减慢栈进度或过多的嵌套,这些嵌套可能会导致栈溢出。用户可根据所需的软件安全检查更新 WARNRTISP 级别。通常在复位后修改 WARNRTISP 级别。
- MAXRTISP 级别::固定嵌套数(等于高优先级中断栈所允许的嵌套总数减一)。这是为了让 NMI 触发一个保留的中断栈空间,以防止栈溢出。当达到此级别时,PIPE 会产生故障,进而产生 NMI 以解决此严重情况。