Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Filesystem
插入SD卡以后,rt-thread启动时报异常
发布于 2017-09-04 21:46:09 浏览:2293
订阅该版
``` | / - RT - Thread Operating System / | 2.1.0 build Sep 4 2017 2006 - 2016 Copyright by rt-thread team ***OK:Reader's local time is: Mon Sep 4 20:27:34 2017 dm9000 id: 0x90000a46 finsh>>hardware fault psr: 0x01000000 r00: 0x68002984 r01: 0x2000d1a0 r02: 0x00000000 r03: 0x00000001 r04: 0x68002984 r05: 0x2000d174 r06: 0x00000000 r07: 0x00000001 r08: 0x00000001 r09: 0xdeadbeef r10: 0xdeadbeef r11: 0xdeadbeef r12: 0x0801ce19 lr: 0x0800a9f5 pc: 0x0800a9a6 bus fault: SCB_CFSR_BFSR:0x04 IMPRECISERR hard fault on thread: tshell``` 只要插入SD卡,启动就出这个异常,不插SD卡就没事,翻了翻论坛,也有人遇到过类似的问题,但是也没说具体怎么解决。仿真的结果看,目前是初始化SD卡以后,后面有调用rt_thread_delay的地方就会出异常,实在想不出是怎么回事啊,求教!
查看更多
4
个回答
默认排序
按发布时间排序
bernard
2017-09-04
这家伙很懒,什么也没写!
出错任务还是tshell,你什么平台来着。以后问问题,一些信息是必须的。 如果是tshell,是否系统加载了启动脚本,在shell执行启动脚本时出错了
zhanglei23941@f
2017-09-05
这家伙很懒,什么也没写!
STM32F103硬件平台,启动脚本?这个不太懂,现在是程序已经可以运行到自己加到application.c的一些初始化程序里了,在调用rt_thread_delay时出异常,pc 值0x0800a9a6和lr 0x0800a9f5, 是在rt_ipc_list_suspend中调用rt_list_insert_before时出错了。 还有就是用STLINK仿真时,没有问题。
zhanglei23941@f
2017-09-07
这家伙很懒,什么也没写!
用ST-LINK仿真时,发现上电第一次仿真也会出问题,所以能跟到出问题的时候,看了一下调用栈,是在tshell线程中,一开始调用rt_sem_take时进入的, if (rt_sem_take(&shell->rx_sem, RT_WAITING_FOREVER) != RT_EOK) continue; 然后就一步步的调试,发现出问题时在下面的代码中,看其汇编,有一个对寄存器R2存储的地址里面STR的操作,而R2的值为0,出问题时串口 打印的hard fault 信息里面R2的值也确实为0 ``` rt_inline void rt_list_insert_before(rt_list_t *l, rt_list_t *n) { l->prev->next = n; n->prev = l->prev; l->prev = n; n->next = l; } ``` 于是看正常情况下,程序跑到上面代码的汇编时,R2的值是从一个地址(暂且称之为addr)里面LOAD的,正常情况下不为0, 这个addr就是tshell线程里面,存放结构体struct finsh_shell的地方,这片内存在finsh shell初始化时动态申请,并且进行了初始化,正常初始化完成以后,上面说的addr里面是非0值,是一个正常的地址。 问题到这里就百思不得其解啊,这个问题跟SD卡插不插有毛关系啊?从代码看,插入SD卡的话会多一些SD卡设备初始化的程序,网上有人说使用SD卡、使用文件系统以后,最好增大堆栈空间,于是就增大了tshell线程的栈空间,仍然不好用。 试着把SD卡初始化的程序注释掉,没有问题了,那会不会是SD卡初始化和tshell初始化的之间有什么相互影响之类的猫腻呢? tshell初始化: INIT_COMPONENT_EXPORT(finsh_system_init); SD卡初始化: INIT_DEVICE_EXPORT(rt_hw_sdcard_init); 都是借助系统components初始化框架完成的,具体不详述, 但是不知道怎么去调整他们之间的初始化顺序,于是不采用上面的方式初始化,自己在application初始化程序里去掉SD卡的初始化程序,并且放在finsh初始化后面去调,问题竟然解决了。至于根本原因,目前还不得而知。
撰写答案
登录
注册新账号
关注者
0
被浏览
2.3k
关于作者
zhanglei23941@f
这家伙很懒,什么也没写!
提问
5
回答
12
被采纳
0
关注TA
发私信
相关问题
1
字库除了SD卡和http还有别的方式导入吗
2
如何同时使用RTT文件系统于NAND Flash 和 SD卡,针对Realboard4088?
3
EasyFlash好棒
4
SD卡挂在的SPI总线又要加个DA设备
5
sd卡与flash 同时挂载 挂载路径shell怎么区分 访问
6
请教ramfs使用方法
7
rtt stable2.0.x版本 sd卡及文件系统
8
nandflash文件系统UFFS请教
9
关于SD卡挂载文件系统的问题(已解决)
10
Yaffs采用GPL2许可
推荐文章
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
RT-Thread Studio V2.2.9 Release Note
2
CherryUSB的bootuf2配置
3
在用clangd开发RTT吗,快来试试如何简单获得清晰干净的工作区
4
GD32F450 片内 flash驱动适配
5
STM32H7R7运行CherryUSB
热门标签
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
freemodbus
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
7
个答案
2
次被采纳
a1012112796
12
个答案
1
次被采纳
Ryan_CW
5
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
6
次点赞
lizimu
2
篇文章
7
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部