Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
FinSH
finsh/>list_thread() 遇到的问题
发布于 2017-09-26 11:37:31 浏览:3355
订阅该版
问题描述: 使用MDK,编译STM32F4bsp,使用FINSH组件的LIST_THREAD()命令,终端一直输出。但并未死机,闪灯任务执行正常。 问题分析: 找到内核的如下代码段,添加线程遍历循环因子的打印输出。代码如下。 ``` static long _list_thread(struct rt_list_node *list) { struct rt_thread *thread; struct rt_list_node *node; rt_uint8_t *ptr; rt_kprintf(" thread pri status sp stack size max used left tick error "); rt_kprintf("-------- ---- ------- ---------- ---------- ---------- ---------- --- "); for (node = list->next; node != list; node = node->next) { //下面这行,是自行添加的调试输出代码。 rt_kprintf("node addr = 0x%04x list addr = 0x%04x next addr = 0x%04x ",node,list,node->next); thread = rt_list_entry(node, struct rt_thread, list); rt_kprintf("%-8.*s 0x%02x", RT_NAME_MAX, thread->name, thread->current_priority); if (thread->stat == RT_THREAD_READY) rt_kprintf(" ready "); else if (thread->stat == RT_THREAD_SUSPEND) rt_kprintf(" suspend"); else if (thread->stat == RT_THREAD_INIT) rt_kprintf(" init "); else if (thread->stat == RT_THREAD_CLOSE) rt_kprintf(" close "); ptr = (rt_uint8_t *)thread->stack_addr; while (*ptr == '#')ptr ++; rt_kprintf(" 0x%08x 0x%08x 0x%08x 0x%08x %03d ", thread->stack_size + ((rt_uint32_t)thread->stack_addr - (rt_uint32_t)thread->sp), thread->stack_size, thread->stack_size - ((rt_uint32_t) ptr - (rt_uint32_t)thread->stack_addr), thread->remaining_tick, thread->error); } return 0; } ``` 运行结果: ``` | / - RT - Thread Operating System / | 2.1.0 build Sep 26 2017 2006 - 2016 Copyright by rt-thread team finsh>>list_thread() thread pri status sp stack size max used left tick error -------- ---- ------- ---------- ---------- ---------- ---------- --- node addr = 0x20000cec list addr = 0x20000054 next addr = 0x20000688 tshell 0x14 ready 0x00000074 0x00000800 0x000001b0 0x00000004 000 node addr = 0x20000688 list addr = 0x20000054 next addr = 0x20000cec tidle 0x1f ready 0x00000048 0x00000400 0x00000048 0x00000020 000 node addr = 0x20000cec list addr = 0x20000054 next addr = 0x20000688 tshell 0x14 ready 0x00000074 0x00000800 0x000001b0 0x0000000a 000 node addr = 0x20000688 list addr = 0x20000054 next addr = 0x20000cec tidle 0x1f ready 0x00000048 0x00000400 0x00000048 0x00000020 000 node addr = 0x20000cec list addr = 0x20000054 next addr = 0x20000688 tshell 0x14 ready 0x00000074 0x00000800 0x000001b0 0x00000002 000``` 2次分析: 线程链表 在地址 0x20000cec 和 0x20000688 循环跳转,且永不满足循环跳出条件。
查看更多
6
个回答
默认排序
按发布时间排序
aozima
2017-09-26
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
在论坛中搜索 循环 有挺多类似结果,基本都是重复初始化的原始。 [http://www.rt-thread.org/phpBB3/topic2479.html](finsh运行list_thread()后终端连续循环输出信息问题 [问题是链表环回,因重复初始化线程造成])
songshiqun2010
2017-09-26
这家伙很懒,什么也没写!
按上贴所述,屏蔽如下所示,finsh组件初始化代码问题解决。 ``` void rtthread_startup(void) { /* init board */ rt_hw_board_init(); /* show version */ rt_show_version(); /* init tick */ rt_system_tick_init(); /* init kernel object */ rt_system_object_init(); /* init timer system */ rt_system_timer_init(); rt_system_heap_init((void*)STM32_SRAM_BEGIN, (void*)STM32_SRAM_END); /* init scheduler system */ rt_system_scheduler_init(); /* init application */ rt_application_init(); //#ifdef RT_USING_FINSH // /* init finsh */ // finsh_system_init(); // finsh_set_device( FINSH_DEVICE_NAME ); //#endif /* init timer thread */ rt_system_timer_thread_init(); /* init idle thread */ rt_thread_idle_init(); /* start scheduler */ rt_system_scheduler_start(); /* never reach here */ return ; } ``` 多谢指导!
bernard
2017-09-26
这家伙很懒,什么也没写!
是的,这个是老代码遗留下的问题,以后都会把finsh_system_init从rtthread_startup函数中删除了。
jinggx
2017-09-26
这家伙很懒,什么也没写!
>是的,这个是老代码遗留下的问题,以后都会把finsh_system_init从rtthread_startup函数中删除了。 --- 所有的函数都是rt_****……,唯独rtthread_startup这个函数rt后面少了一个下划线,新版本是否考虑加一个“_”。 感觉提这个问题自己有点强迫症。
bernard
2017-09-26
这家伙很懒,什么也没写!
新版本都推荐使用main函数方式,所以rtthread_startup也就不需要涉及了
撰写答案
登录
注册新账号
关注者
0
被浏览
3.4k
关于作者
songshiqun2010
这家伙很懒,什么也没写!
提问
3
回答
4
被采纳
0
关注TA
发私信
相关问题
1
RT-THREAD shell无反应呢?
2
RT-thread2.0beta下用类似linux风格MSH,参数如何输入和导出
3
rt-thread finsh windows下的那个终端软件叫什么来着
4
板子上只有485接口,能把FINSH改造成485的么?
5
finsh最大字符问题
6
finsh命令个数是不是有限制啊
7
finsh支持转义字符吗
8
不用finsh如何知道堆栈使用量
9
强烈建议 RT-Thread下finsh原理深入分析
10
finsh输入命令全部返回null node
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
Wireshark抓包EtherCAT报文
2
RISC-V hardfault分析工具,RTTHREAD-RVBACKTRACE 原理讲解
3
基于RT-Thread的STM32G4开发第二讲第二篇——ADC
4
基于RT-Thread的STM32F4开发第二讲第一篇——ADC
5
RT-Thread studio的驱动5.1.0报错修改
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
FAL
RTC
rt-smart
I2C_IIC
cubemx
UART
ESP8266
WIZnet_W5500
BSP
ota在线升级
PWM
flash
packages_软件包
freemodbus
潘多拉开发板_Pandora
ADC
GD32
定时器
编译报错
flashDB
keil_MDK
socket
中断
rt_mq_消息队列_msg_queue
Debug
ulog
SFUD
msh
C++_cpp
at_device
本月问答贡献
出出啊
1524
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
818
个答案
179
次被采纳
crystal266
555
个答案
162
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
1
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
2
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部