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.

[参考译文] C2000WARE: TMS320F28.0023万:我要创建一个全局变量,以使持久变量闪存

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1093589/c2000ware-tms320f280023-i-want-to-make-a-global-variable-assigned-to-flash-a-persistent-variable

部件号:C2000WARE
线程中讨论的其他部件:TMS320F28.0023万

大家好,

我正在 使用TMS320F28.0023万开发软件。
我们希望将闪存中存储的变量用作持久性变量。

我已经研究并发现我可以使用以下程序在FRAM中声明一个持久性变量。 是否也有方法在闪存中创建持久性变量?

"#pragma persistent(x)个"

此致。

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

    您好,

    我们的编译器专家目前已离开,下周初将返回。 请等待响应,直至收到响应。

    感谢您的耐心等待

    KI

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

    您好Ki
    感谢您的回复。

    此致。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    2000 flash-a-persistent-variable"]是否28.0023万是否有办法在闪存中创建永久变量[?

     TI-CGT-C2000_prag.0.LTS 21.6 编译器允许 使用持久性pragma,这会导致将数据变量放置在 ".TI.PERTI"节中。

    但是,编译器生成的用于修改持久性变量的汇编程序只是假定变量位于可写内存中。 例如,为TMS320F28.0023万创建的以下测试:

    #pragma PERSISTENT (num_boots)
    int num_boots = 0;
    
    int main(void)
    {
        num_boots++;
    
    	return num_boots;
    }
    

    导致汇编程序:

    ||main||:
    	.dwcfi	cfa_offset, -2
    	.dwcfi	save_reg_to_mem, 26, 0
    	.dwpsn	file "../main.c",line 13,column 5,is_stmt,isa 0
            MOVW      DP,#||num_boots||     ; [CPU_ARAU] 
            INC       @||num_boots||        ; [CPU_ALU] |13| 
    	.dwpsn	file "../main.c",line 15,column 2,is_stmt,isa 0
            MOV       AL,@||num_boots||     ; [CPU_ALU] |15| 
    	.dwpsn	file "../main.c",line 16,column 1,is_stmt,isa 0
    $C$DW$3	.dwtag  DW_TAG_TI_branch
    	.dwattr $C$DW$3, DW_AT_low_pc(0x00)
    	.dwattr $C$DW$3, DW_AT_TI_return
    
            LRETR     ; [CPU_ALU] 
            ; return occurs ; [] 
    

    由于C2000器件中的闪存需要擦除和编程操作,即不像MSP430 FRAM器件那样具有可写字节,因此,在闪存中标记为持久性的变量将无法由正在运行的程序进行修改。

    另外,在CCS 11.1 安装中搜索模板链接器.cmd文件时,对于 基于MSP430 FRAM的器件,只会在链接器命令文件中找到".TI.PERSISTICE"部分。

    也就是说,看不到任何支持FRAM的C2000器件,因此不清楚 TI-CGT-C2000 _C2000_FRAM.0.LTS 21.6 编译器为何允许永久pragma。

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

    您好,Chester,

    感谢您的回复。

    是否有办法在C2000器件上创建持久变量?

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

    PS

    我是嵌入式开发的初学者,因此我的帖子可能毫无意义。 抱歉。

    经过大量的研究,我发现闪存中的写入数量有限制。

    因此,我找到了一个文档,其中指出,如果您想在关机/重置后仍保留该值,则使用Flash的常用方法如下。
    (1)启动时将闪存中存储的值保存到RAM变量中
    (2)定期将RAM变量的值写入闪存

    在CCS中是否可以执行此类流程?
    如果是这样,如果您能同时提供处理样本,将会非常有帮助。

    提前感谢您的参与。

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

    Manabe,

    正如切斯特提到的那样,C2000只有闪存作为非易失性存储器,它只能在位级别从“1”(擦除)动态更改为“0”(编程)。  如果需要使用相同的闪存字来存储动态变量,则需要运行erase Flash API调用,这将擦除闪存的整个扇区。

    最佳,

    Matthew

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

    您好,Manabe:

    是的, 您可以使用您提到的方法-启动时从闪存复制,并根据需要将程序复制到闪存。

    您可以根据需要在运行时使用闪存API将这些值编程到闪存中。  请查看此C2000Ware示例,了解闪存API的使用情况:  C2000Ware_x_xx_xx_xx\driverlib\f28002x\examples\flash\flashapi_ex1_programming.c.</s>2.8002万

    谢谢,此致,
    Vamsi

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

    您好,Manabe:

    希望您已查看此示例。  我正在关闭此帖子。  如果您有进一步的问题,请打开一个新帖子,我们的团队会将您转至相应的专家。

    请注意:我到5月17日为止不在办公室,届时可能无法回复。

    谢谢,此致,

    Vamsi