CN / EN
CN / EN

提问

获得支持

您的项目私密技术问题如需获得一对一支持,请点击下方联系我们。

使用freertos的项目,如何正确使用RTT调试 GR551x

DEF

2023-09-25 14:44

我直接使用官方freertos例程开启RTTLog输出模式后发生两个问题

1、RTT界面输出一部分Log后停止需要重新连接J-link_RTT才能在显示一两条后然后又停了,需要重新连接在现实一两条,如此往复

2、蓝牙连接后连接j-link_RTT软件蓝牙很快断连。

是我使用有错,还是在freertos下使用RTT调试需要什么特殊注意的地方,因为使用这个例程中uart模式是没问题的,其他历程中开启RTT调试也是没问题的。

0收藏

0赞成

zhongchengzhi

汇顶员工
2023-09-26 10:31

您好,

Q1: 系统进入睡眠,Jlink断了,所以需要重新连接Jlink;

Q2: RTT默认是阻塞模式,可能导致应用程序处于阻塞状态,您可以将RTT配置未非阻塞模式,参考: https://developers.goodix.com/zh/bbs/detail/dfdbea270aad4ebd8969340a402368ef

0条评论

0赞成

0收藏

您的评论

DEF

2023-09-27 08:51

感谢解答

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

0条评论

0赞成

0收藏

您的评论

zhongchengzhi

汇顶员工
2023-09-27 10:55

您好,

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能正常输出)试试呢;

0条评论

0赞成

0收藏

您的评论

DEF

2023-09-27 13:57

感谢解答

尝试将Power_mode更改为全速模式后,RTT可以正常输出,并且对蓝牙连接没什么影响,但若是原来的PMR_MGMT_SLEEP_MODE,就有问题

问题现象:

1、刷完固件上电后,观察广播但不连接设备,这是连接RTT,输出一部分Log然后停止输出并且广播消失

2、刷完固件上电后,发现广播后先连接设备,然后连接RTT,无Log输出并且蓝牙断开。

3、若是不连接RTT就没什么问题

0条评论

0赞成

0收藏

您的评论

zhongchengzhi

汇顶员工
2023-10-07 11:44

您好,

1、芯片睡眠了,RTT连不上,这时RTT会产生一个复位信号导致芯片被复位,所以连接和广播会异常;

2、您这边可以把JLink的复位断开或者用UART输出Log;

0条评论

0赞成

0收藏

您的评论

登录后可回答问题,请 注册

我们时刻倾听您的声音
联系销售

扫描关注公众号

打开微信,使用“扫一扫”即可关注