硬汉嵌入式论坛

 找回密码
 立即注册
查看: 268|回复: 6
收起左侧

[ThreadX全家桶] Threadx使用Jlink下载程序后,运行异常求解。

[复制链接]

3

主题

28

回帖

37

积分

新手上路

积分
37
发表于 2025-5-15 11:58:48 | 显示全部楼层 |阅读模式
本帖最后由 mypear 于 2025-5-15 12:23 编辑

使用keil编译Threadx程序后,通过JLink下载程序,下完后程序运行,Threadx运行到某一个任务异常,异常情况像是第一次运行正常,第二次就没运行(异常任务简称任务D),只有使用JLink下载程序(已选择run to main)才出现。使用JLink仿真运行没问题,但是退出仿真后,原本正常运行任务D就出现异常(没有再次运行)。使用CMSIS-DAP 下载程序,仿真程序和仿真退出,Threadx任务一直运行正常。在JLink下载程序条件后,对主板重新断电上电(或者复位),程序运行正常。

测试任务如下,任务异常是App_Task_DateTime任务。

任务.png

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”
任务运行.png




回复

使用道具 举报

3

主题

28

回帖

37

积分

新手上路

积分
37
 楼主| 发表于 2025-5-15 12:29:00 | 显示全部楼层

正常运行的
屏幕截图 2025-05-15 122816.png
回复

使用道具 举报

11

主题

694

回帖

727

积分

金牌会员

积分
727
发表于 2025-5-15 13:57:58 | 显示全部楼层
应该和JLINK没关系。我也用JLINK下载THREADX。运行好多天没问题。
回复

使用道具 举报

11

主题

694

回帖

727

积分

金牌会员

积分
727
发表于 2025-5-15 13:58:51 | 显示全部楼层
排除法,任务减少点,一点一点增加,边增加边测试。有时候是硬件初始化的问题。还有堆栈。
回复

使用道具 举报

3

主题

28

回帖

37

积分

新手上路

积分
37
 楼主| 发表于 2025-5-15 14:59:04 | 显示全部楼层
hqgboy 发表于 2025-5-15 13:58
排除法,任务减少点,一点一点增加,边增加边测试。有时候是硬件初始化的问题。还有堆栈。

已经排除到rtc_get_time(&dt)这个函数,只要屏蔽它,所有任务运行都正常(当然是用JLink下载才是这样)。没屏蔽它,含有这个函数任务就没有运行。RTC是使用IO模拟I2C的,I2C驱动延时是使用DWT。我怀疑DWT用JLink下载启动异常。主要仿真问题又不出现。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116196
QQ
发表于 2025-5-16 08:38:50 | 显示全部楼层
mypear 发表于 2025-5-15 14:59
已经排除到rtc_get_time(&dt)这个函数,只要屏蔽它,所有任务运行都正常(当然是用JLink下载才是这样)。 ...

你的jlink可能没正常复位dwt,不过影响不大,以重新上电是否可运行为准
回复

使用道具 举报

3

主题

28

回帖

37

积分

新手上路

积分
37
 楼主| 发表于 2025-5-16 10:57:52 | 显示全部楼层
eric2013 发表于 2025-5-16 08:38
你的jlink可能没正常复位dwt,不过影响不大,以重新上电是否可运行为准

收到。手头上只有山寨版,2个都是jlink v9。暂时mark低,到时再试其他jlink是不是一样
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-9 17:31 , Processed in 0.493491 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表