davidhuang-1788 发表于 2020-1-18 10:55:44

FLASH的读写,移植原子的例程,但出错

FLASH的读写,我移植原子的例程(见附件),我用的是STM32F103C8T6,原子用的是STM32F103RC,
请教下大家,谢谢
我的程序,可以从下面的链接
【新提醒】FLASH读写,copy原子的例程,不行-OpenEdv-开源电子网http://www.openedv.com/thread-305310-1-1.html
//要写入到STM32 FLASH的字符串数组
unsigned char Data_Buffer;
#define SIZE sizeof(Data_Buffer)               //数组长度
#define FLASH_SAVE_ADDR0X08020000         //设置FLASH 保存地址(必须为偶数,且其值要大于本代码所占用FLASH的大小+0X08000000

void STMFLASH_Read(u32 ReadAddr,u16 *pBuffer,u16 NumToRead)          
{
        u16 i;
        for(i=0;i<NumToRead;i++)
        {
                pBuffer=STMFLASH_ReadHalfWord(ReadAddr);//读取2个字节.
                ReadAddr+=2;//偏移2个字节.       
        }
}

void InitVariable(void)//全局变量初始化函数
{
    STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)Data_Buffer,SIZE);
   modbus.sendbuf=Data_Buffer; modbus.sendbuf=Data_Buffer;
    modbus.sendbuf=Data_Buffer; modbus.sendbuf=Data_Buffer;
}


运行这句STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)Data_Buffer,SIZE);就会掉进
void HardFault_Handler(void)

衔胆栖冰 发表于 2020-1-19 10:26:04

最佳答案: 数组越界!Data_Buffer; #define SIZE sizeof(Data_Buffer)      for(i=0;i<NumToRead;i++)ReadAddr+=2;   看到了吗,四个字节大小的数组,塞了八个字节数据,越界hardfault。代码千万行,规范第一条。

衔胆栖冰 发表于 2020-1-19 10:27:18

u16 *pBuffer,

衔胆栖冰 发表于 2020-1-19 10:28:27

unsigned char Data_Buffer;
页: [1]
查看完整版本: FLASH的读写,移植原子的例程,但出错