大家好、我在闪存中为项目上的持久性日志存储器设置了最后3个段。 由于我们的代码不需要 FLASH2区域、因此我可以使用小代码和数据模型设置调试/发布配置。 当我运行代码并重置程序("软重置")时、由我的应用程序初始化的闪存日志存储器会显示其写入正确。 但是、如果我重新启动调试器、并且程序被重新加载、闪存日志存储器看起来就像是全部擦除为0xFF。 我本来希望程序加载时只刷写.text 和.const 存储器段、但可能会对整个闪存执行整体擦除。 或其他事情正在发生。 我确实缩短了闪存的长度、因此它只会进入 0xF97F。 我不使用信息闪存区域、因为日志数据大于信息段。
FLASH2:origin = 0x10000、length = 0x43F8 //边界已更改以修正 CPU47 */
闪存:origin = 0x4400,length = 0xB580
Flash_log1 (RW):origin = 0xF980,length = 0x0200 //记录数据的3 512字节段*/
Flash_log2 (RW):origin = 0xFB80,length = 0x0200
FLASH_LOG3 (RW):origin = 0xFD80、length = 0x0200
#ifndef __large_data_model__
.const:{}> FLASH /*常量数据*/
first_day:{}> flash_log1 type=NOINIT/*用于测试结果的日志数据*/
first_year:{}> flash_log2 type=NOINIT
最后一年:{}> FLASH_LOG3 type=NOINIT
其他
.const:{}>> FLASH | FLASH2 /*常量数据*/
#endif
这里是一个代码示例、我在其中设置了闪存中的"变量"。 无论是否使用 const、我似乎都能获得相同的结果。
#pragma SET_DATA_SECTION (".FIRST_DAY)
静态常量 uint16_t FIRST_DAY LOG_REVISION;
静态常量 test_log_struct first_Day log_flash;
#pragma SET_DATA_SECTION ()
这是映射文件、显示所有内容都已正确分配。
闪存00004400 0000b580 00006192 000053ee RWIX
FLASH_log1 0000f980 00000200 000000f3 0000010d RW
FLASH_log2 0000fb80 00000200 000000f3 0000010d RW
FLASH_LOG3 0000fd80 00000200 000000f3 0000010d RW
.first_day
0 0000f980 000000f3未初始化
0000f980 000000f3 TestLog.obj (.first_day)
.first_year
0 0000fb80 000000f3未初始化
0000fb80 000000f3 TestLog.obj (.first_year)
.LAST_year
0 0000fd80 000000f3未初始化
0000fd80 000000f3 TestLog.obj (.last_year)
Code Composer Studio、版本:10.3.0.00007