Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
LM3S9B92 EWARM 5.4(IAR)编译环境,仿真出现Hard fault,求解决
发布于 2012-08-23 10:31:27 浏览:5109
订阅该版
刚刚使用RT-thread 昨天晚上看了一夜的RT-Thread的文档,还是有个大概的了解。 今天把RT-thread 1.0.2转移到了IAR编译环境(官方的BSP没有9b9x的IAR配置环境),编译通过,但是下载到板子运行时出现hard fault。一时“麻爪”,不知如何解决。我用的是干干净净的RT-thread 1.0.2,一点自己的应用程序还都没加。 FinSH打印信息如下: ``` | / - RT - Thread Operating System / | 1.0.2 build Aug 23 2012 2006 - 2011 Copyright by rt-thread team psr: 0x00000000 pc: 0x00014a2b lr: 0x00014a2b r12: 0x00014a2b r03: 0x00012611 r02: 0x00014a29 r01: 0x00013fa1 r00: 0x20000800 hard fault on thread: (NULL) thread pri status sp stack size max used left tick error -------- ---- ------- ---------- ---------- ---------- ---------- --- tshell 0x14 ready 0x00000040 0x00000800 0x0000072c 0x0000000a 000 ############################################################################################? 0x23``` 我的ICF文件如下: ``` define memory mem with size = 4G; define region FLASH = mem:[from 0x00000000 to 0x0003ffff]; define region SRAM = mem:[from 0x20000000 to 0x20017fff]; define block HEAP with alignment = 8, size = 0x00000000 { }; initialize by copy { readwrite }; do not initialize { section .noinit }; keep { section FSymTab }; keep { section VSymTab }; // Place the interrupt vectors at the start of flash. place at start of FLASH { readonly section .intvec }; // Place the remainder of the read-only items into flash. place in FLASH { readonly }; // Place the RAM vector table at the start of SRAM. place at start of SRAM { section VTABLE }; // Place all read/write items into SRAM. place in SRAM { readwrite, block HEAP }``` 最后我的启动代码文件:[attach]0[/attach] 请DX门帮忙分析一下! 下载附件 [startup_ewarm.zip](https://oss-club.rt-thread.org/uploads/2828_9755ac7cc8a30c08cf8c7c12398ade5d.zip) 下载附件 [iCANET-200T.zip](https://oss-club.rt-thread.org/uploads/2828_1b9aa454128b51605f3179df0a53eb2c.zip)
查看更多
7
个回答
默认排序
按发布时间排序
kingreat
2012-08-23
这家伙很懒,什么也没写!
根据出现异常时FinSH打印的PC的指针,我发现是因为产生了 usage fault , 但为什么会产生这个 usage fault ,没有解决。
aozima
2012-08-23
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
仿真跟综一下, 并重点检查heap_init得到的两个参数并与map文件里面做对比。
kingreat
2012-08-23
这家伙很懒,什么也没写!
1.在rtconfig.h文件中去掉了对LwIP与FinSH的支持,增加了每隔1S向串口打印字符串的任务,运行良好。 2.在rtconfig.h文件中只去掉LwIP,保留FinSH,问题依旧。 3.在rtconfig.h文件中只去掉FinSH,保留LwIP,问题依旧。
kingreat
2012-08-23
这家伙很懒,什么也没写!
>仿真跟综一下, >并重点检查heap_init得到的两个参数并与map文件里面做对比。 --- 代码已经根据你的建议加上code标签了。 你说的heap_init里得到两个参数指的是rt_system_heap_init的入口参数么? 如果是,那么经跟踪:heap_ptr 地址是 0x20000400, heap_end 地址是 0x20017FF4 MAP文件中相关部分如下: ``` "A1": place at start of [0x00000000-0x0003ffff] { ro section .intvec }; "P1": place in [from 0x00000000 to 0x0003ffff] { ro }; "P2": place in [from 0x20000000 to 0x20017fff] { rw, block HEAP }; . . . "P2", part 1 of 3: 0x400 .noinit uninit 0x20000000 0x400 startup_ewarm.o [1] HEAP 0x20000400 0x0
- 0x20000400 0x400 ``` 不好意思,我不知道MAP文件中那些部分与rt_system_heap_init相关,所以我把MAP文件传上来:
aozima
2012-08-23
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
SRAM from 0x20000000 to 0x20017fff >经跟踪:heap_ptr 地址是 0x20000400, heap_end 地址是 0x20017FF4 --- 问题在于你的HEAP(IAR内置的)并没有放在最后,所以heap_init时取HEAP的最后做为RT-Thread的HEAP时, 与其它变量发生了冲突。所以ICF文件里面应该像其它分支一样加上: ``` place in RAM_region { readwrite, block CSTACK, last block HEAP}; ``` 这样, heap_ptr就是从空闲内存的起始地址开始了。
kingreat
2012-08-23
这家伙很懒,什么也没写!
问题在于你的HEAP(IAR内置的)并没有放在最后,所以heap_init时取HEAP的最后做为RT-Thread的HEAP时, 与其它变量发生了冲突。所以ICF文件里面应该像其它分支一样加上: ``` place in RAM_region { readwrite, block CSTACK, last block HEAP}; ``` 这样, heap_ptr就是从空闲内存的起始地址开始了。[/quote] 一针见血,问题得到解决! 按你所说改了icf文件,文件内容如下: ``` define region SRAM = mem:[from 0x20000000 to 0x20017fff]; define block HEAP with alignment = 8, size = 0x00000000 { }; initialize by copy { readwrite }; do not initialize { section .noinit }; keep { section FSymTab }; keep { section VSymTab }; // Place the interrupt vectors at the start of flash. place at start of FLASH { readonly section .intvec }; // Place the remainder of the read-only items into flash. place in FLASH { readonly }; // Place the RAM vector table at the start of SRAM. place at start of SRAM { section VTABLE }; // Place all read/write items into SRAM. place in SRAM { readwrite, last block HEAP }; ``` 我的改成这样的,没有CSTACK: ``` place in SRAM { readwrite, last block HEAP }; ``` 所以有个关于栈有个问题: 我的启动代码是从TI官方的代码里拿过来的,其中关于栈的内容如下: ``` static unsigned long pulStack[0x100] @ ".noinit"; typedef union { void (*pfnHandler)(void); unsigned long ulPtr; } uVectorEntry; __root const uVectorEntry __vector_table[] @ ".intvec" = { { .ulPtr = (unsigned long)pulStack + sizeof(pulStack) }, // The initial stack pointer __iar_program_start, // The reset handler NmiSR, // The NMI handler HardFault_Handler, // The hard fault handler MPUFaultHandler, // The MPU fault handler BusFaultHandler, // The bus fault handler UsageFaultHandler, // The usage fault handler . . . } ``` 请问,这样的启动代码是否需要在icf文件指定 CSTACK的位置。 还有一点我不明的时,CSTACK与HEAP这两个名字从哪里得来?
撰写答案
登录
注册新账号
关注者
0
被浏览
5.1k
关于作者
kingreat
这家伙很懒,什么也没写!
提问
5
回答
17
被采纳
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
rt-thread 小内存算法源码分析
2
env中添加lvgl软件包后,keil编译包--c99错误
3
【NXP-MCXA153】 定时器驱动移植
4
GD32F450 看门狗驱动适配
5
【NXP-MCXA153】看门狗驱动移植
热门标签
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
rt_mq_消息队列_msg_queue
SFUD
keil_MDK
msh
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
7
个答案
2
次被采纳
a1012112796
18
个答案
1
次被采纳
红枫
7
个答案
1
次被采纳
Ryan_CW
5
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
本月文章贡献
YZRD
3
篇文章
6
次点赞
catcatbing
3
篇文章
6
次点赞
lizimu
2
篇文章
11
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部