5980|12

119

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

STM32 HardFault和ROM起始地址设置的问题 [复制链接]

STM32 大家好,我遇到的问题挺怪异的,我用的编译器是IAR的,芯片是STM32F107VCT6,当我设置.icf文件的时候不同的设置出现了不同的结果。1:如果我设置ROM的起始地址为0x00000000(以ROM为256K来确定结束地址),则程序运行OK,怎么测都没问题。
2:如果我把ROM起始地址设置成0x08000000,那么运行的时候我用上位机和这个下位机一交互就产生了硬错误。我看了一下寄存器的值DACCVIOL位被置一,是数据访问违例。
   
我的问题是:这可能是一个什么样的错误我应该怎么往下继续追踪它,对于M3来说ROM设置成这两个地址的话意义应该是一样的吧?

另外补充:我用了一个别的程序和这个的程序功能很相似,ROM起始地址设置成0x08000000也不会出现这种错误。Ha
rdFault和ROM起始地址设置的问题
此帖出自stm32/stm8论坛

最新回复

感谢分享!  详情 回复 发表于 2014-4-24 16:00
点赞 关注(1)
 

回复
举报

119

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
请问如何结帖
此帖出自stm32/stm8论坛

点评

目前没有结贴的功能。楼主找到解决问题的办法了,能否跟帖说说,这样其他人遇到问题也知道解决办法啦。:)  详情 回复 发表于 2013-10-21 10:57
 
 

回复

2万

帖子

74

TA的资源

管理员

板凳
 

回复 沙发liyang121316 的帖子

目前没有结贴的功能。楼主找到解决问题的办法了,能否跟帖说说,这样其他人遇到问题也知道解决办法啦。
此帖出自stm32/stm8论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 

回复

119

帖子

0

TA的资源

一粒金砂(中级)

4
 
我查过了,堆栈没有溢出,通过C语言看不出有什么问题,通过反汇编窗口发现在函数嵌套的时候(进出栈这里没有对应的C语言代码)出现了R2寄存器存储了一个超出RAM的地址。也就只能追到这不知道接下来怎么办了。
此帖出自stm32/stm8论坛

点评

不知道你的代码段怎么分配的,截个图上来看看. 数据段可以装载到指定的空间,代码装载错误就会HardFault  详情 回复 发表于 2013-10-23 14:42
 
 
 

回复

4008

帖子

0

TA的资源

版主

5
 

回复 4楼liyang121316 的帖子

不知道你的代码段怎么分配的,截个图上来看看.
数据段可以装载到指定的空间,代码装载错误就会HardFault
此帖出自stm32/stm8论坛

点评

感谢回复,最近没有在弄这个了,不过已经保留了相关资料,现在的工作不允许在多投入时间在上面,我打算用业余时间搞一下,我会尽快贴出调试过程的相关图片和问题。:)  详情 回复 发表于 2013-10-24 11:33
 
 
 

回复

119

帖子

0

TA的资源

一粒金砂(中级)

6
 

回复 5楼huo_hu 的帖子

感谢回复,最近没有在弄这个了,不过已经保留了相关资料,现在的工作不允许在多投入时间在上面,我打算用业余时间搞一下,我会尽快贴出调试过程的相关图片和问题。
此帖出自stm32/stm8论坛
 
 
 

回复

119

帖子

0

TA的资源

一粒金砂(中级)

7
 
上面是一个硬错误问题,关于硬错误到现在我已经遇到了不少,见多了也就没有刚开始的那种迷茫了。上面的错误原因是因为我误删了一些代码,关于硬错误我觉得除了栈溢出,其他的通过查看C语言代码就能找到一些蛛丝马迹。
先贴一些会用到的资料:
先介绍发声异常时的相关动作:

发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。

由于异常发生时,内核将R0~R3、R12、Return address、PSR、LR寄存器依次入栈,其中Return address即为发生异常前PC将要执行的下一条指令地址,因此在堆栈中反数第三个字即为出错位置。
DEBUG如下图
SP值为0x20008560,查看堆栈里面的值依次为R0~R3、R12、Returnaddress、PSR、LR, 例如R0(10 27 00 00),  显然堆栈后第21个字节到24字节即为Returnaddress,该地址0x08001FFD即为异常前PC将要执行的下一条指令地址(即StackFlow()后面的语句处RCC->CR &= (uint32_t)0xFFFBFFFF)



注意:寄存器均是32位,且STM32是小端模式。(参考Cortex-M3权威)
下面有一个我追着硬错误的例子和方法
具体步骤如下:
在启动文件中硬错误中断函数处添加如下代码:
HardFault_Handler
              
              TSTLR, #4                 ;20140105liyang add
              ITEEQ                       ;20140105liyangadd
              MRSEQR0, MSP              ;20140105liyang add
              MRSNER0, PSP         ;20140105liyang add
              BHardFault_Handler  
然后把硬错误中断函数中的语句都屏蔽只留while(1){}语句。
void HardFault_Handler(void)
{
       while(1){}
}
while 处设置断点。
下图可知从CPU的寄存器窗口和Memery都可以看到,入栈时R0-R3R12LR的值,根据LR(当时PC的值)的值就可以找到相应中断前执行的那条语句。关于程序用的那个栈也能从图中看出:R13SP)的值和R13_main(MSP)的值相同,所以用的是MSP栈(这种判断方式待验证,以后用系统的时候试试)

如图蓝框中00009d5d即为入栈的PC的值。

这是在反汇编窗口查到的。
实际在C语句中跟踪的时候出问题的是执行这条语句的时候:

以上说明:从仿真的寄存器查找异常地址这种方法是可以使用的。但是找硬错误很多时候都是通过逻辑分析和单步跟踪,这种方法还不能精确定位错误。只能是帮助缩小问题范围。


此帖出自stm32/stm8论坛
 
 
 

回复

119

帖子

0

TA的资源

一粒金砂(中级)

8
 
我晕!怎么不显示图片呀!
此帖出自stm32/stm8论坛
 
 
 

回复

119

帖子

0

TA的资源

一粒金砂(中级)

9
 
附件见12楼
此帖出自stm32/stm8论坛

点评

WORD图片没法直接粘贴到网页,因为两个不是一样的代码。只能上传图片后 插入到文章。 帮你处理一下吧。  详情 回复 发表于 2014-2-10 11:17
 
 
 

回复

2万

帖子

74

TA的资源

管理员

10
 
liyang121316 发表于 2014-2-9 14:04
想看图片在附近里看吧

WORD图片没法直接粘贴到网页,因为两个不是一样的代码。只能上传图片后 插入到文章。

帮你处理一下吧。
此帖出自stm32/stm8论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复

119

帖子

0

TA的资源

一粒金砂(中级)

11
 
有劳了!
此帖出自stm32/stm8论坛
 
 
 

回复

119

帖子

0

TA的资源

一粒金砂(中级)

12
 
前面的附件有问题删不掉,现在这个是修改之后的。

新建 Microsoft Office Word 97-2003 文档.doc

171.5 KB, 下载次数: 17

硬错误跟踪

此帖出自stm32/stm8论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

13
 
感谢分享!
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表