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.

[参考译文] TM4C123GH6PM:TM4C123GXL 的引导加载程序

Guru**** 2473260 points
Other Parts Discussed in Thread: TM4C123GH6PM, EK-TM4C123GXL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/679875/tm4c123gh6pm-bootloader-for-tm4c123gxl

器件型号:TM4C123GH6PM
主题中讨论的其他器件: EK-TM4C123GXLDK-TM4C123G

我想为 Tiva c 系列(TM4C123GH6PM)评估板编写一个引导加载程序。 我阅读了 TI 的一些文档、例如 ARM 汇编语言工具用户指南和 TivaWare 引导加载程序用户指南。
我对这个概念和细节有一些疑问、我希望有人能帮我解决这些问题。

评估套件:EK-TM4C123GXL
CCS 版本:7.4.0.00015

1.如何知道从 PC 获得复位矢量地址到执行 main()的程序流程。
  我想知道在执行 main 函数之前、所有设置和进程都发生了什么。
  我尝试在 tm4c123gh6m_startup_ccs.c 文件中添加一个断点、该文件具有_c_int00函数、这是在 ResetISR 中调用的函数。
  但是控制没有在断点停止、它直接进入 main。

根据我的理解、Cortex-M4微处理器的矢量表包含四个必需的条目、起始格式为地址0:初始堆栈
  复位处理程序地址、NMI 处理程序地址和硬故障处理程序地址。 当处理器复位时、它跳转到复位矢量
  该地址将是引导加载程序的起始点。 然后、引导加载程序将自身和矢量表复制到 SRAM、然后从该 SRAM 执行。  
  在哪里可以找到该操作的代码、以便可以在引导加载程序中实现该操作。

3.我在 CCS 中创建了一个测试项目、在这里我更改了 tm4c123gh6m_startup_ccs.c 文件中的 ResetISR 函数、并使其跳转到我的函数(test 函数)而不是_c_int00函数。
  当我运行程序时、控件进入 main、而不进入测试函数、这是为什么会发生这种情况。

  这是我的 ResetISR 函数

无效
ResetISR (空)

_asm (" .global testFunc\n"
      "  b.w testFunc");

4. TivaWare 引导加载程序用户指南中显示 CCS 的启动代码将位于文件 BL_STARTUP_CCS.s 中、在哪里可以找到该文件?

如果我的理解有任何错误、请告诉我。

