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.

[参考译文] CC1312R:如何使用 SEM_timedwait

Guru**** 2484615 points
Other Parts Discussed in Thread: CC1312R

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1185149/cc1312r-how-to-use-sem_timedwait

器件型号:CC1312R
Thread 中讨论的其他器件: SYSBIOS

尊敬的专家:

在 CC1312R Uartcallback 示例中、执行回调函数后、必须使用信标来打印数据、 但是、该信标会一直等待  、直到 UART 回调函数执行我希望避免这种永远等待的情况、例如、信标会等待一分钟、然后如果 UART 函数在此期间内不执行、信标将允许自动执行下 一个函数 、

此致

Surya  

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

    您好 Surya、

    我认为 POSIX 信标(semaphore.h)不支持这一点。 您可以改用 TIRTOS7信标、您可以在这里指定 Semaphore_pend()调用中的超时。

    API 文档: https://dev.ti.com/tirex/explore/content/simplelink_cc13xx_cc26xx_sdk_6_40_00_13/docs/tirtos7/doxygen/m4/html/Semaphore_8h.html

    谢谢、

    玛丽·H

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

    你(们)好、

    感谢您的回复、我在这里怀疑 bool semaphore_pend (Semaphore_Object * sem、uint32 timeout),超时的时间单位是?毫秒或什么? 如何设置 Semaphore_pend ( &sem、10000)单元;//等待10秒或什么?

    我正在使用  rfPacketTx_CC1312R1_LAUNCHXL_tirtos7_gcc、SDK 为  

    simplelink_cc13xx_cc26xx_sdk_6_30_01_03

    此致

    Surya

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

    你(们)好、

    我添加 了#include 使用 Semaphore_pend (&sem、10000);但它不会从信号量中退出。 请告诉我如何执行此操作。

    当 UART 数据在10秒内不可用时、我想从 uart2callback_CC1312R1_LAUNCHXL_tirtos7_gcc 示例中退出信标...

    此致

    Surya  

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

    各位专家:

    我还在等回应

    此致

    Surya

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

    您好 Surya、

    您是否还将 POST API 更改为使用  #include ?

     Semaphore_pend()的单位是系统节拍。

    谢谢、

    玛丽·H

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

    你(们)好、 

    很抱歉、对于较晚的响应、是的、我已经尝试了 Semaphore_pend (&sem、1000000); //10sec、 但它不起作用意味着当 uartdata 可用时它不会读取数据...

    *

    /*
    *==== uart2callback.c ===
    *
    #include
    #include

    /* POSIX 头文件*/
    #include

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

    /*驱动程序配置*/
    #include "ti_drivers_config.h"

    #include

    静态 SEM_t SEM;
    静态易失性 size_t numBytesRead;

    /*
    *==== callbackFxn ====
    *
    void callbackFxn (UART2_Handle handle、void * buffer、size_t count、void * userArg, int_fast16_t status)

    if (status!= UART2_STATUS_SUCCESS)

    /* UART2_READ()中出现 RX 错误*/
    while (1){}

    numBytesRead = count;
    SEM_post (&SEM);

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

    字符输入;
    const char echoPrompt[]="回显字符:\r\n";
    UART2_Handle UART;
    UART2_Params uartParams;
    int32_t semStatus;
    uint32_t status = UART2_STATUS_SUCCESS;

    /*调用驱动程序初始化函数*/
    GPIO_init();

    /*配置 LED 引脚*/
    GPIO_setConfig (CONFIG_GPIO_LED_0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);

    /*创建信标*/
    semStatus = SEM_INIT (&SEM、0、0);

    if (semStatus!= 0)

    /*创建信标时出错*/
    while (1){}

    /*在回调读取模式下创建 UART */
    UART2_Params_init (uartParams);
    uartParams.readMode = UART2_Mode_callback;
    uartParams.readCallback = callbackFxn;
    uartParams.baudrate = 115200;

    UART = UART2_open (CONFIG_UART2_0、uartParams);

    如果(UART == NULL)

    /* UART2_open()失败*/
    while (1){}

    /*打开用户 LED 指示初始化成功*/
    GPIO_WRITE (CONFIG_GPIO_LED_0、CONFIG_GPIO_LED_ON);

    /*对 bytesWritten 传递 NULL,因为它未在本示例中使用*/
    UART2_WRITE (UART、echoPrompt、sizeof (echoPrompt)、NULL);

    /*循环永久回显*/
    while (1)

    numBytesRead = 0;

    /*对 bytesRead 传递 NULL,因为它未在本示例中使用*/
    STATUS = UART2_READ (UART、INPUT、1、NULL);

    if (status!= UART2_STATUS_SUCCESS)

    /* UART2_READ()失败*/
    while (1){}

    /*在执行读回调之前不要写入*/
    //SEM_WAIT (&SEM);
    Semaphore_pend (&sem、10000000);

    如果(numBytesRead >0)

    STATUS = UART2_WRITE (UART、INPUT、1、NULL);

    if (status!= UART2_STATUS_SUCCESS)

    /* UART2_write()失败*/
    while (1){}


    GPIO_TOGGLE (CONFIG_GPIO_LED_0);

    此致

    Surya

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

    您好 Surya、  

    很抱歉此主题出现延迟。  

    如果您想使用  Semaphore_pend 函数。 然后、您还需要使用 TIRTOS 中的信号量模块创建、初始化和发布。  

    您需要使用 Semaphore_create()和 Semaphore_post() 来创建和布置 spmaphore。

        Semaphore_Handle semHandle;
        Semaphore_Params semParam;
        Semaphore_Params_init(&semParam);
        semHandle = Semaphore_create(0, &semParam, NULL);
        Semaphore_post(semHandle);
        Semaphore_pend(semHandle, 10000000);

    此致、

    SID