Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
FinSH
RT-Thread Nano
10
finsh组件使用遇到的疑难杂症(已解决,实际是底层移植出错)
发布于 2021-03-29 01:32:46 浏览:1358
订阅该版
[tocm] ### (次日更新)谢谢评论区的各位老哥,已经破案了 按评论区里各位老哥的建议,我今天近下来思考了一下,然后单步调试一步步找错误,最终发现是我的finsh底层接收字符部分移植出错。具体错误会在下面描述,希望大家不要范和我一样的错误。 官方的接收字符是自己建立了一个FIFO的队列,然后结合信号量使用,代码比较多。我的这套移植代码是从上一个硬件平台一直用过来的,当时为了偷懒就想说反正邮箱也是FIFO的,直接用邮箱传就行,最多浪费点内存,4个btye当1个用。但是在邮箱的初始化时,我的邮箱容量赋值错了,代码如下。 ```c static char shell_rx_mb_pool[4*15]; //邮箱缓存使用char声明的 err = rt_mb_init( &shell_rx_mb, "rxMail", shell_rx_mb_pool, sizeof(shell_rx_mb_pool), //所以这个地方应该除4 RT_IPC_FLAG_FIFO); ``` 由于代码中,初始化时输入的邮箱的容量比实际的邮箱缓存shell_rx_mb_pool数组要大,所以就导致了溢出,RAM中的其他变量受到影响。 **最后,再次感谢评论区的各位老哥!!** ### 以下是原问题描述 今天在调试LCD液晶屏幕时遇到一个非常神奇的bug,硬件平台为stm32f411ceu6核心板,软件移植的Nano+finsh。我发现输入命令达到一定次数的时候,finsh会影响到我程序中的全局变量。问题具体描述如下: 为了调试LCD驱动移植是否正常,我自定义了一条命令来执行LCD的刷屏,并反馈花费的刷屏时间。自定义命令以及调用的刷屏函数代码如下: ```c uint8_t msh_clear = 0; static void msh_LCD_Clear(void) { rt_tick_t ftime, ltime; uint16_t msh_clear_color[3] = {GREEN, YELLOW, BLUE}; ++msh_clear; if(msh_clear > 2) msh_clear = 0; ftime = rt_tick_get(); LCD_Clear(msh_clear_color[msh_clear]); ltime = rt_tick_get(); rt_kprintf("%d\r\n", ltime - ftime); } MSH_CMD_EXPORT_ALIAS(msh_LCD_Clear, lcd_clear, NULL); //被调用的清屏函数 void LCD_Clear(uint16_t Color) { unsigned int i,m; LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1); LCD_CS_CLR; LCD_RS_SET; for(i=0;i
5) num = 0; rt_thread_mdelay(500); LCD_Clear(msh_clear_color[num++]); if(num > 5) num = 0; rt_thread_mdelay(300); } } ``` 代码烧录后运行一切正常,可以一直刷屏下去,并没有次数限制。于是基本可以确定是finsh影响到了全局变量lcddev,但是我并不明白其中原因。按我的理解finsh命令的执行都在tshell线程中,命令函数的出入栈应该使用的都是tshell的线程栈,只要线程栈不溢出,没有理由会影响到RAM中其他的变量。 **求各位大神解惑!!!**
查看更多
张世争
2021-03-29
学以致用
- 出现问题可以大胆的怀疑,假定,但不能断定,否则影响自己的思路。 - 既然可以软件调试,可以查看调用函数,数据是由那个函数调用,如何被修改的 - 这款芯片RAM够大,建议把每个线程栈加大一点。 - 不排除其他线程的异常操作,指针操作,修改了数据 - MSH命令工作时可能申请内存,但不至于影响全局变量。
3
个回答
默认排序
按发布时间排序
flashman2002
2021-03-29
这家伙很懒,什么也没写!
建议单步调试,追踪全局变量的变化。
mii
2021-03-29
这家伙很懒,什么也没写!
你查看一下是不是代码优化等级的问题
撰写答案
登录
注册新账号
关注者
0
被浏览
1.4k
关于作者
MR_ZERO
这家伙很懒,什么也没写!
提问
3
回答
0
被采纳
0
关注TA
发私信
相关问题
1
求高手指点,RTThread下nanosleep()函数功能如何实现?在线等啊
2
RTT1.2.2在新塘Nano130KE3BN的移植中始终出现栈溢出的问题
3
官方能否出一个nano在mdk下移植finsh到stm32的教程
4
从裸机开始,创建一个RT-Thread Nano系统工程
5
Nano版如何启用shell
6
项目从RTT 2.x NANO移植到 RTT 3.x ENV 环境
7
nano 版本有没有集成到 IAR 中啊?
8
关于MDK5的RT-THREAD NANO中添加MSH组件的例程
9
rtt_nano版本,源代码在哪里下载啊?
10
RTT Nano 在keil 使用C++11 的问题
推荐文章
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
UART
WIZnet_W5500
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
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部