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.

[参考译文] TM4C129ENCPDT:使用闪存的一部分作为 RAM

Guru**** 2531950 points
Other Parts Discussed in Thread: TM4C129ENCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1011086/tm4c129encpdt-using-part-of-flash-memory-to-use-as-ram

器件型号:TM4C129ENCPDT

大家好、

我将 tm4c129encpdt 微控制器与 TI-RTOS 搭配使用。  

我有一个与存储器相关的主要问题。 在大多数情况下、我的 RAM 使用率大于98%、这使得我们很难实现新的东西。 由于我们处于受约束的存储器环境中、我很想知道我们是否可以将闪存的一部分用作 RAM。  

根据数据表- https://www.ti.com/lit/ds/symlink/tm4c129encpdt.pdf?ts=1624026622136&ref_url=https%253A%252F%252Fwww.google.com%252F

表2-5、我们也可以使用闪存作为数据段。  

我尝试将其放入 tm4c129encpdt.cmd 文件中-


部分

.intvecs:> 0x00000000
.text:> FLASH
.const:> FLASH
.cinit:>闪存
.pinit:> FLASH
init_array:> FLASH
 .data:> FLASH

.vtable:> SRAM
//.data:> SRAM

.bss:> SRAM
.sysmem:> SRAM
.stack:> SRAM

__STACK_TOP =__STACK + 512;

如果您看到、我正在尝试将.data 段放入闪存中、但它不起作用。 甚至我的代码也没有执行。 我知道 RAM 和闪存是完全不同的、但是否有任何方法可以这样使用它们?

谢谢

AkhiG

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

    您好!

     您不能使用闪存替换 RAM。 闪存是非易失性存储器。 您不能像写入 RAM 那样只对其进行写入。 值从0变为1需要对闪存进行擦除。 我建议您改用片上仿真 EEPROM。 片上 EEPROM 为6KB。 请记住 EEPROM 可支持的编程/擦除周期数。 它在 数据表中进行了规格说明。

    uint32_t ui32EEPROMInit;
    uint32_t pui32Data[2];
    uint32_t pui32Read[2];
    //
    // Enable the EEPROM module.
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_EEPROM0);
    //
    // Wait for the EEPROM module to be ready.
    //
    while(!SysCtlPeripheralReady(SYSCTL_PERIPH_EEPROM0))
    {
    }
    //
    // Wait for the EEPROM Initialization to complete
    //
    ui32EEPROMInit = EEPROMInit();
    //
    // Check if the EEPROM Initialization returned an error
    // and inform the application
    //
    if(ui32EEPROMInit != EEPROM_INIT_OK)
    {
    while(1)
    {
    }
    }
    //
    // Program some data into the EEPROM at address 0x400.
    //
    pui32Data[0] = 0x12345678;
    pui32Data[1] = 0x56789abc;
    EEPROMProgram(pui32Data, 0x400, sizeof(pui32Data));
    //
    // Read it back.
    //
    EEPROMRead(pui32Read, 0x400, sizeof(pui32Read));