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.

[参考译文] RTOS:msp432始终处于 notifyFxn()中

Guru**** 2594060 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/585766/rtos-msp432-always-in-notifyfxn

工具/软件:TI-RTOS

你(们)好

  我将 Power_registerNotify ()函数与 PowerMSP432_entering_sleep 事件类型搭配使用。 如:μ A 以下

########

power_registerNotify (&N) notifyObj、PowerMSP432_entering_sleep、(Power_NotifyFxn) notifyFxn、0x1);

unsigned int notifyFxn (unsigned int eventType、unsigned int eventArg、unsigned int clientArg)

  GPIO_TOGGLE (Board_GPIO_LED3);
  返回(Power_NOTIFYDONE);

########

  我发现很奇怪 MCU 总是进入 notifyFxn(),尽管我对 PCM 一无所知。 我认为 MCU 处于工作模式。

  然后我尝试调用 PCM_getPowerMode()和 PCM_getPowerState()来检查当前状态。 我进入函数并获取以下消息:

无法在"/vagrant/build/driverlib/pcm.c "中找到源文件
找到文件或编辑源查找路径以包括其位置。

我很确定我已经包含了 lib 文件,但 PCM.c 位于"simplelink_msp432_sdk_1_30_00_40\source\ti\devices\msp432p4xx\driverlib\pcm.c"而不  是"/vagrant/build/driverlib/pcm.c。

我的问题是:

1、如何跟踪 API 函数“PCM_getPowerMode()”?

2、为什么总是调用 notifyFxn()?

对于第二个问题,我怀疑 调用 Task_sleep()的 sep() API 是否 会对 PCM 执行某些操作。

第三个问题是

3、 Task_sleep()对 MCU 有什么作用?

我的问题可能很简单。  如果您能提供有关 msp432上 PCM 的详细规格、尤其是 RTOS 环境下的详细规格、我们将不胜感激。

顺便说一下、我将 msp432p401r 与 ccs7搭配使用。  

此致。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这些库是在 TI 构建的、因此库中的路径反映了这一点。 您可以导航到 CCS 中的 simplelink 目录、并在出现提示时打开该目录。 但是、1.30版本的 SimpleLink SDK 需要 CCS 7.1。 7.1最好查找源文件。

    我希望器件会改变功率模式、因此它会调用您的回调。

    Task_sleep()使该任务在 API 中的时间到期前被阻止。 当进行 Task_sleep 调用时、具有相同或较低优先级的其他任务可以运行。

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Todd、
    您的回复。
    我尝试在 TI 提供的空示例中添加 notifyFxn(),如下所示:

    ####################

    #include
    #include
    #include

    /*驱动程序头文件*/
    #include

    /*板头文件*/
    #include "Board.h"

    #include
    Power_NotifyObj notifyObj;

    unsigned int notifyFxn (unsigned int eventType、unsigned int eventArg、unsigned int clientArg)

    GPIO_TOGGLE (Board_GPIO_LED0);
    返回(Power_NOTIFYDONE);


    /*
    *==== mainThread ====
    *
    void * mainThread (void * arg0)

    uint32_t 时间= 1;
    GPIO_init();
    GPIO_WRITE (Board_GPIO_LED1、Board_GPIO_LED_ON);
    power_registerNotify (&N)通知、
    PowerMSP432_entering_sleep、
    (POWER_NotifyFxn) notifyFxn、0x1);

    while (1){
    睡眠(时间);


    ##############################

    这种现象是 notifyFxn()始终被调用,LED1看起来比 LED0亮。
    然后我删除代码"SLEEP (TIME);"。 函数 notifyFxn()不再执行,LED0关闭。

    这就是我怀疑 SLEEP()是否会对 PCM 执行某些操作(系统计划除外)的原因。

    我在 tirtos 的 msp432上遇到电源控制问题。 对于 msp432上的 PCM、尤其是 RTOS 环境下的 PCM、是否有任何详细规格?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    移除睡眠状态(但我假设 while (1)仍在那里)后、此任务将永久运行、因为空闲状态永远不会运行、因此不允许器件进入较低功耗模式。

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Todd
    我知道你说什么。 由于 Idle 从不运行,因此 nnotifyFxn()永远不会被调用。 通过比较这两种现象,唯一的区别是 SLEE()函数。 这是否意味着 SLEEP ()将使 MCU 进入真正影响电源控制的空闲状态? 换言之,SLEEP()不仅具有系统调度功能,而且还将 MCU 引入低功耗模式。
    如果我的猜测是对的、那么它的电平(lpm0 lpm3...) MCU 是否会使用 SLEE()进入? 相反,如果 SLEEP()不会更改电源模式,如何解释我在上面给出的示例?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在任务中调用 SLEEP 会导致该任务被阻止(直到超时到期)。 如果系统中没有其他运行的器件、则允许空闲运行、然后您可以进入低功耗模式。 具体的电平取决于其他电平(例如、UART 打开、下一个节拍不到 x 微秒、等等)。

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Todd
    感谢你的答复。 我不确定我的理解是否正确。 当 MCU 处于空闲状态时、它可以进入 lpm、lpm 级别取决于 RTOS 中配置的低功耗策略。

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

    [引述用户="Jufenghan)]感谢您的回复。 我不确定我的理解是否正确。 当 MCU 处于空闲状态时、它可以进入 lpm、lpm 级别取决于 RTOS 中配置的低功耗策略。

    基本而言。

    SimpleLink SDK 中提供了电源管理用户指南。 您可以打开 docs\Documentation_Overview.html 页面并找到链接。

    Todd

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