部件号:LAUNCHXL-F2.8377万S
我需要存储超过2000 pts的ADC结果UINT16类型的大尺寸数组,因此需要将其置于闪存中(在应用中也需要在关闭电源后保留此数据)。
我正在使用 data_sectionpragma 定义这些数组,如下所示:
//定义
//
#define results_buffer_size 2000 //buffer用于存储转换结果
//(大小必须是16的倍数)
//
//全局
//
UINT16 AdcaResults1[results_buffer_size];
UINT16 AdcaResults2[results_buffer_size];
UINT16地址3 [results_buffer_size];
UINT16地址4[results_buffer_size];
UINT16地址5[results_buffer_size];
UINT16地址6[results_buffer_size];
UINT16地址7[results_buffer_size];
UINT16地址8[results_buffer_size];
UINT16地址9[results_buffer_size];
UINT16地址10[results_buffer_size];
UINT16地址11[results_buffer_size];
UINT16地址12[results_buffer_size];
UINT16地址13[results_buffer_size];
UINT16地址14[results_buffer_size];
UINT16地址15[results_buffer_size];
UINT16地址16[results_buffer_size];
UINT16 AdcaResultsFinal[Results_buffer_size];
UINT16结果索引;
#pragma data_section(AdcaResults1,".AdcResultsFLASH";
#pragma data_section(AdcaResults2,".AdcResultsFLASH";
#pragma data_section(AdcaResults3,".AdcResultsFLASH";
#pragma data_section(AddaResults4,".AdcResultsFLASH";
#pragma data_section(AddaResults5,".AdcResultsFLASH";
#pragma data_section(AdcaResults6,".AdcResultsFLASH";
#pragma data_section(AddaResults7,".AdcResultsFLASH";
#pragma data_section(AddaResults8,".AdcResultsFLASH";
#pragma data_section(AdcaResults9,".AdcResultsFLASH";
#pragma data_section(AddaResults10,".AdcResultsFLASH";
#pragma data_section(AddaResults11,".AdcResultsFLASH";
#pragma data_section(AdcaResults12,".AdcResultsFLASH";
#pragma data_section(AdcaResults13,".AdcResultsFLASH";
#pragma data_section(AdcaResults14,".AdcResultsFLASH";
#pragma data_section(AdcaResults15,".AdcResultsFLASH";
#pragma data_section(AdcaResults16,".AdcResultsFLASH";
#pragma data_section(AddaResultsFinal),".AdcResultsFanalFLASH";
然后修改链接程序命令文件,如下所示:
内存
{
第0页:/*程序存储器*/
...
...
...
/*闪存扇区*/
FLASHA:原点= 0x8.0002万,长度= 0x001FFE /*片上闪存*/
FLASHB:Origin = 0x8.2万,length = 0x0.2万 /*片上闪存*/
FLASHC:原点= 0x8.4万,长度= 0x0.2万 /*片上闪存*/
FLASHD:原点= 0x8.6万,长度= 0x0.2万 /*片上闪存*/
FLASHE:原点= 0x8.8万,长度= 0x0.8万 /*片上闪存*/
FLASHF:原始= 0x9万,长度= 0x0.8万 /*片上闪存*/
FLASHG:原点= 0x9.8万,长度= 0x0.8万 /*片上闪存*/
FLASHHI:原始= 0x0A0000,长度= 0x1万 /*片上闪存*/
// FLASHI:原点= 0x0A8000,长度= 0x0.8万 /*片上闪存*/
FLASHJ:Origin = 0x0B0000,length = 0x0.8万 /*片上闪存*/
FLASHK : Origin = 0x0B8000,length = 0x0.2万 /*片上闪存*/
FLASHL:原点= 0x0BA000,长度= 0x0.2万 /*片上闪存*/
FLASHM : Origin = 0x0BC000,length = 0x0.2万 /*片上闪存*/
FLASHN : Origin = 0x0BE000,length = 0x0.2万 /*片上闪存*/
第1页:/*数据存储器*/
....
}
章节
{
......
//ADC结果
AdcResultsFLASH:> FLASHHI,页=0
AdcResultsFanalFLASH:> FLASHL,第= 0页
AdcResults初级FLAASH:> FLASHK,第= 0页
......
}
将此程序闪存至闪存后。 但程序无法在运行时(执行期间)更改数组的值,即无法修改每个变量的默认值(可能是6.5535万 的未定义UINT16的默认值)。
我不明白为什么代码不能修改存储在闪存中的值?
请建议我对代码进行更改,以便我可以在运行时( 代码执行)期间修改存储在闪存中的变量,并在关闭电源后保留其值。
谢谢你
Mandar Kothavade