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

cc2640r2f 有一个蓝牙任务,然后创建一个adc驱动任务,手机连接上后,蓝牙发送一段时间就不发了

仿真调试发现,程序卡在osal_start_system 函数里面,

osal_run_system();  ICall_wait(ICALL_TIMEOUT_FOREVER);这两句话反复执行,

具体完整代码如下

void osal_start_system( void )
{
#ifdef USE_ICALL
/* Kick off timer service in order to allocate resources upfront.
* The first timeout is required to schedule next OSAL timer event
* as well. */
ICall_Errno errno = ICall_setTimer(1, osal_msec_timer_cback,
(void *) osal_msec_timer_seq,
&osal_timerid_msec_timer);
if (errno != ICALL_ERRNO_SUCCESS)
{
ICall_abort();
}
#endif /* USE_ICALL */

#if !defined ( ZBIT ) && !defined ( UBIT )
for(;;) // Forever Loop
#endif
{
osal_run_system();

#ifdef USE_ICALL
ICall_wait(ICALL_TIMEOUT_FOREVER);
#endif /* USE_ICALL */
}
}

请问什么原因导致的?

Viki Shi:

这段代码看不出问题。建议查一下是不是timer每正确启动,即osal_start_timerEx的返回值

user1388075:

回复 Viki Shi:

只要创建另外一个任务就会出现这个问题, 这个系统对多任务支持不友好么?

Viki Shi:

回复 user1388075:

TI rtos支持多任务,应该是使用有问题。建议观看一下相关的技术视频:training.ti.com/getting-started-ti-rtos-chapter-7-using-tasks

user1388075:

回复 Viki Shi:

另外一个任务有这样一段代码:
unsigned int ReadMCP3914_Ave(void* args, unsigned char ch, unsigned char cnt)
{unsigned int ret = 0;volatile unsigned intready, temp = 0, retry = 0;dsMCPControl *handle = (dsMCPControl *)args;
for (unsigned char i = 0; i < cnt; i++){do{ready = handle->ReadReg(MCP_STCOM);ready = ready & mcpReadReg[ch];
Task_sleep(5 * 100);//100ms
} while (ready != 0);
temp = handle->ReadReg(ch) & 0xffffff;ret += temp;}
return ret / cnt;
}

程序里面有一个等待adc转换完成的操作while (ready != 0);, 这个对蓝牙通信影响很大?
蓝牙任务的优先级高一些啊,这个系统不是抢占是内核么?

user1388075:

回复 Viki Shi:

另外一个任务,只保留个while(1) TaskSleep(100*100);, 然后蓝牙只能连接上,一个服务也看不到,提示Gatt timeout

Viki Shi:

回复 user1388075:

有可能是内存问题,修改一下stack的大小

user1388075:

回复 Viki Shi:

蓝牙statck改成到1300.可以搜到,但是发不出数据, 改到1600, 蓝牙直接搜不到,但是编译器不提示有内存超过的错误

user1388075:

回复 Viki Shi:

设断点,软件周期性任务进不来if (events & HEARTRATE_MEAS_PERIODIC_EVT){HeartRate_measPerTask();}

Viki Shi:

回复 user1388075:

周期性事件进不来,那还是任务使用有问题,上面的视频看一下

user1388075:

回复 Viki Shi:

但是连接蓝牙适配器通信很稳定

赞(0)
未经允许不得转载:TI中文支持网 » cc2640r2f 有一个蓝牙任务,然后创建一个adc驱动任务,手机连接上后,蓝牙发送一段时间就不发了
分享到: 更多 (0)