hi,大神们好: 我遇到一个有点奇怪的问题, 当对flash中的地址执行读操作的时候,发现奇数地址按照2字节读会崩溃。 具体代码如下: #define PAGE1_BASE_ADDRESS 0x0800F800 uint8_t read_platform_sn(void) { uint16_t agc_tmp_a = 0; agc_tmp_a = *(uint16_t*)(PAGE1_BASE_ADDRESS+0); agc_tmp_a = *(uint16_t*)(PAGE1_BASE_ADDRESS+2); agc_tmp_a = *(uint16_t*)(PAGE1_BASE_ADDRESS+3); agc_tmp_a = *(uint16_t*)(PAGE1_BASE_ADDRESS+4); agc_tmp_a = *(uint16_t*)(PAGE1_BASE_ADDRESS+5); agc_tmp_a = *(uint16_t*)(PAGE1_BASE_ADDRESS+6); agc_tmp_a = *(uint16_t*)(PAGE1_BASE_ADDRESS+7); } int main(void) { uint16_t agc_tmp = 0; FLASH_Unlock(); agc_tmp = *(uint16_t*)(PAGE1_BASE_ADDRESS+0); agc_tmp = *(uint16_t*)(PAGE1_BASE_ADDRESS+1); agc_tmp = *(uint16_t*)(PAGE1_BASE_ADDRESS+2); agc_tmp = *(uint16_t*)(PAGE1_BASE_ADDRESS+3); agc_tmp = *(uint16_t*)(PAGE1_BASE_ADDRESS+4); agc_tmp = *(uint16_t*)(PAGE1_BASE_ADDRESS+5); agc_tmp = *(uint16_t*)(PAGE1_BASE_ADDRESS+6); agc_tmp = *(uint16_t*)(PAGE1_BASE_ADDRESS+7); read_platform_sn(); while(1) { ; } } 1. main函数内 FLASH_Unlock(); 之后,然后对PAGE1_BASE_ADDRESS 开始的8个字节进行按照2字节读取,没有任何问题。 2. 进入read_platform_sn 函数里,依然对PAGE1_BASE_ADDRESS 开始的8个字节进行按照2字节读取,但是会崩溃在奇数地址上。 我发现规律是8条对FLASH的访问,在main函数里都不会死。但是放到read_platform_sn 函数里就会死在奇数地址上。 求大神指点!! |
【STM32F0开发日志/评测/笔记】+互补PWM波的产生
STM32F030 PB14和PB15无法输出PWM求助
【STM32F030探索套件】序列之五 外部中断
【STM32F0开发日志---二】+ucosii.2.92移植在STM32F030
上传个STM32F0+5110+内部温度传感器的菜鸟实例
【STM32F030探索套件使用问题】STM32F030 SPI方式驱动ST7565LCD失败
求一份STM32F051 I2C驱动LCD 12864的例程
STM32F0 M0 向结构体赋值进入HardFault异常
STM32F0 ADC-DMA方式采集2路数据时出现问题
STM32F030C8T6,TIM16定时慢很多问题?
main 函数里的代码被优化掉了,但是read_platform_sn 函数里的没有被优化掉。M0不允许对奇数地址访问所以出了异常,谢谢!
已经解决,谢谢!!
是对齐的问题。