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.

[参考译文] TMS320F280049C:刷写应用程序和引导加载程序的合并十六进制文件时、应用程序的.cINIT 未初始化。

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1196547/tms320f280049c-cinit-of-application-did-not-initialized-when-merged-hex-file-of-application-and-bootloader-was-flashed

器件型号:TMS320F280049C

我有2个 CCS 项目、应用程序和引导加载程序。

Booatloader 闪存存储器范围为0x080000至0x081FFF

应用程序闪存存储器的范围是0x082000到0x08FFFF

我使用-load_image 成功合并了它们、并为它们创建了一个十六进制文件。

但在我将其加载到控制卡中后、它可以从引导加载程序主循环跳转到应用程序主循环、但应用程序的.cinit 未初始化。

应用程序端无法读取应用程序.cinit 中的数据。  

I 监视器是 application.map 的.cinit.Cla1ToCpuMsgRam.load

请参阅随附的 bootloader 和应用程序的 link.cmd 和映射文件。

可以帮帮我吗?

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

    应用闪存 lnk cmd

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    MEMORY
    {
    PAGE 0 :
    /* BEGIN is used for the "boot to SARAM" bootloader mode */
    BEGIN : origin = 0x082000, length = 0x00004
    RAMM0 : origin = 0x0000F3, length = 0x00030D
    RAMLS0 : origin = 0x008000, length = 0x000800
    RAMLS12 : origin = 0x008800, length = 0x001000
    RAMLS3 : origin = 0x009800, length = 0x000800
    RAMLS4 : origin = 0x00A000, length = 0x000800
    //RAMLS7 : origin = 0x00B800, length = 0x000800
    RESET : origin = 0x3FFFC0, length = 0x000002
    /* Flash sectors */
    /* BANK 0 */
    // FLASH_BANK0_BOOT : origin = 0x080000, length = 0x002000 /* on-chip Flash */
    // FLASH_BANK0_APP : origin = 0x082004, length = 0x00DFFB, fill = 0xFFFF /* on-chip Flash */
    FLASH_BANK0_SEC0 : origin = 0x080000, length = 0x001000 /* on-chip Flash */
    FLASH_BANK0_SEC1 : origin = 0x081000, length = 0x001000 /* on-chip Flash */
    FLASH_BANK0_SEC2 : origin = 0x082004, length = 0x000FFC, fill = 0xFFFF /* on-chip Flash */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    引导加载程序闪存 lnk cmd

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    //
    // Keep the _bankSelect symbol
    //
    MEMORY
    {
    PAGE 0 :
    /* BEGIN is used for the "boot to SARAM" bootloader mode */
    BEGIN : origin = 0x080000, length = 0x000002
    RAMM0 : origin = 0x000008, length = 0x0003F8
    RAMLS0 : origin = 0x008000, length = 0x000800 /* 2kWord, for CLA code */
    RAMLS1 : origin = 0x008800, length = 0x000800
    //RAMLS3 : origin = 0x009800, length = 0x000800
    //RAMLS4 : origin = 0x00A000, length = 0x000800
    RAMLS34 : origin = 0x009800, length = 0x001000
    RESET : origin = 0x3FFFC0, length = 0x000002
    /* Flash sectors */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    应用程序映射

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    ******************************************************************************
    TMS320C2000 Linker PC v21.6.0
    ******************************************************************************
    >> Linked Wed Feb 15 10:04:20 2023
    OUTPUT FILE NAME: <application.out>
    ENTRY POINT SYMBOL: "code_start" address: 00082000
    MEMORY CONFIGURATION
    name origin length used unused attr fill
    ---------------------- -------- --------- -------- -------- ---- --------
    PAGE 0:
    RAMM0 000000f3 0000030d 00000000 0000030d RWIX
    RAMLS0 00008000 00000800 000007a0 00000060 RWIX
    RAMLS12 00008800 00001000 00000134 00000ecc RWIX
    RAMLS3 00009800 00000800 00000000 00000800 RWIX
    RAMLS4 0000a000 00000800 00000000 00000800 RWIX
    DCSM_OTP_Z1_LINKPOINT 00078000 0000000c 00000000 0000000c RWIX
    DCSM_OTP_Z1_GPREG 0007800c 00000004 00000002 00000002 RWIX
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    引导加载程序映射

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    ******************************************************************************
    TMS320C2000 Linker PC v21.6.0
    ******************************************************************************
    >> Linked Wed Feb 15 10:04:48 2023
    OUTPUT FILE NAME: <bootloader.out>
    ENTRY POINT SYMBOL: "code_start" address: 00080000
    MEMORY CONFIGURATION
    name origin length used unused attr fill
    ---------------------- -------- --------- -------- -------- ---- --------
    PAGE 0:
    RAMM0 00000008 000003f8 000003f8 00000000 RWIX
    RAMLS0 00008000 00000800 00000000 00000800 RWIX
    RAMLS1 00008800 00000800 00000000 00000800 RWIX
    RAMLS34 00009800 00001000 00000a59 000005a7 RWIX
    BEGIN 00080000 00000002 00000002 00000000 RWIX
    FLASH_BOOT 00080002 00001ffe 00001553 00000aab RWIX
    FLASH_BANK0_SEC2 00082000 00001000 00000000 00001000 RWIX
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    您好 Jan、

    我们的一位编译器工具专家将很快回答这个问题。

    谢谢、
    Ibukun

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

    您好 Jan、

    为了获得更多背景信息、您能否准确地分享您如何从引导加载程序分支到应用程序?

    此致、
    Ibukun

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

    您好、Ibukun、

    很抱歉、我已经解决了问题、已延迟通知。  
    问题出在 f28004x_codestartbranch.asm 中、我直接调用 main 函数、而不是执行.cinit 的_c_int00。 请参阅以下代码。

    (三
    *函数:WD_DISABLE
    *
    *说明:禁用看门狗计时器
    (三
    如果 WD_DISABLE = 1

    .text
    WD_DISABLE:
    SETC OBJMODE;为28x 目标代码设置 OBJMODE
    EALLOW;启用 EALLOW 受保护寄存器访问
    MOVZ DP,#7029h>>>6;设置 WDCR 寄存器的数据页
    MOV @7029h、#0068h;将 WDCR 中的 WDDIS 位置位以禁用 WD
    EDIS;禁用 EALLOW 受保护寄存器访问
    ;LB _c_int00;分支到 RTS 库中启动。_asm
    LCR MAIN

    ;清理并退出。 此时、EntryAddr
    ;位于 ACC 寄存器中
    LB ExitBoot
    .endif

    ;结束 wd_disable

    我将其恢复为"LB _c_int00"

    然后、我通过以下代码更改从引导加载程序跳转到应用程序的实现。


    对于应用程序中的跳转:  
    asm (" lb 0x082000 ")

    对于引导加载程序中的跳转:
    asm (" lb 0x080000 ")

    此代码正常工作、也能够执行.cinit。  
    感谢您对我的问题的回答。
    我将把这个标记为已解决。


    此致、
    1月