Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
请教Finsh相关的问题
发布于 2009-11-19 18:23:56 浏览:7113
订阅该版
Finsh很有意思,能够给rtt带来很多有趣的能力,尤其是FS的参与,可以让系统的灵活性大大增加。 最近在做个事情: 我打算为finsh写个脚本,存放在FS中,系统起来初始化FS LAN FINSH之后,主进程打开文件系统,找到初始化脚本,然后一句一句的丢给finsh,这样可以使初始化过程异常灵活。只要准备好脚本,不用重新编译系统,finsh可以完成你想要的初始化内容。比如自动配置IP地址,写个文件放在FS的根目录,如下: 名称:init: 内容: `set_if("192.168.1.2","192.168.1.1","255.255.255.0")` 是不是很方便?;-) 不过,在实践中还是遇到一些问题,想请教FInsh的作者: 1、语法上 ```c char d[] = "void SysTick_Configuration(void)"; //是错误的 char *d = "void SysTick_Configuration(void)"; //是正确的 ``` 后者是我摸索出来的用法,请教这种用法是否符合设计初衷; 2、我定义三个字符串, ```c char *d = "void SysTick_Configuration(void)"; char *e = "void SysTick_Configuration(void)"; char *f = "void SysTick_Configuration(void)"; ``` 系统就崩溃了。 提示: ``` finsh>>char *d = "void SysTick_Configuration(void)"; finsh>>char *e = "void SysTick_Configuration(void)"; finsh>>char *f = "void SysTick_Configuration(void)"; hard fault on thread: tshell psr: 0x41000000 pc: 0x080005d6 lr: 0x01010101 r12: 0x00000000 r03: 0x64696f76 r02: 0x0000001d r01: 0x200015dc r00: 0x00000004 thread pri status sp stack size max used left tick error -------- ---- ------- ---------- ---------- ---------- ---------- --- tidle 0x1f ready 0x00000050 0x00000100 0x00000050 0x0000000d 000 tshell 0x14 ready 0x00000230 0x00000800 0x00000360 0x00000063 000 ``` 请教,运行时定义的变量是否有数量限制和内存要求? 3、finsh支持编译时定义变量,我尝试使用了缺省的dummy ``` finsh>>dummy = "/www" finsh>>__ls(dummy) //可以工作 Directory /www: finsh>> ``` dummy在代码中定义: ```c FINSH_VAR_EXPORT(dummy, finsh_type_int, dummy variable for finsh) ``` 请教,上面定义为int类型,但是这里依然可以赋值为字串,上面代码声明的类型有何意义? 4、从调用上看,编译时提供的变量和运行时变量都可以作为finsh中调用函数的参数,不知背后是否有什么区别? 5、在论坛上除了“编程指南”,还没有找到finsh深入点的资料,编译器相关的代码中的注释又是过于零散,不知finsh的作者是否有finsh独立些的文档,文法、设计说明之类的,能借鉴一下,使用上心里也有底。 finsh的代码没有深入研究,遇到问题忍不住先发了上来,请多包涵。
查看更多
8
个回答
默认排序
按发布时间排序
bernard
2009-11-20
这家伙很懒,什么也没写!
终于有人发现了这个不起眼的shell [s:175] finsh是有配置参数的,会配置能够使用变量内存的大小,编译后代码空间的大小,配置文件在finsh.h头文件中, ```c /* -- the beginning of option -- */ ... #define FINSH_HEAP_MAX 128 /* max length of heap */ #define FINSH_STRING_MAX 128 /* max length of string */ ... /* -- the end of option -- */ ``` 所以你第2个问题可以通过修改这个配置得到解决,不过你既然放在文件上,也可以考虑字符串一步步赋值到相同变量上,这样内存占用就会小很多(finsh内部有内存自动回收机制,当内存不再使用时会做自动回收以重复使用)。 第一个问题,finsh不支持数组,所以不支持char d[]的声明方式。 第三个问题,finsh中的变量类型检查并不严格,所以才会出现这种情况,`dummy`是一个int类型,当指向字符串时,将赋值它的地址。 第四个问题,背后没什么区别,finsh不像其他语言那样需要做一层翻译,而是直接的内存数据访问。但这样也增加了脚本的危险性。 资料,现在确实不多,使用简单,但内部实现复杂。
softwind
2009-11-20
这家伙很懒,什么也没写!
不好意思,弱弱的问一下,finsh要怎么使用呢?我通过串口发送命令,比如list(),只是回显输入的命令,没有别的信息。 [s:182]
aozima
2009-11-20
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
>不好意思,弱弱的问一下,finsh要怎么使用呢?我通过串口发送命令,比如list(),只是回显输入的命令,没有别的信息。 [s:182] --- 完了回车...
softwind
2009-11-20
这家伙很懒,什么也没写!
谢谢aozima!用超级终端,输入+回车可以了。原来用的串口调试助手,没发“0x0D"。
ws_d1
2009-11-21
这家伙很懒,什么也没写!
问题1,明白; 问题2,资源上的局限,不能只依赖于扩大资源,还是要考虑循环使用; 变量Var表方面,finsh目前可以同时定义8个变量,可以在finsh_var.h中修改;问题: 2-1:finsh_var_delete()没有被调用过,表示8个变量用完就没,没法回收; 2-2:调用finsh_var_init() 初始化变量表的代码只有finsh_reset()和finsh_init(),后者只运行一次,finsh_reset()没有运行机会; 堆Heap处理方面,目前支持128字节的heap,主要用来放置变量内容(比如字串),可以在finsh_heap.h中修改;问题: 2-3:Heap的释放依赖于var表,前者不释放,后者的finsh_heap_gc()就起不到作用了。 2-4:讨论一下,是否可以将finsh_reset()显式的做个命令,集成到finsh的标准指令中来? 问题3,明白; 问题4:明白; 问题5:理解; 作者的代码架构合理,小巧精致,昨天整日徜徉其中,如入宝山,感谢公开这些代码,让人受益匪浅。 新的探讨: uart被包装为dev之后,finsh中打开该设备,但是除了rt_device_read()读取数据之外,写数据却依然用rt_kprintf(),没有用rt_device_write(),是否 finsh依赖输入输出端口的独立性得不到体现,请指教。
bernard
2009-11-23
这家伙很懒,什么也没写!
2.1 是的,finsh_var_delete需要手工调用的,可以考虑export一个函数到脚本中,由脚本自己来控制。 2.3 记得finsh_heap_gc会对string常量做处理,好几年前写的东西了,有些不太记得了。 2.4 确实可以考虑把一些内置的finsh函数export到脚本中,这样就更灵活了。 rt_kprintf最开始的打算是采用rt_device_write的,这样也会灵活得很多(例如只需要把一个socket虚拟成一个device,那么就可以直接把log发送到网络远端),但后来有一种情况:在device子系统还未启动时,就用到了rt_kprintf的服务,所以最终还是把rt_kprintf单独处理了。以后可能可以再做灵活得配置。
ws_d1
2009-11-30
这家伙很懒,什么也没写!
使用device的框架,改起来非常简单,现在我用两个串口,finsh的控制台设备专门独立出来,想用那个就用那个 [s:175]
撰写答案
登录
注册新账号
关注者
1
被浏览
7.1k
关于作者
ws_d1
这家伙很懒,什么也没写!
提问
6
回答
12
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
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
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部