是的 ,EEPROM 会造成此问题,参考一下EmEEPROM component datasheet.
Creator里的EePROM code example 针对MDK/GCC 和IAR 编译器是有宏定义的:
#if defined (__ICCARM__)
#pragma data_alignment = CY_FLASH_SIZEOF_ROW
const uint8_t Em_EEPROM_em_EepromStorage[Em_EEPROM_PHYSICAL_SIZE] = {0u};
#else
const uint8_t Em_EEPROM_em_EepromStorage[Em_EEPROM_PHYSICAL_SIZE]
__ALIGNED(CY_FLASH_SIZEOF_ROW) = {0u};
#endif /* defined (__ICCARM__) */
1: 你的这个错误是在什么情况下面发生的?
2: 你在project,build-setting里面选择的编译器是什么?
3: 从提示来看这是一个内存分配的错误,你可以把你的工程打包放在这里,我看看我这里是否可以复现问题。
4:有一些资料可以参考,你可以看一下,是否对你有帮助:
1:错误发生是在把编译器由IAR换成MDK时发生的。我这边有两个工程,将编译器由IAR换成MDK时,一个工程报错,一个工程正常;经查看报错工程比正常的工程多用了EEPROM,不知EEPROM是否会造成此问题的出现。
2、project,build-setting里面选择的编译器是MDK
是的 ,EEPROM 会造成此问题,参考一下EmEEPROM component datasheet.
Creator里的EePROM code example 针对MDK/GCC 和IAR 编译器是有宏定义的:
#if defined (__ICCARM__)
#pragma data_alignment = CY_FLASH_SIZEOF_ROW
const uint8_t Em_EEPROM_em_EepromStorage[Em_EEPROM_PHYSICAL_SIZE] = {0u};
#else
const uint8_t Em_EEPROM_em_EepromStorage[Em_EEPROM_PHYSICAL_SIZE]
__ALIGNED(CY_FLASH_SIZEOF_ROW) = {0u};
#endif /* defined (__ICCARM__) */
你说的从IAR换到MDK,按照我的理解IAR是个集成开发环境,MDK是个编译器。
你想表达的是什么呢?
你把有问题的工程的EEPROM的操作先注释掉,看是否还有问题?这样可以排除是由其它地方内存使用错误导致的。如果去掉了就没有问题,有下面两个解决方法供参考:
1:我第一次回复的链接的解决方法。
2:按照EEPROM的datasheet中的方法,把EEPROM放到你知道的合法的位置,然后再看是否有问题。