请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:CC3220
您好!
我正在尝试在发生计时器回调时向任务发送消息。 但未收到消息、请查看我的代码。
////////////////////////////////////////////////////////////////////////////////////////////////
//计时器初始化//
Timer_Params_init (&Timer_params);
Timer_params.periodUnits = Timer_Period_US;
Timer_params.period = 30000000;
Timer_params.timerMode = Timer_Continuous_callback;
Timer_params.timerCallback = Callaback;
Timer_handle = Timer_open (Board_TIMER0、&Timer_params);
if (Timer_handle == NULL){
UART_PRINT ("打开计时器时出错");
}
状态= Timer_start (Timer_handle);
如果(状态= Timer_STATUS_ERROR){
UART_PRINT ("启动计时器时出错"\n);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//回叫有趣//
空回叫(Timer_handle){
MSG = DnsclientMessageType_PostLightSts;
ts.tV_sec = 0;
ts.tV_nsec = 0;
RetVal = MQ_timedsend (dnsclientMQueue、(char *)&msg、0、0、&ts);
if (RetVal < 0)
{
while (1);
}
UART_PRINT ("Callaback end \r\n");
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
我每隔30秒就会打印一次"Callaback End"、但 c 无法校准到
DnsclientMessageType_PostLightSts 事件的定义如下:
DnsclientMessageType queueMsg;
int32_t RetVal;
mq_attr 属性;
struct timespec ts;
uint8_t msg;
/*初始化传感器消息的邮箱*/
ATTR.MQ_maxmsg = 10; //队列大小
attr.mq_msgsize = sizeof (DnsclientMessageType); //邮件大小
dnsclientMQueue = mq_open ("sensors msg q"、O_creat、0、&attr);
if (dnsclientMQueue =空)
{
UART_PRINT ("[dnsclient task]无法创建 msg 队列\n");
while (1)//implement Errolog、重试
{
;
}
}
while (1)
{
queueMsg = DnsclientMessageType_SensorsMessagesMax;
Clock_gettime (clock_realtime、&ts);
ts.tV_sec += 2;
RetVal =
mq_timedreceive (dnsclientMQueue、(char *) queueMsg、
sizeof (DnsclientMessageType)、
null、
(&T);
switch (queueMsg)
{
案例 DnsclientMessageType_SensorsMessagesMax:
中断;
案例 DnsclientMessageType_PostLightSts:
PostData (latestLightSts);
中断;
默认值:
中断;
}
}
谢谢你