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.

[参考译文] TM4C129XNCZAD:无法正确编译引导加载程序

Guru**** 2391825 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1018593/tm4c129xnczad-cannot-build-correctly-the-bootloader

器件型号:TM4C129XNCZAD

您好!

我打算为上述处理器构建 Tiva 引导加载程序。 加载程序已构建、但代码不会从闪存复制到 SRAM。 我有一个非常类似于 TivaWare 2.1.4.178的引导加载程序的项目。

我使用的是 CCS 版本:10.3.1.00003、编译器版本为 TI v20.2.4.LTS。

对处理器进行编程后、我可以在闪存矢量表中找到、但以下数据看起来与汇编代码不同。 复位矢量指向未初始化的闪存。 我怀疑闪存中不存在要复制的部分代码。

如果我采用 BL_STARTUP_CCS.s 的这一部分:




;;文件的这一部分进入文本部分。


   .word 0x12345678
   .text



;;通过将引导加载程序从闪存复制到 SRAM,零来初始化处理器
;填充.bss 段,并将矢量表移动到的开头
;SRAM。  修改返回地址以指向引导的 SRAM 副本
;;加载而不是闪存副本,导致现在在中对该副本进行分支
;SRAM。


   .ref   BSS_run
bss_start  .word bss_run
   .ref   __stack_top
bss_end    .word __stack_top

   thumbfunc ProcessorInit
ProcessorInit:.asmfunc
   ;
   ;;将代码映像从闪存复制到 SRAM。
   ;
   MOV   r0、#0x0000
   MOV   R1、#0x0000
   MOVt   R1、#0x2000
   LDR    R2、BSS_START

我将与闪存转储进行比较:

0000003a:  2000               MOV      r0、#0
0000003c:  06A3               lsls      R3、R4、#0x1a
0000003E:  2000               MOV      r0、#0
00000040:  06A3               lsls      R3、R4、#0x1a
00000042:  2000               MOV      r0、#0
00000044:  5678               ldrsb     r0、[r7、r1]
00000046:  1234               ASR      R4、R6、#8
00000048:  F1AD0D08           sub.w     R13、R13、#8
0000004c:  9000               str       r0、[R13]
0000004e:  BA00               rev       r0、r0
00000050:  4770               BX        r14
00000052:  9800               LDR       r0、[R13]
00000054:  1C40               添加      了 r0、r0、#1
00000056:  B002               添加       R13、#8
00000058:  4770               BX        r14
0000005a:  B508               推      送{R3、r14}

可以看到我的".word.word."值为12345678 (粗体)、但以下代码应为"MOVs..."

编译器发出有关此初始化的警告:

警告#10278-D:为段指定了负载位置
  ".text:rtsv7M4_T_le_v4SPD16_eabi.lib "。 本部分
  包含链接器生成的复制表所需的解压缩例程
  和 C/C++自动初始化。  必须确保将此段复制到
  在执行 C/C++引导代码或使用单个引导代码之前运行地址
  分配说明符(例如、">"存储器")。

但我不知道如何解决这个问题。 是否有要更改的 cmd 文件? (我使用原始文件)
存储器

   闪存(RX):origin = 0x00000000,length = 0x00010000
   SRAM (rwx):origin = 0x20000000,length = 0x00010000


/*内存中的段分配*/

部分

   组
   {
       .intvecs
       .text
       .const
       .data
   } load = FLASH、run = 0x20000000、load_start (init_load)、run_start (init_run)、size (init_size)

   组
   {
       .bss
       堆栈
   }run = SRAM、run_start (bss_run)、run_end (bss_end)、size (bss_size)、run_end (__stack_top)


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

    您好!

     您是否正在使用 TivaWare 引导加载程序?

     我像您一样将.word 12345678添加到 TivaWare 引导加载程序文件 BL_STARTUP_CCS.s 文件中。 我看不到运行代码时出现问题。 它从串行 UART 接口正确引导。 我能够重复加载 boot_demo1.c 示例。  

     下图显示了在汇编文件中等于0x00BC614E 的12345678的位置。  

    下面是 RAM 中的 ProcessorInit 函数。 在  搜索字段中搜索 ProcessorInit。  

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

    是的、我使用的是 Tivaware 引导加载程序。 我将使用 CCS 编译它、这与您的图片有所不同

    代码在 RAM 中的位置不同。 您可以看到、SRAM 中的代码不是预期的代码。 您是否有我可以导入的 CCS 项目? 我假设编译器设置中有问题。

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

    您好!

     您可能使用了不同的编译器版本或使用了不同的优化级别。 我使用 v20.2.4.LTS 版本和优化级别、如下所示。  

    下面是 TivaWare 2.2.0.295中的 boot_loader。 我只将.word 1234567插入到 BL_STARTUP_CCS.s

    e2e.ti.com/.../7220.boot_5F00_serial.zip

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

    尊敬的 Marc:

    也许尝试在 源 代码0x0000.4000开始之前缩短应用程序闪存长度。 对于512KB 闪存、 0x00080000 - 0x0000.4000似乎可以正常工作。 用于1MEG 闪存(1294NCPDT)应用的奇数器件不需要长度调整。  

    此致、

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

    您好、Charles、

    感谢您提供代码。 我成功编译了 Booloader。 最好的方法是从一个示例开始。

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

    但是您的帖子并不是关于编译引导加载程序失败。 为了使其正常工作、您进行了哪些更改?   

    [引用 userid="106921" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1018593/tm4c129xnczad-cannot-build-correctly-the-bootloader ]\n 加载器已构建、但代码未从闪存复制到 SRAM。[/quot]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当我开始从引导加载程序文件夹编译工程时、它不会正确编译、但如果我使用示例、它会起作用。 我没有进行深入的检查以了解为什么、我想有些设置没有正确完成。