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.

[参考译文] TM4C1292NCPDT:2017年7月10日

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/608998/tm4c1292ncpdt-07-10-2017

器件型号:TM4C1292NCPDT

HII、

我正在执行一个引导代码、必须从该代码执行两个固件映像。 启动代码和两个固件映像必须存储在闪存中。 它们的存储方式如 记忆图片段中所示。

一个变量必须存储在通用存储器区域的闪存存储器中、如代码段中所示、并且根据变量、必须在固件映像之间进行切换。 如何在 闪存中存储、更新和读取变量? 此外、我必须从闪存中执行固件映像。 我尝试使用函数(*(void (*)(void))(*(uint32_t *) 0x00004000)));。 从闪存地址执行是否足够?

我使用 LM 闪存编程器实用程序将程序加载到使用 USB 电缆连接的评估板。 当我将 blinky.bin 加载到0x00000000时、它可以正常工作。 但当我加载到0x00004000时、它不起作用。 原因可能是什么? 如果我最初将 bin 文件加载到某个地址、如果我再次将程序加载到0x00000000、该程序是否会保留在该地址中?

我将 blinky.bin 加载到0x00004000、然后将引导代码加载到0x00000000。 我必须从启动代码执行 blinky.bin。 我已经完成了、如代码段中所示。

我的方式是否正确? 请给我必要的建议。

谢谢、此致

Sandra

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Sandra、
    典型应用从 CPU 从地址0x0加载堆栈指针和从地址0x4加载 PC 开始。 在您的情况下、典型应用将是引导加载程序。 要将控制权转移到固件中的另一个应用程序、您可以使用上述汇编代码来仿真堆栈指针和 PC 的加载。 您还必须链接应用程序以在不同的位置启动和运行。 这可以通过修改链接命令文件" _ccs.cmd。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bob:

    我执行了如下所示的代码。 这是您的意思吗?

    此外、我在 cmd 文件中进行了编辑、

    但不执行0x4000的固件映像。 我还应该做些什么? 请告诉我一个建议。

    谢谢、此致

    Sandra

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

    SRAM 不应更改。 它仍然位于0x20000000。

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

    Bob、

    现在我更改了 SRAM 地址。

    同样、结果是相同的。 我还能做些什么呢? 请指导我。

    谢谢、此致

    Sandra

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    应用程序是否在引导加载程序和 APP_BASE 设置为0x00000000的情况下正确运行? 如果确实如此、则需要调试引导加载程序、以查看它是否正确调用汇编语言指令并将执行转移到应用程序。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bob:

    非常感谢您的指导。 现在、映像正在从引导代码运行。

    谢谢、此致

    Sandra