Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
DIY综合交流区
[RealTouch例程]Finsh的基本使用
发布于 2012-08-20 22:02:58 浏览:5928
订阅该版
实验目的 快速熟悉命令行形式的调试和信息查看组件Finsh 硬件说明 本实验使用RT-Thread官方的Realtouch开发板作为实验平台。涉及到的硬件主要为 ? 串口3,作为rt_kprintf输出,需要连接JTAG扩展板 具体请参见《Realtouch开发板使用手册》 实验原理及程序结构 对于用户来讲,Finsh组件有三个主要功能 ? 获取系统运行时信息,如各种RT-Thread内核对象的动态信息。 ? 能够对任意寄存器和内存地址进行读写操作 ? 能够直接在shell中调用系统函数,访问系统变量 实验设计 本实验的主要设计目的是帮助读者了解Finsh组件的基本用法及内置命令。请读者注意,本实验本身不具有实际的工程参考价值,只是帮助读者快速了解Finsh组件的用法。 源程序说明 系统依赖 在rtconfig.h中需要开启 ? #define RT_USING_HEAP 此项可选,开启此项可以创建动态线程和动态信号量,如果使用静态线程和静态信号量,则此项不是必要的 ? #define RT_USING_CONSOLE 此项必须,本实验使用rt_kprintf向串口打印按键信息,因此需要开启此项 ? #define RT_USING_FINSH 此项必须,只有打开此项,Finsh组件才会被使用 ? #define RT_USING_SYMTAB 此项可选,打开此项可以使用宏输出的方式向Finsh shell中添加命令。 主程序说明 ? Finsh 的配置,在rt_config.h中使能Finsh组件,默认情况是使能的。 ```/* SECTION: Finsh, a C-Express shell */ #define RT_USING_FINSH /* Using symbol table */ #define FINSH_USING_SYMTAB #define FINSH_USING_DESCRIPTION``` ? Finsh的初始化 ```#ifdef RT_USING_FINSH /* initialize Finsh */ Finsh_system_init(); Finsh_set_device(RT_CONSOLE_DEVICE_NAME); #endif``` 在application.c中,首先会运行一个名为init的线程,这个线程的工作就是将此次用到的组件全部初始化,所以这个线程中只用到了一条语句rt_components_init(),我们可以在components_init.c中看到这个函数的具体定义,而关于Finsh的初始化,则就是上面列出的这一段,如果还有别的组件需要初始化话,其初始化工作也会在这里进行。注意一下的是RT_CONSOLE_DEVICE_NAME,这个也是在rt_config.h中被定义的,因为我们用到的是UART3,所以 #define RT_CONSOLE_DEVICE_NAME "uart3" 编译调试及观察输出信息 编译请参见《RT-Thread配置开发环境指南》完成编译烧录,参考《Realtouch开发板使用手册》完成硬件连接,连接扩展板上的串口和jlink。 烧录程序以后可以看到如下信息: ``` | / - RT - Thread Operating System / | 1.1.0 build Aug 17 2012 2006 - 2012 Copyright by rt-thread team Finsh>>``` 首先使用list()命令打印出当前注册到Finsh系统的所有shell命令 ``` | / - RT - Thread Operating System / | 1.1.0 build Aug 17 2012 2006 - 2012 Copyright by rt-thread team Finsh>>list() --Function List: list_mem -- list memory usage information version -- show RT-Thread version information list_thread -- list thread list_sem -- list semaphone in system list_event -- list event in system list_mutex -- list mutex in system list_mailbox -- list mail box in system list_msgqueue -- list message queue in system list_mempool -- list memory pool in system list_timer -- list timer in system list_device -- list device in system list -- list all symbol in system --Variable List: dummy -- dummy variable for Finsh 0, 0x00000000 Finsh>>``` 按照上面命令的描述,先 list_thread() 下,查看当前系统中运行的所有线程 ``` | / - RT - Thread Operating System / | 1.1.0 build Aug 17 2012 2006 - 2012 Copyright by rt-thread team thread1 working... Finsh>>list_thread() thread pri status sp stack size max used left tick error -------- ---- ------- ---------- ---------- ---------- ---------- --- tshell 0x14 ready 0x00000110 0x00000800 0x000001e8 0x00000008 -04 tidle 0x1f ready 0x000000e0 0x00000400 0x000000e0 0x00000010 000 thread1 0x0b suspend 0x00000100 0x00000400 0x00000100 0x00000005 000 0, 0x00000000 Finsh>> ```可以看到目前只有shell、idle以及thread1三个线程。标题栏的 thread表示线程名称, pri表示线程优先级,status 表示线程当前调度状态,sp表示当前线程的堆栈指针位置,stack size表示线程的堆栈大小, max used 表示线程历史用过的最大堆栈大小(肯定会小于堆栈大小),left tick表示线程剩余执行节拍数。 再输入 list_device() 查看下当前注册到设备管理器中的设备 ```Finsh>>list_device() device type -------- ---------- uart3 Character Device 0, 0x00000000 ```可以看到当前只有uart3一个设备,它的类型是字符型设备。 ```Finsh>>list_sem() semaphore v suspend thread -------- --- -------------- shrx 000 0 heap 001 0 ```通过list_sem可以看到当前使用信号量的状况,semaphore字段表示信号量的名称,v字段表示信号量的当前值,suspend thread字段表示等在这个信号量上的线程数目。 ```event set suspend thread -------- ---------- -------------- ```通过 list_event() 则可以查看当前系统中使用的 event,event字段表示事件的名称,set字段表示事件的值,suspend thread字段表示等在这个事件上的线程数目。 ```Finsh>>list_timer() timer periodic timeout flag -------- ---------- ---------- ----------- timer1 0x0000000a 0x00008035 activated tshell 0x00000000 0x00000000 deactivated tidle 0x00000000 0x00000000 deactivated current tick:0x00008031 ```通过 list_timer() 命令则可以查看系统当前的定时器使用情况,timer字段表示定时器的名称,periodic字段表示定时器是否是周期性的或者是一次性的,timeout字段表示定时器超时时的节拍数,flag字段表示定时器的状态,activated表示活动的,deactivated表示不活动的,current tick表示当前系统的节拍。 除了内置命令的操作外,还可以进行对内存或者寄存器进行操作 ```Finsh>>int a //定义一个变量 0, 0x00000000 Finsh>>int b //定义一个变量 0, 0x00000000 Finsh>>&a //对变量a取地址 'l', 536873580, 0x20000a6c Finsh>>b=&a //将a的地址赋值给b 'l', 536873580, 0x20000a6c Finsh>>*b=47 //对b中所存的地址处进 //行赋值 '/', 47, 0x0000002f Finsh>>a //打印出a '/', 47, 0x0000002f Finsh>> ```相信看完这一段代码,大家都不会陌生,相当于一段简单的指针操作,而这几乎与C语言用法相同。 结果分析 本例程主要想要就是为大家展示了Finsh组件的一些已有内置功能,已经有一些惊艳了吧,其实还有更猛的料在后头,你可以在Finsh运行自定义函数和查看添加自定义变量,但是这些都请听下回分解啦。距离下篇文档可能会有时间间隔,可以动手先试起来啦! ![实验6_1Finsh的基本使用.pdf](/uploads/88_0f35a320a0a849245534b9d1f62fc765.pdf)
查看更多
1
个回答
默认排序
按发布时间排序
撰写答案
登录
注册新账号
关注者
0
被浏览
5.9k
关于作者
shaolin
这家伙很懒,什么也没写!
提问
115
回答
444
被采纳
0
关注TA
发私信
相关问题
1
[项目]搞个开源的硬件项目
2
硬件计划贴,及时更新,欢迎提意见
3
软件计划贴,及时更新,欢迎提意见::WMA,MOUNT,LWIP等问题急需解决.
4
MMS协议
5
定点的wma解压库-libwma
6
QQ群记录 [20090821]
7
STM32网络收音机PCB报名征集
8
第一版调试记录
9
第二版硬件讨论
10
RADIO项目相关模块规格--欢迎大家自己做板时规格与此兼容,减少重复劳动
推荐文章
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
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部