Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
finsh问题:finsh shell的输出被强制指定到_console_device设备上
发布于 2010-08-10 11:39:17 浏览:6347
订阅该版
[s:191] 我用的0.3.1的rtt内核。 发现 finsh shell的实现中 回显和输出都是调用的rt_kprintf() 这样即使用户修改了shell设备,也只是把输入转入自行定义的设备中,而输出总是跑到 _console_device设备上 如果用户的默认console设备和shell设备不同,就容易造成混淆。 ——我开始就是没看源码 直接修改了shell设备,折腾了好久,老是纳闷咋没输出列 [s:182] 是否可以在后续的shell发布代码中 允许用户指定shell的输入输出设备?这样可以提供更多的灵活性?
查看更多
9
个回答
默认排序
按发布时间排序
bernard
2010-08-10
这家伙很懒,什么也没写!
rt_device_t rt_console_set_device(const char* name);
mail2li
2010-08-10
这家伙很懒,什么也没写!
rt_console_set_device改变的输入的console 输出的永远是默认的rt_kprintf ========================= void finsh_thread_entry(void* parameter) { 。。。。 **rt_kprintf(FINSH_PROMPT);** while (1) { /* wait receive */ if (rt_sem_take(&shell->rx_sem, RT_WAITING_FOREVER) != RT_EOK) continue; /* read one character from device */ while (rt_device_read(shell->device, 0, &ch, 1) == 1) { 。。。 /* normal character */ shell->line[shell->line_position] = ch; ch = 0; if (shell->echo_mode) **rt_kprintf("%c", shell->line[shell->line_position]);** shell->line_position ++; shell->use_history = 0; /* it's a new command */ } /* end of device read */ } } ============================= 简单来说 我有一块液晶 还有一个串口 都被设计为字符设备, 如果我想打到这样的目的: finsh shell使用串口输入输出(显然不方便提供给客户,但是可能又需要保留到release里面) 而运行中的一些任务运行的打印信息显示到液晶上给别人看——起码我想显示那个rtt'的logo嘛 [s:157] 目前就没法很简便的实现
bernard
2010-08-10
这家伙很懒,什么也没写!
试过之后才知道: rt_device_t rt_console_set_device(const char* name); void finsh_set_device(const char* name); 一个对应输出,一个对应输入。
mail2li
2010-08-10
这家伙很懒,什么也没写!
简单说吧: 我不想使用默认的console作为shell的输出
bernard
2010-08-10
这家伙很懒,什么也没写!
rt_console_set_device**用于指定rt_kprintf的输出**。 如果说是想把finsh shell的输出分开,不使用rt_kprintf,目前基本上比较难。
mail2li
2010-08-10
这家伙很懒,什么也没写!
应该也不麻烦吧? 在shell结构体里头增加两个成员:stdin/stdout,取消原来的device成员 然后对shell的输入输出使用这个两个成员的读和写。 是否可以的? 嗯 还可能需要提供一个用户接口 比如 shell_scanf/shell_printf之类 然后 对用户自行编写的代码 也需要规范使用shell_xxx()来获取输入输出 而rt_kprintf只用来打印内核信息或者是关闭掉?
bernard
2010-08-10
这家伙很懒,什么也没写!
不明白你这么做的目的: 如果你是想让shell的命令输出到和console device不同的设备上,那么你自行实现一个shell_printf即可。然后在你exported to finsh的函数中统一调用shell_printf做为输出。 例如show_logo: void show_logo() { shell_printf("RT-Thread RTOSn"); } FINSH_EXPORT_FUNCTION(show_logo, show a RTT logo); 在finsh shell环境下调用: finsh>> show_logo() 那么自然显示到你假设的shell上。如果你想让console和finsh的输出输入设备一致,那么就把console和finsh的设备统一设置到一个设备上,例如UART1、、、UART3、、、Telnet等。 RT-Thread的finsh和rt_kprintf实现非常明确,一个只涉及输入一个只涉及输出。要在RT-Thread中实现一个完整的TTY也不是不可能,只是内存占用、代码占用上将比较多,得不尝失。
mail2li
2010-08-10
这家伙很懒,什么也没写!
所以我懒得去改 [s:193]
撰写答案
登录
注册新账号
关注者
0
被浏览
6.3k
关于作者
mail2li
这家伙很懒,什么也没写!
提问
10
回答
38
被采纳
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
简单两步配置RTT源码阅读环境 vsc+clangd
2
恩智浦[FRDM-MCXN947]初探 之 ADC与DAC
3
LVGL使用字库IC芯片显示中文
4
基于STM32H750和Rt-Thread的CANFD通信实现的记录(一)
5
freemodbus主机在freertos的适配,参考rtthread例程
热门标签
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
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部