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.

[参考译文] RTOS/TM4C1290NCPDT:Tiva C 闪存编程被中止

Guru**** 2466550 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/667195/rtos-tm4c1290ncpdt-tiva-c-flash-programming-gets-aborted

器件型号:TM4C1290NCPDT

工具/软件:TI-RTOS

您好!

在为 Tiva C 存储器编程部件时、我们会收到中止错误。

TI-RTOS 版本:2.16.01.14

我们的应用具有2个用于使用数据的存储器块(每个16KB)、
我们能够毫无问题地对存储器的第一个块(0x000200000)进行编程、
但是对于第二个块(0x00024000)、编程被中止。

为了进行测试,我们在主程序中实施 FlashEras()
并尝试在 FlashEras()中单步执行,程序在以下代码中中止。


//擦除块。
//
HWREG (FLASH_FMA)= ui32Address;
HWREG (FLASH_FMC)= FLASH_FMC_WRKEY | FLASH_FMC_ERASE;

//
//等待块被擦除。
//
while (HWREG (FLASH_FMC)和 FLASH_FMC_ERASE)

这里的四星级酒店被中止了

//
//如果发生访问冲突或擦除错误,则返回错误。
//
if (HWREG (FLASH_FCRIS)&(FLASH_FCRIS_ARIS | FLASH_FCRIS_VOLTRIS |
FLASH_FCRIS_ERRIS))

return(-1);

请告诉我是否有任何解决此问题的建议。

此致
Paddu

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

    当发生"abort"时、具体会发生什么错误? 您能否发布错误的详细信息? 这可能会告诉您正在发生什么。

    这些存储器组是否保留用于通过链接器文件存储数据? 您能否在 E2E 上发布链接器文件以便我可以查看它? 它将是您的项目的.cmd 文件。

    此外、为了清楚起见、您提到了0x000200000、然后是0x00024000、我确定您的第一个位置实际上是0x00020000、对吧? 我希望这样、因为 TM4C 产品系列中没有2MB 的器件!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Ralph Jacobi、

    感谢您提供的快速信息。
    根据您的建议、中可能存在错误
    链接器文件、我们现在将对其进行测试。稍后将提供详细信息。

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

    您好、Ralph Jacobi、

    关于中止问题、我们了解到了该错误
    由于 CMD 文件中的存储器分区而发生。

    下面是此应用和问题的简要详细信息。

    在此客户应用中、TI-RTOS (SYSTEM)和 Application (APP)被映射到单独的存储器中、
    每当有更新时、只有应用程序部分通过引导加载程序进行更新。
    这里、E2E 中也对此进行了分解

    为了实现这一点、主存储器分为两组、如下所示。
    系统部分始终是固定的、而应用部分是经常更新的。

    存储器

    /*
    闪存(RX):origin = 0x00000000,length = 0x00080000
    SRAM (rwx):origin = 0x20000000,length = 0x00040000
    *

    System_FLASH (RX):origin = 0x00000000,length = 0x00020000
    APP_FLASH (RX):origin = 0x00020000,length = 0x00080000
    System_SRAM (rwx):origin = 0x20000000,length = 0x00020000
    APP_SRAM (rwx):origin = 0x20020000,length = 0x00020000


    在所有章节中、我们有以下两个章节导致了这种情况
    编程时中止。

    ・cinit​​(初始化表)
    ・EK_TM4C129EXL.obj (.const)(与器件相关的初始化)

    如果我们将此部分映射到应用程序、则在更新应用程序(应用程序)时会出现中止错误。
    但是、如果我们将其映射到系统、程序在更新后将无法正常运行
    因为应用程序数据似乎包含在".cinit"中。

    请告诉我是否有任何建议正确映射".cinit"
    是否可以将".cinit"内的数据重新映射到单独的存储器?

    此致
    巴杜语

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

    你好,paddu,

    看起来可以将.cinit 重新映射到单独的存储器位置、但不能使用您描述的方法。 请参阅此 E2E 帖子、详细了解要执行的步骤: https://e2e.ti.com/support/development_tools/compiler/f/343/p/220978/780173#780173 (请注意、您可能需要在文本编辑器中编辑.cfg 文件)