1、我使用了__set_PRIMASK(1) 来屏蔽除NMI和fault以外的所有中断,但是现在用仿真器调试发现,还是有进中断的情况,(串口发送完成中断)
2、在一个函数内部我定义了一个内部数组 uint8_t buf[512]; 用来读取SD卡的一个扇区,读出扇区内容后把数据发送到串口发送缓冲区,以后就没再使用这个数组。
现在的问题是如果我把这个函数定义成内部变量 如uint8_t buf[512];运行程序就会进到void HardFault_Handler(void)异常里去,如果定义成 static uint8_t buf[512]; 程序能够正常执行。这种问题怎么解释啊?
代码如下:
void SD_ReadDisk(uint32_t sector)
{
uint8_t retry;
uint16_t i;
uint8_t buf[512]={0};
if(SD_SendCmd(CMD17,sector,0X01)==0x00)
{
retry=0XFF;
while(retry--)
{
if(0xfe == SD_SendData(0xff))
break;
} //等待数据令牌
if(retry != 0)
{
for(i=0;i<512;i++)
buf=SD_SendData(0Xff);
SD_SendData(0xff);
SD_SendData(0xff);//伪CRC校验
/*----------先发高地址的数据---一字节内小端模式-------------*/
for(i=0;i<512;i++)
ADD_QUEUE_DATA(CH340_SendQueue,buf);
}
}
}
buf[];如果定义成static或者全局变量就没有问题,但是如果是局部变量的话程序运行就会进入void HardFault_Handler(void)函数,求指教啊
3、怎么设置编译器不优化代码呢?
|