TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2642R: 消息队列

Part Number:CC2642R

尊敬的TI工程师你好:

我在SimplePeripheral_createTask()任务中调用 函数可以执行到这里

但是在我自己创建的任务里调用SimplePeripheral_createTask()却不能跳到这里 这是什么原因呀?

Galaxy Yue:

您好,

您的代码中是否含有其他case的情况,

传参是否正常?

目前推断的原因是您在自己创建的task中调用SimplePeripheral_createTask()时传参不正常。

您的SBP_DROY_CHANGE_EVT参数可能没传进去或者其他任务中断了现在这个进程。

 

,

?? ?:

你好他最后卡死到了这里

,

Galaxy Yue:

您好,可以把操作台提示的信息放上来吗?

需要查看一下您的代码

以及完整的这个Queue_put截图

,

?? ?:

工作台啥也没提示,这个Queue_put代码也是系统内的看不了

,

Galaxy Yue:

您好,根据console显示board reset  complete

没有任何异常

是如何确定在哪一行代码卡死的

我刚用板子跑了一下,console结果是一样的,是正常的。

,

?? ?:

单步调试卡到Queue_put函数这里走不下去了

,

Galaxy Yue:

您好,考虑以下几个原因

1.队列已满,解决方法:扩大队列缓冲区。检测办法:在Queue_put函数之前加一些代码用来打印当前队列中的元素数量和缓冲区大小。

2.队列已空,根据图示暂不考虑。

3.断点和单步调试冲突。解决方法:关闭断点调试功能,或者重设断点并且尝试重新编译。

4.编译器优化会导致调试不准确,解决方法:可以禁用编译器优化尝试一下。

5.代码路径,受条件分支或者其他代码逻辑的影响,可能此处代码不会被执行。解决方法:检查代码逻辑,前后调用有无问题。

,

?? ?:

你好,根据您的提示 上边那个问题也得到解决,

但是现在我又在while循环和if判断里调用SimplePeripheral_enqueueMsg(SBP_DRDY_CHANGE_EVT, NULL);函数,该函数可以执行,但是却不执行对应的SBP_DRDY_CHANGE_EVT事件, 。是时间被while循环或者if判断打断了嘛?该如何查看?

,

Galaxy Yue:

您好,由于您这边是自己改动的代码,没有完整代码我是看不到代码逻辑的。只能给您提供一些经验性的判断。

在编程语言的语法中,因为switch是一个选择判断语句,它必须满足您设定的条件后,才会执行下面的语句。

所以:1.根据您前后写的代码,您需要判断是否进入这个case情况。

2.在编译器中寻找该函数的定义,调用,传参,具体函数描述

3.最好不要缺省default语句,且用default处理异常情况。

赞(0)
未经允许不得转载:TI中文支持网 » CC2642R: 消息队列
分享到: 更多 (0)