DEF
我直接使用官方freertos例程开启RTTLog输出模式后发生两个问题
1、RTT界面输出一部分Log后停止需要重新连接J-link_RTT才能在显示一两条后然后又停了,需要重新连接在现实一两条,如此往复
2、蓝牙连接后连接j-link_RTT软件蓝牙很快断连。
是我使用有错,还是在freertos下使用RTT调试需要什么特殊注意的地方,因为使用这个例程中uart模式是没问题的,其他历程中开启RTT调试也是没问题的。
zhongchengzhi
您好,
Q1: 系统进入睡眠,Jlink断了,所以需要重新连接Jlink;
Q2: RTT默认是阻塞模式,可能导致应用程序处于阻塞状态,您可以将RTT配置未非阻塞模式,参考: https://developers.goodix.com/zh/bbs/detail/dfdbea270aad4ebd8969340a402368ef
DEF
感谢解答
Q1:看起来是RTT这边导致的系统进入了睡眠,因为在RTT连接后,广播都不见了,但是是什么原因导致的这个现象,我还不是很理解,freertos进入睡眠的条件是什么呢?明明这个时候还在广播,那么这个时候连接了一下RTT就会进入睡眠吗?
Q2:这里修改为非阻塞后,问题没有解决,在蓝牙连接成功后,连接RTT依然会导致蓝牙断开
#elif (APP_LOG_PORT == 1)
SEGGER_RTT_ConfigUpBuffer(0, NULL, NULL, 0, SEGGER_RTT_MODE_NO_BLOCK_SKIP);
#endif
zhongchengzhi
您好,
1、系统Idle时间大于等于5ms会自动进入睡眠(Sleep模式使能),您可以参考port_pm.c的以下代码
if ( (s_expect_sleep_ticks < 5) ||
(PMR_MGMT_SLEEP_MODE != pwr_mgmt_mode_get()) ||
(DEVICE_BUSY == pwr_mgmt_dev_suspend()) )
{
wfe_func();
//Enable BLE IRQ during systick compensate for ble schedule on time
ble_unlocker = vDisableIRQExeptBLE();
vPortUnLocker(pwr_locker);
systick_compensate_restart();
vRestoreIRQExeptBLE(ble_unlocker);
return ;
}
2、您这里是连接RTT会有问题,还是配置log方式为RTT后有问题(按理配置为non block模式后,是否连接RTT都一样)?你试试把Power model配置为PMR_MGMT_ACTIVE_MODE,并且把RTT连上(保证RTT Log能正常输出)试试呢;
DEF
感谢解答
尝试将Power_mode更改为全速模式后,RTT可以正常输出,并且对蓝牙连接没什么影响,但若是原来的PMR_MGMT_SLEEP_MODE,就有问题
问题现象:
1、刷完固件上电后,观察广播但不连接设备,这是连接RTT,输出一部分Log然后停止输出并且广播消失
2、刷完固件上电后,发现广播后先连接设备,然后连接RTT,无Log输出并且蓝牙断开。
3、若是不连接RTT就没什么问题
zhongchengzhi
您好,
1、芯片睡眠了,RTT连不上,这时RTT会产生一个复位信号导致芯片被复位,所以连接和广播会异常;
2、您这边可以把JLink的复位断开或者用UART输出Log;
打开微信,使用“扫一扫”即可关注