本帖最后由 mypear 于 2025-5-15 12:23 编辑
使用keil编译Threadx程序后,通过JLink下载程序,下完后程序运行,Threadx运行到某一个任务异常,异常情况像是第一次运行正常,第二次就没运行(异常任务简称任务D),只有使用JLink下载程序(已选择run to main)才出现。使用JLink仿真运行没问题,但是退出仿真后,原本正常运行任务D就出现异常(没有再次运行)。使用CMSIS-DAP 下载程序,仿真程序和仿真退出,Threadx任务一直运行正常。在JLink下载程序条件后,对主板重新断电上电(或者复位),程序运行正常。
测试任务如下,任务异常是App_Task_DateTime任务。
App_Task_DateTime 这个任务是1秒种打印一次时间。
[C] 纯文本查看 复制代码 static void AppTaskDateTime(ULONG thread_input)
{
(void)thread_input;
date_time_t dt;
uint8_t buf[4] = {0x34,0x0D,0x0A};
while(1)
{
SCOM6_Send_Bytes(buf, 3);
#if 1
if(rtc_get_time(&dt))
{
My_Printf(">> date time %d-%02d-%02d %02d:%02d:%02d,week:%d\r\n", dt.year,
dt.month,
dt.day,
dt.hour,
dt.minute,
dt.second,
dt.weekday);
}
else
{
My_Printf(">> get rct time err\r\n");
}
#endif
tx_thread_sleep(1000);
}
}
当我屏蔽rtc_get_time()功能后,用JLink下载程序后正常的,COM6每隔一秒打印4出来(也测试过同My_Printf无关,屏蔽过My_Printf,使用rtc_get_time(),JLink下载程序运行这个任务也异常)。
rtc_get_time()使用模拟IO口实现I2C驱动,读取外部RTC8025T时钟。模拟I2C延时使用的是DWT时钟做延时。JLink会有影响DWT运行么?或者其他问题影响?请个位帮忙分析下。
使用JLink下载程序后首次运行的输出信息,仅输出“4”
|