工具/软件:TI-RTOS
您好!
我的应用程序需要将启动参数存储在 EEPROM 中、它将在程序执行过程中使用、这些值将经常从应用程序软件中更新。
这些值最初在闪存扇区中可用(通过 J-Tag 编程)、并在首次引导时写入 EEPROM、之后固件将使用 EEPROM 存储器中的值。
我之前使用过闪存扇区本身的这些变量。 与闪存相比、EEPROM 的耐久度更高、因此我已将闪存扇区移至 EEPROM 扇区。
当替换为 EEPROM API 而不是闪存 API 时、我会得到可实现无限循环的硬件异常、而且我还会观察到一些其他任务堆栈使用量正在变满、即使该任务未运行。
之前使用以下代码。
void flashWrite (boot_struct * stFlashData) { 内转台; RET = FlashErase (((uint32_t) flash_common_memory_address); if (ret!=空) { system_printf ("闪存未成功擦除\n"\n); } RET = FlashProgram (((uint32_t *) stFlashData、 FLASH_common_memory_address、2048); if (ret!=空) { system_printf ("闪存未成功编程\n"\n); } system_flush(); }
boot_struct flashRead (boot_struct * stFlashData) { stFlashData =(boot_struct *) flash_common_memory_address); return * stFlashData; }
我将替换为以下 API。
#define EPROM_START_ADDRESS 0x0 #define BOOT_PARAMETER_SIZE 1024 空 EpromWrite (boot_struct * stEpromData) { RET = EEPROMMassEras(); if (ret!= 0) { System_printf ("EEPROM 擦除失败:错误号-%d\n"、ret); } RET = EEPROMProgram ((uint32_t *) stEpromData、EPROM_START_ADDRESS、 boot_parameter_size); if (ret!= 0) { system_printf ("EPROM 数据写入失败:错误号-%d\n"、ret); } } //使用折页 API 读取数据。 EEPROMRead (((uint32_t *) stEpromData、EPRO_START_ADDRESS、 boot_parameter_size);
我已经使用断点进行了检查、 EEPROM 读取始终成功。 我将能够看到读取数据结构中的值。 在读取完成并尝试执行某些其他例程后、会发生硬件异常。 但当替换为闪存 API 时、其工作正常。
您能帮我找到解决方案吗? EEPROM 写入/读取之前是否存在任何其他依赖项。
我使用以下版本的工具集。
CCS8.1
tirtos_tivac_2_16_01_14
TivaWare_C_Series-2.1.4.178
此致
巴拉