Thread 中讨论的其他器件: SYSBIOS
尊敬的专家:
在 CC1312R Uartcallback 示例中、执行回调函数后、必须使用信标来打印数据、 但是、该信标会一直等待 、直到 UART 回调函数执行我希望避免这种永远等待的情况、例如、信标会等待一分钟、然后如果 UART 函数在此期间内不执行、信标将允许自动执行下 一个函数 、
此致
Surya
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.
您好 Surya、
我认为 POSIX 信标(semaphore.h)不支持这一点。 您可以改用 TIRTOS7信标、您可以在这里指定 Semaphore_pend()调用中的超时。
谢谢、
玛丽·H
你(们)好、 Marie 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
你(们)好、 Marie 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