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.

[参考译文] TMS570LC4357:用户模式

Guru**** 2481465 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/868231/tms570lc4357-user-mode

器件型号:TMS570LC4357

您好!

我们正在尝试将安全/时间关键型任务与非安全/时间关键型任务分开。 为此、我们在处理器特权模式(SVC、IRQ 和 FIQ)下执行安全/时间关键任务、在用户模式下执行无关键任务。 这还允许 我们使用 MPU 进行存储器保护、其中  以特权模式运行的任务的存储器受到保护、不受 无安全任务的影响。 我们遇到的问题是、在切换到用户模式后、IRQ 和 FIQ 被禁用、在此模式下无法重新启用。 这使得系统在用户模式下不具有确定性 、并且有可能在 没有安全关键任务的情况下挂起安全关键任务。  我们通过该软件架构实现的存储器保护和软件关键性分离的增益被系统确定性的丧失所消除。 在用户模式下是否有任何方法可以解决此问题?

谢谢、

Alex

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

    尊敬的 Alex:

    当 CPU 处于用户模式时、无需禁用中断。 这当然不是自动完成的。 实际上、FIQ 一旦被启用、就不能被禁用、因为它在 Cortex R4/5上被执行为一个不可屏蔽的中断。

    此致、

    Sunil

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

    您好、Sunil、

    您的说法是合理的、但当我切换到用户模式时、IRQ 和 FIQ 看起来会自动禁用。 我可能做了一些错误、但我记得在某处读取的数据显示、从用户模式切换到 SVC 时、需要重新启用 IRQ 和 FIQ。 以下是我的代码的外观:

    if (Swcfg->SwIntf[SwIdx]->swLevel > SW_LEVEL_B)

    //在用户模式下执行

    _asm ("USRMODE1:CPS #16");

    SwDescriptor->BackgroundExec()

    _asm ("SVC1:SVC #1");//返回到 Supervisor 模式

    在软件中断异常中、我执行以下操作:

    _enable_IRQ ();

    _enable_FIQ ();

    否则、当我进入用户模式并从该模式返回后、我不会获得中断。 中断在这些代码行被执行前被启用。

    我会不断检查错误、但如果您发现我出错了、请告诉我。

    谢谢、

    Alex

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

    您好、Sunil、

    这是我的坏情况。 在用户模式下运行的软件初始化期间、我的软件挂起。 这是我启用中断之前的状态。 如果在用户模式下添加无限循环、它不会在后台执行中挂起。 我想我有点困惑。

    感谢您的帮助、

    Alex