OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7640|回复: 7

程序下载可以运行,但是一复位就进HardFault_Handler

[复制链接]

1

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2013-8-23
在线时间
7 小时
发表于 2015-9-22 18:29:54 | 显示全部楼层 |阅读模式
5金钱
各位  有个困扰1个月的问题:
我的32板子在下载程序后可以正常运行,但是断电后再开程序就会在main函数前进入HardFault_Handler中断,进入后R14(LR)为0xFFFFFFF9。
发生这个错误是因为工程越写越大,增加任意一段新的代码后,都会产生这个问题,将这个任意代码删除后,程序又恢复正常。
各位大牛又遇到过这种情况吗?

不是每次都不运行  只要SWD下载程序后  都是正常运行  但是一复位就死了


If you run, you stand a chance losing ,but if you don’t run , you’ve already lost. 如果你在努力奋斗,你有可能会失败,但是,如果你不奋斗你就已经输了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2013-8-23
在线时间
7 小时
 楼主| 发表于 2015-9-22 18:52:11 | 显示全部楼层
 我真的只需要删除任意一段代码  程序就可以正常复位:
删除任意代码前:



删除任意代码后:



仅仅只是Code 小了一点    就正常启动了,复位后也正常
If you run, you stand a chance losing ,but if you don’t run , you’ve already lost. 如果你在努力奋斗,你有可能会失败,但是,如果你不奋斗你就已经输了。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-9-22 22:06:02 | 显示全部楼层
这种问题,很可能是字节对其问题导致的.
找是不是用了什么sprintf,printf之类的,然后相应的加字节对其,也许就好了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-3-31
在线时间
1 小时
发表于 2015-9-23 14:14:41 | 显示全部楼层
回复【2楼】wms124:
-------------------------------
堆栈溢出,首先有没有用OS,其次检查 有没有使用c库函数,现在的C库必须告别,除了原子哥说的printf之类,memset,memcpy等等,都有可能造成栈空间爆了。
回复

使用道具 举报

1

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2013-8-23
在线时间
7 小时
 楼主| 发表于 2015-9-23 14:37:44 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子哥。
我原来使用了printf函数,经你说过后来全都如下注释了,但是程序还是那样:

/********************  printf support  ***********************/
//#ifdef EN_USART3_PRINTF
//#pragma import(__use_no_semihosting)  
// extern "C" void _sys_exit(int x)  
// {  
// x = x;  
// }
// namespace std
// {

// struct __FILE  
// {  
// int handle;  
// // Whatever you require here. If the only file you are using is  
// // standard output using printf() for debugging, no file handling  
// // is required. 
// };  
// // FILE is typedef?? d in stdio.h.  


// FILE __stdout;
// }

// int std::fputc(int ch, std::FILE *f) 
// { 
// // lace your implementation of fputc here 
// // e.g. write a character to the USART  
// while((USART3->SR&0X40)==0);//???··???,?±??·????ê±?
// USART3->DR = (u8)ch;    
// // Loop until the end of transmission   
// return ch; 
// }
//#endif //EN_USART3_PRINTF

我又仔细检查了硬件电路,确认电路没有问题。又烧写了以前的程序和其他的大工程,都可以正常运行。
所以我把错误锁定在软件上。
我也没有使用过UCOS,没有内存分配,没有文件系统,只有一个STM32F4 emulation_eeprom,用于将一部分空间用作存储器。
If you run, you stand a chance losing ,but if you don’t run , you’ve already lost. 如果你在努力奋斗,你有可能会失败,但是,如果你不奋斗你就已经输了。
回复

使用道具 举报

1

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2013-8-23
在线时间
7 小时
 楼主| 发表于 2015-9-23 14:39:49 | 显示全部楼层
回复【4楼】linbeithree:
---------------------------------
没有操作系统,也没有内存管理之类的,有个printf也已经注释掉了。
你所说的c库函数是STM32库函数吗?我不太理解。

但是我用了《STM32F4 emulation_eeprom》这个开源代码,是将部分FLASH初始化为EEPROM用于保存数据。
If you run, you stand a chance losing ,but if you don’t run , you’ve already lost. 如果你在努力奋斗,你有可能会失败,但是,如果你不奋斗你就已经输了。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-9-24 23:11:02 | 显示全部楼层
回复【6楼】wms124:
---------------------------------
将程序慢慢删减吧.
删到正常为止

然后慢慢添加,看看添加哪个代码后就出问题,然后重点检查
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2015-9-25 08:48:57 | 显示全部楼层
将一部分空间用作存储器?会不会是把代码段给刷了?
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 09:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表