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.

[参考译文] EALLOW 资源锁定

Guru**** 2001725 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/568443/eallow-resource-locking

在 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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Joseph、

    我们没有多个线程在 CPU 上运行。 您是否看到过这样的问题?

    此致、
    Vivek Singh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Vivek、

    [引用 user="Vivek Singh"]我们没有在 CPU 上运行多个线程。

    也许"线程"是错误的使用术语、而"上下文"更好、因为我认为中断可以从非中断代码中切换上下文。  但是、在进一步阅读后、TMS320C28x CPU 和指令集参考指南 spru430f 第42页指出、EALLOW 在处理中断前被保存、然后在处理后被恢复。

    [报价用户="Vivek Singh"]您是否发现了此类问题?

    我看到的情况正好相反、当我 在这里发布的 EALLOW 未启用时、EALLOW 保护寄存器被成功写入。  我假设原因是另一个线程启用了 EALLOW。  由于 EALLOW 被保存/恢复用于中断、这也许是 TI-RTOS 问题?  我不确定 TI-RTOS 支持的其他处理器是否具有 EALLOW、因此我认为它可能是特定于 C2000的。

    此致、

    Joseph

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Joseph、

    我看到了另一篇文章。 我认为它在调试器复位后起作用、因为在 CCS GEL 文件中我们有一个函数 CLA_Clock_Enable()、它启用 CLA 时钟、并且每次进行调试复位时都会调用此函数。 不过、这对于看门狗复位不起作用、因为在这种情况下不会调用此函数、并且您的代码没有启用 EALLOW。

    希望这对您有所帮助。

    此致、

    Vivek Singh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Vivek、

    有道理。

    此致、
    Joseph