OpenEdv-开源电子网

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

程序跑到HardFault_Handler这上面来了,求助

[复制链接]

7

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2014-9-23
在线时间
0 小时
发表于 2014-10-31 18:14:25 | 显示全部楼层 |阅读模式
5金钱
先搜了下论坛并没有发现类似的情况。进入正题。用的板子是stm32
单步调试执行到下面的for(i=0; i<5000; i++);//延迟2ms这句的时候就会跳进HardFault_Handler这里面然后死掉,不知道为什么。
[mw_shl_code=c,true] DISABLE_RF_INT(); //关闭外部中断 for(i=0; i<5000; i++);//延迟2ms // delay_us(1); DISABLE_RF_CHIP(); // 关闭射频芯片 for(i=0; i<50000; i++); ENABLE_RF_CHIP(); // 使能射频芯片 [/mw_shl_code]
但是很奇怪的一点就是我把for循环里的5000改成999就可以执行下去,多一点变成1000都没用。
还有一点我想问一下,有没有可能和时钟的初始化有问题,时钟初始化顺序不对还是怎么的也有可能引起这种错误码?

个性签名
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2014-9-23
在线时间
0 小时
 楼主| 发表于 2014-10-31 19:15:05 | 显示全部楼层
再测试了一下,其实和for循环没多大关系,把for循环去掉,执行到一定的时间又会出错。也就是说进入硬件错误中断在于时间,时间一到,自动死,不管执行到哪一行。
当然上面那种方式是打断点试出来的。
还有一种单步调试就更诡异了,直接连函数都进不去,就是单步调试到调用rf_init的时候就死了,rf_init函数体里面包括for循环,执行全速运行打断点就能够进去。
[mw_shl_code=c,true]rf_status_t rf_init(void) { //u8 val; u16 i; DISABLE_RF_INT(); //关闭外部中断 // for(i=0; i<999; i++);//延迟2ms for(i=0; i<5000; i++); // delay_us(1);[/mw_shl_code] [mw_shl_code=c,true] DISABLE_RF_CHIP(); // 关闭射频芯片 for(i=0; i<50000; i++); ENABLE_RF_CHIP(); // 使能射频芯片[/mw_shl_code] [mw_shl_code=c,true] return 0;// RF_STATUS_SUCCESS; }[/mw_shl_code]


个性签名
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-10-31 23:33:17 | 显示全部楼层
光看这个,看不出问题。
一般hardfault都是2个情况:
1,堆栈少了。
2,指针乱了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2014-9-23
在线时间
0 小时
 楼主| 发表于 2014-11-4 17:03:20 | 显示全部楼层
貌似是堆栈的问题,我把这个工程整合到ucos上有新的提示了,Tue Nov 04, 2014 17:00:12: The stack pointer for stack 'CSTACK' (currently 0x20005248) is outside the stack range (0x20005A88 to 0x20005E88) 
提示堆栈指针跑到外头去了,有点不能理解。前几天那个是裸跑,没有用到任务,直接进hardfault,今天移到ucos系统上面去,就提示上面那个错误了。
看这种情况情况怎么办?
个性签名
回复

使用道具 举报

7

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2014-9-23
在线时间
0 小时
 楼主| 发表于 2014-11-4 17:29:25 | 显示全部楼层
让人帮忙看了下,里面的数组太大,越界了,前面加const现在试下。
个性签名
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-4 17:30:19 | 显示全部楼层
回复【4楼】程轩104:
---------------------------------
你的编译器还会提示这种错误?
什么编译器啊?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2014-9-23
在线时间
0 小时
 楼主| 发表于 2014-11-4 19:09:31 | 显示全部楼层
IAR......................
个性签名
回复

使用道具 举报

7

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2014-9-23
在线时间
0 小时
 楼主| 发表于 2014-11-4 19:12:25 | 显示全部楼层
貌似有点头绪了,用printf打印了信息查错,居然在还没初始化完成的时候就直接进入了中断,也不知道哪里开启了中断,估计是中断抢占了资源?有这种说法吗?导致了进入handlefault
个性签名
回复

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2015-8-27
在线时间
22 小时
发表于 2015-10-16 14:55:23 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
我在用F103VCT6驱动ov2640的时候,发现程序每到以下处就自动转到HardFault_handler()
while(ov2640_HREF)
{
    while(ov2640_PCLK==0);
    ov2640_framebuf(pixcnt++)=ov2640_DATA;
    while(ov2640_PCLK==1);
    while(ov2640_PCLK==0);
    ov2640_framebuf(pixcnt++)=ov2640_DATA;
    while(ov2640_PCLK==1);
}
根据JLink跟踪发现,每次进入HardFault函数时pixcnt的值是不一样的,我给ov2640分配的内存是和战舰开发板中F103驱动ov2640的参考例程一样的
我想问一下,这是怎么回事啊?看了您之前的回复,我想知道怎么能知道是堆栈少了还是指针乱了?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-10-16 22:16:42 | 显示全部楼层
回复【9楼】wangyueming:
---------------------------------
 ov2640_framebuf小了吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2015-8-27
在线时间
22 小时
发表于 2015-10-17 11:19:02 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
我给这个分配了40k的内存啊,也还是不行啊,后来我测了一下,应该是malloc.c文件中分配内存没成功,因为ov2640_framebuf = mymalloc(SRAMIN,40*1024)以后,ov2640_framebuf仍然为0。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-10-18 21:32:58 | 显示全部楼层
回复【11楼】wangyueming:
---------------------------------
 继续增大内存管理的 buf.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-18 20:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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