大家好 有个问题想要请教大家 我的程序在delay_init处进入了HardFault_Handler,注释掉该句后又会在uart_init进入。我前面一共定义了9个double类型的一维数组,当我注释掉最后一个后,又不会进HardFault_Handler了,但是在实际应用时确实需要定义这么多数组。
请问有大佬知道为什么吗?有什么解决办法吗?
代码如下:(为在串口通信例程基础上加了定义数组,while循环内程序均为例程,除删除几个printf外未做任何修改)
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "beep.h"
#include "key.h"
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "beep.h"
#include "key.h"
#include "math.h"
#include "string.h"
#include "stdlib.h"
int main(void)
{
u8 t;
u8 len;
u16 times=0;
u16 _x0,_y0;
double x0,y0;
double _x1,_y1;
u16 x1,y1;
unsigned long N; //积分份数
unsigned long i ,j;
long double W;
short P;
long double a , b , c , d; //积分上下限
double X[]={0, //矩阵初始化与赋值
0,
0,
0,
0,
0};
double S[]={1,0,0,0,0,0,
0,1,0,0,0,0,
0,0,1,0,0,0,
0,0,0,1,0,0,
0,0,0,0,1,0,
0,0,0,0,0,1};
double A[]={1,0,1,0,0.5,0, //以下矩阵不需要更新
0,1,0,1,0,0.5,
0,0,1,0,1,0,
0,0,0,1,0,1,
0,0,0,0,1,0,
0,0,0,0,0,1};
double B[]={0.5,
0.5,
1,
1,
1,
1};
double Q[]={0.25,0,0.5,0,0.5,0,
0,0.25,0,0.5,0,0.5,
0.5,0,1,0,1,0,
0,0.5,0,1,0,1,
0.5,0,1,0,1,0,
0,0.5,0,1,0,1};
double H[]={1,0,0,0,0,0,
0,1,0,0,0,0};
double R[]={1,0,
0,1};
double input[]={0,
0};
double I_S[]={1,0,0,0,0,0, //与S矩阵行数相同的单位矩阵
0,1,0,0,0,0,
0,0,1,0,0,0,
0,0,0,1,0,0,
0,0,0,0,1,0,
0,0,0,0,0,1};
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //延时初始化
uart_init(115200); //串口初始化波特率为115200
LED_Init(); //初始化与LED连接的硬件接口
while(1)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
for(t=0;t<len;t++)
{
USART_SendData(USART1, USART_RX_BUF[t]); //向串口1发送数据
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
}
USART_RX_STA=0;
}
else
{
times++;;
if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
delay_ms(10);
}
}
}
|