CC1310多任务模式下死机,紧急,复位没有反应。
一、CC1310功能需求说明:
1、 实现433MHZ频段无线数据的接收与发送。
2、 实现串口通信功能,即UART功能
3、 实现IIC接口数字温度传感器的温度值采集
4、 实现采用定时器TMRA延时1S钟中断功能。
二、设计逻辑:
1、无线接收功能一直处于等待接收数据状态。
2、当无线接收到命令数据后,采用无线发送数据功能返回命令。
3、UART一直处理等待接状态,即从动功能,当收到主机的命令后,返回数据给从机。
5、 IIC接口1S钟读取一次数字温度传感器的温度值。
6、 当无线接收在1分钟没有收到主机发来的读取温度命令时,即无线将自动将温度值主动发送一次给接收主机。
当前遇到问题:
1、采用TIRTOS时,无线接收采用一个TASK,无线发送采用一个TASK,单一的一个TASK时,工作完全正常,当使用两个TASK时,工作不正常,发送TASK时就会程序会跑飞或是死机EasyLink_transmitAsync(&txPacket, txDoneCb);
/* Wait 300ms for Tx to complete */
if(Semaphore_pend(txDoneSem, (300000 / Clock_tickPeriod)) == FALSE)
在上述红色语句处程序跑飞,无法再回到TASK中
根据上述的罗辑问题,多TASK应该如何来实现?
建议你把无线接收和发送发在一个task里面,并且确定的知道RF当前所处的状态。
比如,如果RF现在处于RX状态,你这时需要先退出RX状态,再将其置为TX状态进行数据发送。
现在是这么做的,在一个TASK里面进行的
我现在是RX建的一个TASK,但是发送的也是在这个TASK中执行,只是在另一个TASK中置TX的标志,然后RX的TASK任根据标志执行是发送还是接收
建了一个433的RX的TASK,和一个TMR的TASK,其它的都是在TMR的TASK里面通过分时执行各个功能的
我本意是RX一个TASK,TMR一个TASK,UART一个TASK,IIC一个TASK的
但是就是不行,超过2个TASK,程序就不干活了
超过2个task时,后面的task都创建成功了吗?
可以创建成功的,编译也是正常的。是否可以提供一个参考工程?
你可以使用ROV(RTOS Object View)在线查看一下你后面创建的几个task的状态。
另外,你可以关注一下使用Task_creat和Task_construct创建task的区别,避免由于堆栈分配不成功造成任务创建失败。
你可以参考一下rfWsnNode和rfWsnConcentrator例程。