OpenEdv-开源电子网

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

当数组元素过多时,程序运行时会进入void HardFault_Handler函数

[复制链接]

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-12-14
在线时间
9 小时
发表于 2017-2-15 14:53:59 | 显示全部楼层 |阅读模式
10金钱
在进行CCD输出模拟量读取时,需要将读取值放到一个数组中,差不多要读取2090个值,所以将数组设定为2090个元素,但程序运行时会报错,并进入void HardFault_Hardler(void)函数,
当数组元素设定在900以下时,可以正常运行,数组各元素值需要进行后续处理。
请教大神们该如何解决该问题,要求数组元素不能小于2090个;
我用的是STM32F407VET6。

#define MAX_NUM (2090)#define P_CLK PDin(11)       

void Adc_Init(void);                                
u8  Get_Adc(void);                                
typedef struct _CCD_ADC
{
        u8 CCD[MAX_NUM];
}CCD_ADC;




最佳答案

查看完整内容[请看2#楼]

局部变量不要定义的过大,有中断发生时,那么大的数据没办法进行压栈的,放到全局吧
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2016-3-20
在线时间
17 小时
发表于 2017-2-15 14:54:00 | 显示全部楼层
局部变量不要定义的过大,有中断发生时,那么大的数据没办法进行压栈的,放到全局吧
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
发表于 2017-2-15 14:58:56 | 显示全部楼层
你是不是再函數裡面 定義CCD_ADC局部變量?

stack空間預設才1024喔
回复

使用道具 举报

1

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
618
金钱
618
注册时间
2015-11-20
在线时间
89 小时
发表于 2017-2-16 15:48:30 | 显示全部楼层
栈满了,要不把所有CCD_ADC类型的变量都放到外边,要不就把栈区调大;
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2017-2-16 16:43:58 | 显示全部楼层
这个东西最好定义成全局变量,STM32库函数默认是0x400也就是1K的栈空间,你这都2K多了
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-12-14
在线时间
9 小时
 楼主| 发表于 2017-3-19 22:37:45 | 显示全部楼层
问题已经解决,由于数组开始定义的是局部变量,传递次数过多,导致异常的,后来改为全局变量,问题得到解决,谢谢各位帮助!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 21:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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