This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
在 C2000中、某些寄存器受 EALLOW 保护。 使用 EALLOW 的代码是否需要资源锁定? 如果没有资源锁定、在以下情况下 EALLOW 保护的寄存器写入可能会失败:有两个线程分别执行 EALLOW、EALLOW 保护的寄存器写入和 EDIS、但按如下顺序排列:
1) 1)螺纹1 EALLOW
2) 2)螺纹2 EALLOW、
3) 3)线程2 EALLOW 保护寄存器写入
4)螺纹2 EDIS
5) 5)线程1 EALLOW 保护寄存器写入
6) 6)线程1 EDIS 将导致线程1 EALLOW 保护寄存器写入失败。
在这种情况下、#5线程1 EALLOW 保护寄存器写入将失败、因为 EALLOW 被#4线程2 EDIS 禁用。 资源锁定会阻止这种情况发生。 但是、我没有在示例/库代码中遇到 EALLOW 资源锁定或在文档中提到过。
-Joseph
您好、Vivek、
[引用 user="Vivek Singh"]我们没有在 CPU 上运行多个线程。
也许"线程"是错误的使用术语、而"上下文"更好、因为我认为中断可以从非中断代码中切换上下文。 但是、在进一步阅读后、TMS320C28x CPU 和指令集参考指南 spru430f 第42页指出、EALLOW 在处理中断前被保存、然后在处理后被恢复。
[报价用户="Vivek Singh"]您是否发现了此类问题?
我看到的情况正好相反、当我 在这里发布的 EALLOW 未启用时、EALLOW 保护寄存器被成功写入。 我假设原因是另一个线程启用了 EALLOW。 由于 EALLOW 被保存/恢复用于中断、这也许是 TI-RTOS 问题? 我不确定 TI-RTOS 支持的其他处理器是否具有 EALLOW、因此我认为它可能是特定于 C2000的。
此致、
Joseph