提前感谢。

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

    您好 Naveen、

    您阅读的文档是为您的知识奠定基础的良好基础、但我认为您还需要花时间查看我们针对 boot_loader 的代码示例。 当我们在 TivaWare 软件包中提供了大量相关配套资料时、我甚至不知道您最初为什么要从头开始创建自己的产品。 您可能不知道这一点吗?

    TivaWare 中的'boot_loader'文件夹包含 BL_STARTUP_CCS.s 文件、该文件也是处理您的问题2的代码所在。 该文件夹还包含许多用于运行各种引导加载程序应用程序的引导加载程序文件。 我建议您不仅查看其中的一些代码文件、还应访问[Install Path]\TivaWare_C_Series-2.1.4.178\examples\boards\dk-tm4c123g examples 文件夹、并查看我们针对 DK 套件的引导加载程序示例、您可以将这些示例应用于 LaunchPad 的项目。 重新使用 TivaWare 配套资料将是为器件构建引导加载程序的最佳途径。

    TivaWare 下载链接、以满足您的需求: http://www.ti.com/tool/SW-TM4C

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

    您好、Ralph、

    感谢您帮助我处理这些文件。 我希望对引导过程有一个全面的了解、因此我会从头开始编写它。 我将介绍这些示例、同时还有几个问题。

    我相信、只要在电路板上运行任何代码、ROM 引导加载程序就是第一个要执行的操作、在哪里可以找到 ROM 引导加载程序

      源代码? 它是您提到的引导加载程序文件夹中的吗? 这也是我在运行代码时要执行的第一个文件、我是

      查找特定的文件名。

    链接器命令文件具有以下代码

    部分

      .intvecs :> 0x00000000

      .text : > FLASH

      .const : > FLASH

      .cinit : >闪存

      .pinit : > FLASH

      init_array:> FLASH

      .vtable :>0x20000000

      .data : > SRAM

      .bss  : > SRAM

      .sysmem :> SRAM

      .stack : > SRAM

    但是、当我在存储器浏览器中检查时、0x20000000处的数据是_stack、而不是.vtable、这是为什么?

    3.在哪些文件中定义了.vtable 和 bss_run 符号?

    非常感谢您的帮助。

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

    您好 Naveen、

    [引用用户="Naveen Bhimappa Kori"]

    1.我相信只要在电路板上运行任何代码、ROM 引导加载程序就是第一个要执行的操作、在哪里可以找到 ROM 引导加载程序源代码? 它是您提到的引导加载程序文件夹中的吗? 这也是我运行代码时要执行的第一个文件、我正在查找特定的文件名。

    [/报价]

    当器件在闪存中未编程任何内容的情况下启动时、通常会调用 ROM 引导加载程序。 即全新、干净的器件或已被闪存擦除的器件。  有关具体情况的更多详细信息、请访问 :https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/p/659316/2437757#2437757

    我们不为 ROM 引导加载程序提供源代码。

    [引用用户="Naveen Bhimappa Kori]2. 链接器命令文件具有以下代码

    哪一个示例? 我不知道最后要查看哪个文件

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

    这是来自[安装路径]\TivaWare_C_Series-2.1.4.178\examples\boards\dk-tm4c123g 的闪烁示例、对于该示例、存储器位置0x20000000为__stack 而不是.vtable。

    请确认我对引导过程的理解是否正确。
    如果我们确实使用基于闪存的引导加载程序、项目将包括引导加载程序代码和应用程序源代码。
    2.引导加载程序和应用程序代码将以初始方式放置在闪存中。
    3.引导加载程序随后将矢量表、引导加载程序代码和应用程序代码复制到 SRAM,然后将控制权传递给应用程序代码。

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

    大家好、我和你(今天早些时候)在成功的"事后解决方案"上有共同的看法-我是否可以要求你给予以下考虑-(一些)

    您显然是"注重细节"的、而且是持久的、但(既不)您也不(大多数其他人)出于任何原因-对于  "引导加载程序"的(明显)"吸引力/吸引"。    很多人都注意到,"就像梅尔塞尔发出了巨大的吸引力",他们的"追求"是 以"高昂的成本"来实现 的,而且往往不是这样,这对 (大多数)水手来说并不"最终好"。   (其中-我是其中之一)

    这会产生一种后果、尤其是在一个"如此新"的情况下、它会(非常早)沉浸在高度复杂的环境中。    这 种毫无道理的(追求)引导加载程序-"转移"-是否会从您的"更集中的" MCU 学习(和掌握)任务中转移出来?    如果是这样,原因是什么(可信的)?

    多年来、许多人从未部署过任何 "引导加载程序"。

    "kiss"要求您谨慎、系统且可衡量地构建知识库、始终采用(相对)小且严格限制的"块"。   引导加载程序不能满足(任何)这些指导原则-我"非常怀疑"-将最符合您 的"学习目标"。   (再次-在"转移"您的"更有必要-学习任务"时。)

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

    嗨、CB1_MOBILE、

    我尝试学习引导加载程序的原因是、我想知道从 MCU 上电到现在执行的代码是什么
    应用程序启动其任务。 正如您提到的、我知道这可能是一项非常复杂的任务、人们甚至无需部署即可成功、但这并不妨碍我了解引导加载程序、这完全是我理解它的愿望。

    当我开始阅读启动加载程序时、我意识到了这件事有多大的挑战性、这让我对此更加兴奋。 我知道、对于刚进入微控制器领域的人来说、这可能需要花费大量时间和坚定不移的坚持、但了解应用程序下的核心正在发生的情况同样有意义、我想您会同意我的观点。 此外、这将使我们更好地了解底层硬件、从而帮助我们构建更高效的程序。

    我非常渴望学习、只需要你们的帮助、我希望你们会感谢我愿意学习。 你们能指导我这个吗?

    谢谢

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

    我们是否可以回顾 您的两个要点-从您的帖子(上面)中、看看"美人鱼呼叫"是否附带了一些费用?   (她的"靴子"是否(有些)没有水记录?)

    [引用用户="Naveen Bhimappa Kori"]但要了解应用程序下的核心正在发生的情况,同样值得[/引用]

    那么、为什么(这也只是这个)应用程序?    范围中是否有足够的"广泛、可扩展和基础型"引导加载程序来证明您 的"支持更系统的 MCU 研究- Abide?"

    此外-如果"bootloader"如此强大-如此重要-为什么 它在 MCU 手册中不具有(显著)功能?   您的"搜索"将显示、 "偶尔、通常仅在远端提及"(即、甚至没有一个专门介绍引导加载程序的页面-非常有效!)  "重要得多的是- M4F 内核和外设-消耗1、000多页 仅"323页"就专门用于 MCU 的系统控制!

    [引用用户="Naveen Bhimappa Kori"]这将使我们更好地了解底层硬件[/引用]

    根据 MCU 手册、远程情况并非如此-以及其作者团队!   除了(赦免)"可能不恰当的好奇心"之外、有哪些理由可以支持" 更好的想法"这一说法?  而且-您是否不是-相当清楚-提供-显著且仅是-您的( 未清希望)"更好的想法"作为理由-您(声称) "更好的想法?"   此类定义、"循环思维"-不认为有说服力...

    的" MCU 基础知识的正确学习"(如 MCU 手册中所强调的那样)证明远比您的"幻想之路"更可取吗

    请注意、我对  尝试"命名"引导加载程序的"客户端用户"的相对"易用性和成功"没有意见。   您使用本页顶部的"论坛搜索框"将揭示"轻松"(或更有可能)"缺乏相同"-这是"如此多"的引导加载尝试导致的...   

    您是否未启用(不合理)"引导加载程序阴谋"以"劫持"您(真实/可认证) 的"MCU 学习"流程?   这种"选择"带来了(非常)高的价格-和风险-它不是吗?   (以及什么?)

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

    [引用 user="Naveen Bhimappa Kori">您能否确认我对引导过程的理解是否正确。
    如果我们确实使用基于闪存的引导加载程序、则工程将包括引导加载程序代码和应用程序源代码。[/quot]

    正确设置时、是的、引导加载程序将存在于闪存的一部分中、您的应用程序源代码应映射为不使用闪存的那个区域、以不会损坏引导加载程序

    [引用用户="Naveen Bhimappa Kori]2. 引导加载程序和应用程序代码将以初始方式放置在闪存中。 [/报价]

    是的。

    [引用用户="Naveen Bhimappa Kori]3. 然后、引导加载程序会将矢量表、引导加载程序代码和应用程序代码复制到 SRAM、然后将控制权传递给应用程序代码。 [/报价]

    不完全是。 引导加载程序会复制到 SRAM 中、但不会复制应用程序代码。 引导加载程序仅从 SRAM 运行、因此可以使用新的应用程序代码更新闪存、但新的或旧的应用程序代码都不会复制到 SRAM 中、仅复制引导加载程序。 引导加载过程完成后、引导加载程序应将 PC 设置为指向新下载的应用程序的开始、以便它可以开始运行。