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.

[参考译文] CC1352P:可以/如何在 Task_Mode_ BCLOCKED 模式下唤醒任务?

Guru**** 2478765 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1328617/cc1352p-possible-how-to-wake-up-a-task-in-task_mode_blocked-mode

器件型号:CC1352P

您好!

假设我们有一个任务被安排在很长一段时间内运行一次、例如5分钟、但我们希望该任务在发生某些外部事件(例如 GPIO 中断)后立即运行。 有办法实现这一点吗? 我查阅了有关任务的 API 文档、找不到任何合适的功能。

https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/sysbios/6_83_00_18/exports/bios_6_83_00_18/docs/cdoc/index.html

似乎有某种机制可以做到这一点、例如在 TI-15.4传感器示例项目中。 所有应用程序事件都连接到

/*!
 Application task processing.

 Public function defined in sensor.h
 */
void Sensor_process(void)

然后调用以下函数来唤醒应用程序任务:

/* Tell the sensor to start */
Util_setEvent(&Sensor_events, SENSOR_START_EVT);
/* Wake up the application thread when it waits for clock event */
sem_post(sensorSem);

但我不知道这是如何实现的确切机制。

有人可以提供一些指针吗?

谢谢。

ZL

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

    您好、Zhiyong、

    我建议在发生 GPIO 中断时实现一个发布到您的任务中的事件。 任务应在该事件上挂起。 (或在任何事件上挂起。)

    您可以在 GPIO 关断驱动程序示例中看到已剥离的示例:

    https://dev.ti.com/tirex/explore/node?node=A__AHwllEXz1MqP2TLT55a1Bw__com.ti.SIMPLELINK_CC13XX_CC26XX_SDK__BSEc4rl__LATEST&placeholder=true

    谢谢、

    M·H

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

    尊敬的 Marie:

    感谢您的答复。 我认为我们最终会使用事件+计时器/时钟来实现我们想要的目标。

    你愿意为我回答另外两个问题吗?

    1) 1) 信标和 SemaphoreP API 之间的区别是什么? 这在 RTOS7中是新特性吗? 我在下一页中没有看到任何说明。

    SYS/BIOS API 文档

    2) 2)您能帮助我了解 TI-15.4传感器示例中的相关代码吗?

    /*!
     * @brief       Main task function
     *
     * @param       a0 -
     * @param       a1 -
     */
    void *appTaskFxn(void *arg0)
    {
        //....
    
        /* Kick off application - Forever loop */
        while(1)
        {
            Sensor_process(); //doesn't contain any SemaphoreP_post(semHandle)
        }
    }

    FOREVER 循环内的 Sensor_Process ()函数不包含与 GPIO 关机示例类似的代码。

    /* Pend on semaphore before going to shutdown */
    SemaphoreP_pend(semHandle, SemaphoreP_WAIT_FOREVER);

    那么、该环路是如何进入空闲状态的? 在我看来、它似乎可以不停地运行、没有空闲。

    此致!

    ZL

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

    您好、Zhiyong、

    1) 1)信标与 SepaphoreP (以及时钟与 ClockP)、信标是 TIRTOS 实现、而 SemaphoreP 是 POSIX 实现。 出于兼容性原因、我们在示例中使用了 POSIX。 您可以使用其中任何一种。

    有关 POSIX 的更多文档:

    https://dev.ti.com/tirex/explore/content/simplelink_cc13xx_cc26xx_sdk_7_10_02_23/docs/tiposix/Users_Guide .html

    2)如果你看看 Sensor_Process()的实现,你会看到它使用下面的 if 语句和其他 API 来检查每一个可能的事件。

        /* Is it time to send the next sensor data message? */
        if(Sensor_events & SENSOR_READING_TIMEOUT_EVT)

    在 Sensor_Process()结束时, 调用 ApiMac_processIncoming()。 在该函数中、你可以看到 PEND API 调用(在本例中为 SEM_WAIT):

    void ApiMac_processIncoming(void)
    {
        macCbackEvent_t *pMsg;
    
        /* Wait for response message */
        if( sem_wait(&appSemHandle) == 0)
        {

    谢谢、

    M·H