rtthread开启finsh shell后,使用securityCRT无法打印输出。
问题前序:额,rtt最近似乎很火热,我也想凑凑热闹...
一直是搞单片机开发,包括51和stm32,没玩过Linux,也没接触过shell等感觉高大上的东西,甚至都securityCRT都没用过(我之前一直使用串口调试助手...)。
我想试着使用rtt自带的shell组件(这玩意其它如ucos,freertos等都没有,所以很吸引人)。弄了半天,出不来数据,特来求助!!!
问题描述:
如下是官网教程中的一张图:我就想实现这种效果。
我已经开启finsh组件,部分宏代码如下。
实验现象:
我使用普通串口调试助手,至少可以打印rtt logo。如下图。
可是只要打开securityCRT,整个线程似乎都被阻塞了(我开了2个线程,2个led交替闪烁,一旦打开securityCRT,led都不闪烁了)。
最后,恳请路过的大神帮忙指点迷津,再次感谢了......
这个跟 secureCRT 应该没关系。
看看 USB 转串口模块吧。
不然你就关闭 shell 模块,再怎么说,也要有信息打出来的。 security 发表于 2017-11-27 14:35
这个跟 secureCRT 应该没关系。
看看 USB 转串口模块吧。
首先,感谢security大神指教!
主要集中在2个问题:
<1>我上面是有XCOM调试助手,至少有数据输出,为什么使用securityCRT就没输出(它们硬件底层是一样的啊)?
<2>为什么使用securityCRT会阻塞线程呢(关键我没找到具体在哪里阻塞的,很头疼!)? 貌似和RTT没有什么关系吧,检测一下软件和波特率设置 擦鞋匠 发表于 2017-11-27 14:44
首先,感谢security大神指教!
主要集中在2个问题:
那就单步跟一下,检查一下串口是否有收到干扰数据。
如果一直干扰数据的话,且你的线程的优先级如果比 shell 低的话,就会受影响。 RT_USING_COMPONENTS_INIT 用了没有,如果用了,务必要使用 RTT 提供的链接文件。
强烈建议先用 RT-Thread 自己提供的工程进行测试 sunnydragon 发表于 2017-11-27 15:10
RT_USING_COMPONENTS_INIT 用了没有,如果用了,务必要使用 RTT 提供的链接文件。
强烈建议先用 RT-Thread ...
首先,感谢sunnydragon大神。
基本上rtthread.h文件都是使用默认配置,我查看了下,RT_USING_COMPONENTS_INIT 宏是打开的。
“如果用了,务必要使用 RTT 提供的链接文件。”,请问大神,RTT提供的链接我文件是什么?我真不是很懂...感谢...
擦鞋匠 发表于 2017-11-27 15:30
首先,感谢sunnydragon大神。
基本上rtthread.h文件都是使用默认配置,我查看了下,RT_USING_COMPONENTS ...
要在链接脚本文件里面,保留 init 模块,还有 shell 等模块。
不然很有可能被移除掉了。
你先看看 XCOM,有没有打出 init 之类的回显吧,没有打出的话,那就说明 init 模块有问题。 擦鞋匠 发表于 2017-11-27 15:30
首先,感谢sunnydragon大神。
基本上rtthread.h文件都是使用默认配置,我查看了下,RT_USING_COMPONENTS ...
IAR 的链接文件格式是 *.icf
KEIL 是 *.sct
GCC 是 *.ld
取决于你使用的编译器,开启组件初始化后,必须要在链接文件中定义好组件初始化函数存放的段。而这些在 KEIL/IAR 默认提供的链接文件中是没有的。所以我让你先把官方提供的工程用好。 本帖最后由 擦鞋匠 于 2017-11-27 16:31 编辑
感谢security大神和sunnydragon大神:
使用的是官方给的例程。
先关闭securityCRT,单步进去,再打开securityCRT,然后单步或者全速,此时securityCRT可以输出rtt logo。否则就不能输出。这里的具体原因我不清楚(只能看表面现象)。
关键是我对finish shell这块知识没有深刻的理解,所以,感觉无从下手,很头疼。
不过,前面看任务调度,信号量,邮箱,消息队列,内存分配等源码,感觉不管是代码风格,还是其中数据结构和代码逻辑,似乎更加符合我的思维逻辑习惯(相对之前看过的ucos,freertos)。 擦鞋匠 发表于 2017-11-27 16:24
感谢security大神和sunnydragon大神:
使用的是官方给的例程。
这种问题一般跟 SecureCRT 是没有关系的话,不然你可以换个新版本的 SecureCRT 试一下。
至少 SecureCRT + RT-Thread 的组合,我一直在用着,没碰过此种现象。
如果怀疑是工具的问题,那么就使用你可信赖的工具,先把系统调通过去,再来看 SecureCRT 的问题。 我用过putty试过,效果不错 你的输出里面只有版权信息,没有shell的PROMPT提示, 那估计是shell线程都没跑起来。
所以上面大家怀疑是初始化的问题。
如果使用的是自动初始化,可以在rtconfig.h里面加上
#define RT_DEBUG
#define RT_DEBUG_INIT 1
看看输出变化。有没有finsh_system_init输出。
或者你可以把初始化代码(application/main)这些贴出来。
或者学会看map文件, 看看finsh_system_init是否被优化了(如果优化了说明没有被调用。) 自己搭建的工程吗? finsh和console是2码事
console是你可以调用rtprintf输出,但是它不是finsh,你需要打开RT_USING_FINSH tuy0326 发表于 2017-12-1 00:47
自己搭建的工程吗?
感谢大神回复。
是的,我是自己搭建的工程。前面有大神告知,需要考虑分散加载这块只是,我对这块不是很了解。
后来就使用官方的例程,但实验效果是一样的。
页:
[1]