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.

TMS320F2800137: 使用将变量定义在FLASH时候,无法赋值生效

Part Number: TMS320F2800137
Other Parts Discussed in Thread: C2000WARE

申请一个变量放在FLASH的一个块里面,定义10,仿真查看他时显示-1,赋值失败

把#pragma DATA_SECTION(x1,"xfile")屏蔽了或者XFILE指向RAM空间,就可赋值10。

这个问题怎么解释,或者怎样才能给定义在Flash模块正常赋值

  • #pragma DATA_SECTION(date_compile,"app1_datetime")
    const char date_compile[4] = {YEAR,BYTE2INT(MONTH,DAY),BYTE2INT(HOUR,MINUTE),BYTE2INT(SECOND,0x2E)};
    #pragma RETAIN (date_compile)
    如上,试试加上最后一句。
  • 变量一般来说只能放在RAM中,FLASH擦除和编程需要用API实现。可参考C2000Ware中的F280013x_Flash_API_Reference_Guide.pdf。

  • 没有效果

  • 变量是得放在RAM中才行,那么#pragma CODE_SECTION,是把函数放在RAM中运行,节省的是那部分时间,本身函数生成的汇编指令是放在FLASH的,变量是在RAM中,那么CPU对变量的读取本身就在RAM中进行的,就没搞明白放RAM中代码运行时间减少,减少的是那部分时间

  • 因为FLASH读取有等待时间,从芯片数据手册可以看到,不同频率下等待时间不同,最大主频下一般要等待5个周期左右。代码放在RAM里就没有等待时间了,所以相同的代码放在RAM中可以全速运行,放在FLASH会慢一些。

  • 这么说,代码放RAM里是指将汇编指令放在RAM中,CPU运行指令时候需要读取,读取RAM的速度会比读取flash的速度快,