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.

[参考译文] CCS/msp430f5529:我的基本合作任务调度程序的问题、Timer0_A0、WDT 检查

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/585861/ccs-msp430f5529-question-for-my-basic-cooperative-task-scheduler-timer0_a0-wdt-check

器件型号:MSP430F5529

工具/软件:Code Composer Studio

我正在使用计时器构建基本的合作任务调度程序。 快速总结、一个定时器每 x ms 触发一次、在定时器 ISR 中、一个检查任务是否应该被执行并设定一个标志的函数被调用。 然后、主循环中的函数会永久检查列表中的每个任务、以查看是否应执行这些任务。  

我希望避免在主循环中持续轮询、以便我可以睡眠或执行其他任务。 这基本上需要我将与任务相关的函数移动到计时器 ISR。 它的问题是需要触发的关键 ISR (传入的 UART 数据和用于检查系统锁定的 WDT 周期计时器) 不会触发。 我可能允许嵌套中断、但任务调度程序的简单性/安全性会变得不太直接。  

我最好处理主体中任务标志的轮询、还是应该考虑使用嵌套中断、或者我没有考虑过的问题?

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

    Sheldon、您好!

    根据您的说明、您还可以从当前拓扑中选择进入睡眠模式。 您需要首先确定应用程序中允许的 LPM。 它将取决于您希望保持活动状态的外设以及其中使用的时钟。因此、您可以选择 LPM0或 LPM3。 在轮询所有标志后、您可以在主循环中进入 LPM 模式。 现在、当执行计时器 ISR 时、您只需使用__BIC_SR_REGISTER_ON_EXIT (LPMx_Bits)唤醒 CPU 一次以检查主循环中的所有标志。

    通过在 ISR 中设置 GIE 位来嵌套 ISR 并不是一个好主意、直到应用非常必要。  

    此致、

    Vikas Chola

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

    尊敬的 Vikas:

    我喜欢这个解决方案、它应该在可预见的将来适用于我的用例、因为睡眠可能是在调度程序运行时将在主循环中完成的唯一任务。 任何其他任务(例如确定何时关闭调度程序)都可能是一项任务。

     

    编辑:创建一个间隔为零(每次通过时自动触发)的任务可能是有意义的、这样会使系统进入睡眠状态。 (注意:此任务必须是我的列表中的最后一项、这样才能正常工作)这可能会使我更灵活地调整系统。

    感谢您的回答。