This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] LAUNCHXL-F2.8377万S:如何在代码执行过程中更改闪存中声明的变量?

Guru**** 2560390 points
Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/635629/launchxl-f28377s-how-to-change-the-variables-declared-in-flash-during-code-execution

部件号: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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Mandal,

    要在执行期间修改Flash中的变量,需要使用Flash API。   

    F2.8377万S的Flash API参考指南: http://www.ti.com/lit/pdf/spnu630 

    C2000Ware中的闪存API使用示例:C2000Ware_1_00_02_00\device_support\f2837xs\examples\CPU1 \flash_programming2837 \flash_programming

    请查看以上示例。

    谢谢,此致,

    Vamsi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你。
    这解决了我的问题