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.

[参考译文] F28M36P63C2:M3引导加载程序和应用程序代码链接

Guru**** 2538930 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/602982/f28m36p63c2-m3-bootloader-and-application-code-linking

器件型号:F28M36P63C2
Thread 中讨论的其他器件:controlSUITE

我不熟悉 Concerto。。。

我正在尝试更好地了解在协处理器上控制 M3以使用链接器命令文件引导 M3应用程序的方法。

我有两个项目:M3引导加载程序和 M3应用程序。  

目前、引导加载程序会跳转到 M3应用程序.codestart 位置所在的闪存位置 BeginA。 应用程序使 LED 闪烁。

使用调试器时、当我 运行引导加载程序时、它似乎可以正常工作。 在电源复位时、引导加载程序不运行、更糟糕的是应用程序启动。 (闪烁 LED)

 我没有更改任一程序的默认复位 ISR 闪存位置。 我认为这是一个问题。  

如果能深入了解这方面的基本设置、我们将不胜感激。

下面的链接器命令文件:

应用:
/*闪存块0、扇区0 */
RESETISR (RX):origin = 0x00200030,length = 0x0008 //复位 ISR 映射到引导至闪存位置*/
INTVECS (RX):origin = 0x00201000,length = 0x0258
FLASHLOAD (RX):origin = 0x00201258,length = 0x6DA8 //,用于将代码存储在闪存中,以便在运行时复制到 RAM */

/*闪存块0、扇区1至闪存块0、扇区13 */
FLASHE (Rwx):origin = 0x002C0000,length = 0x1FFFF //为 bootloader 添加了闪存扇区 E 的块*/

BeginA (rwx):origin = 0x002E0000,length = 0x0002 //扇区 D 的第一部分,用于应用程序代码 startbranch*/
BEGINB (rwx):origin = 0x002E0003,length = 0x0002 //扇区 D 的第一部分,用于引导加载程序代码 startbranch*/

FWVERSITION:origin = 0x002E0005 length = 0x002 //固件版本*/
FLASHD (rwx):origin = 0x002E0007,length = 0x7FF8/*扇区 D 余数*/

部分

.intvecs:> INTVECS、ALIGN (8)
.resettisr:> RESETISR、align (8)
.text:> FLASHD,align (8)/*从扇区 D 运行应用程序代码*/
.const:> FLASHD、align (8)
.cinit:> FLASHD,align (8)
.pinit:> FLASHD,align (8)
codestart:> BeginA,align (8)

引导加载程序

/*闪存块0、扇区0 */
RESETISR (RX):origin = 0x00200030,length = 0x0008 //复位 ISR 映射到引导至闪存位置*/
INTVECS (RX):origin = 0x00201000,length = 0x0258
FLASHLOAD (RX):origin = 0x00201258,length = 0x6DA8 //,用于将代码存储在闪存中,以便在运行时复制到 RAM */

/*闪存块0、扇区1至闪存块0、扇区13 */
FLASHE (Rwx):origin = 0x002C0000,length = 0x1FFFF //为 bootloader 添加了闪存扇区 E 的块*/

BeginA (rwx):origin = 0x002E0000,length = 0x0002 //扇区 D 的第一部分,用于应用程序代码 startbranch*/
BEGINB (rwx):origin = 0x002E0003,length = 0x0002 //扇区 D 的第一部分,用于引导加载程序代码 startbranch*/

FWVERSITION:origin = 0x002E0005 length = 0x002 //固件版本*/
FLASHD (rwx):origin = 0x002E0007,length = 0x7FF8/*扇区 D 余数*/
闪存(RX):origin = 0x002E8000、length = 0x17E00 //扇区 A 到扇区 C (减去 Z2 CSM)*/

部分

.intvecs:> INTVECS、ALIGN (8)
.resettisr:> RESETISR、align (8)
.text:> FLASHE、ALIGN (8)/*从扇区 E 运行引导加载程序*/
.const:> FLASHE、align (8)
.cinit:> FLASHE、align (8)
.pinit:> FLASHE、align (8)
.codestart:> BEGINB,align (8)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    瑞吉斯
    在构建项目时、您是否看到任何警告? 尤其是 w.r.t ramfuncs?

    您正在构建的是 controlSUITE 器件的哪个版本的 blinky?

    我尝试了以下闪烁项目、闪存构建配置、我看到了一条有关 ramfuncs 的警告。
    C:\ti\controlSUITE\device_support\f28m36x\V210\F28M36x_examples_Master\blinky

    我的工具链是16.9.x 版本及15.9版本以上、但 ramfuncs 声明存在更改。 我必须将 driverlib 项目导入 CCS、然后使用最新的工具链再编译一次、这样就会更新 blinky 所需的 driverlib.lib 文件。 现在、在这之后、我重建了我的闪烁、警告消失了。

    当独立启动时、ramfuncs 是需要正确处理的部分、如果您看到警告、它可能是您的情况下出现故障的原因。 请告诉我这是否能解决问题、如果不能、您是否可以发送您的映射文件(您可以在构建目录中找到)?

    此致
    Santosh Athuru
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。
    这两个 M3程序都可以无错误地编译并正常工作。 我将闪烁示例用作我的应用、没有任何问题。
    我不清楚如何使应用依赖于引导加载程序。 我试图通过将引导加载程序指向错误的地址来断开它、但仍会导致闪烁正常运行。 很显然,我不理解什么。 感谢你的帮助。 我将附加两个映射文件。

    应用程序映射:
    秘书长的报告
    TI ARM 连接器 Unix v15.12.3
    秘书长的报告
    >>链接2017年6月14日13:48:47

    输出文件名:
    入口点符号:"_c_int00"地址:002e0911


    存储器配置

    名称 原点长度 已使用 未使用的属性填充
    ------------ ---- ------ ---- ---- --------
    CSM_ECSL_Z1 00200000 00000024 00000000 00000024 RWIX
    CSM_RSVD_Z1 00200024 0000000c 00000000 0000000c RWIX
    RESETISR 00200030 00000008 00000006 00000002 R X
    INTVECS 00201000 00000258 000001b0 000000a8 R X
    FLASHLOAD 00201258 00006da8 00000000 00006da8 R X
    FLASHE 002c0000 0001FFFF 00000000 0001FFFF RW X
    BeginA 002e0000 00000002 00000000 00000002 RW X
    BEGINB 002e0003 00000002 00000000 00000002 RW X
    FWVERSITION 002e0005 00000002 00000000 00000002 RWIX
    FLASHD 002e0007 00007ff8 00000a86 00007572 RW X
    闪存 002e8000 00017e00 00000000 00017e00 R X
    CSM_RSVD_Z2 002ffe00 000001dc 00000000 000001dc RWIX
    CSM_ECSL_Z2 002fffdc 00000024 00000000 00000024 RWIX
    OTPSECLOCK 00681000 00000004 00000000 00000004 RWIX
    OTP_Reserved1 00681004 00000004 00000000 00000004 RWIX
    OTP_Reserved2 00681008 00000004 00000000 00000004 RWIX
    OTP_Z2_FLASH_START_AD 0068100c 00000004 00000000 00000004 RWIX
    OTP_EMACID 00681010 00000008 00000000 00000008 RWIX
    OTP_Reserved3 00681018 00000004 00000000 00000004 RWIX
    Customer_OTP_MAIN_OSC 0068101c 00000004 00000000 00000004 RWIX
    OTP_Reserved4 00681020 00000004 00000000 00000004 RWIX
    OTP_BOOT_MODE_GPIO_CO 00681024 00000004 00000000 00000004 RWIX
    OTP_Reserved5 00681028 00000004 00000000 00000004 RWIX
    OTP_Entry_point 0068102c 00000004 00000000 00000004 RWIX
    OTP_Reserved6. 00681030 00000010 00000000 00000010 RWIX
    C0 20000000 00002000 00000118 00001e8 RW X
    C1 20002000 00002000 00000000 00002000 RW X
    BOOT_RSVD 20004000 00000ff8 00000000 00000ff8 R X
    C2 200051b0 00000e50 00000000 00000e50 RW X
    C3 20006000 00002000 00000000 00002000 RW X
    S0 20008000 00002000 00000000 00002000 RW X
    S1. 2000a000 00002000 00000000 00002000 RW X
    S2 2000c000 00002000 00000000 00002000 RW X
    S3 2000e000 00002000 00000000 00002000 RW X
    S4 20010000 00002000 00000000 00002000 RW X
    S5 20012000 00002000 00000000 00002000 RW X
    S6 20014000 00002000 00000000 00002000 RW X
    S7. 20016000 00002000 00000000 00002000 RW X
    C4 20018000 00002000 00000000 00002000 RW X
    C5 2001a000 00002000 00000000 00002000 RW X
    C6 2001c000 00002000 00000000 00002000 RW X
    C7 2001e000 00002000 00000000 00002000 RW X
    C8 20020000 00002000 00000000 00002000 RW X
    C9 20022000 00002000 00000000 00002000 RW X
    C10. 20024000 00002000 00000000 00002000 RW X
    问题11. 20026000 00002000 00000000 00002000 RW X
    C12. 20028000 00002000 00000000 00002000 RW X
    问题13. 2002a000 00002000 00000000 00002000 RW X
    C14. 2002c000 00002000 00000000 00002000 RW X
    C15 2002e000 00002000 00000000 00002000 RW X
    CTOMRAM 2007f000 00000800 00000000 00000800 R X
    MTOCRAM 2007f800 00000800 00000000 00000800 RW X


    段分配映射

    运行 origin load origin length init length atts members
    ------ ------ ------ ------ ---- ----
    00200030 00200030 00000006 00000006 r-x
    00200030 00200030 00000006 00000006 r-x .reshtisr
    00201000 00201000 000001b0 000001b0 r--
    00201000 00201000 000001b0 000001b0 r-.intvecs
    002e0008 002e0008 00000a90 00000a90 r-x
    002e0008 002e0008 00000a4a 00000a4a r-x .text
    002e0a58 002e0a58 00000014 00000014 r-.const
    002e0a70 002e0a70 00000028 00000028 r-.cinit
    20000000 20000000 00000118 00000000 Rw-
    20000000 20000000 00000100 00000000 rw-.stack
    20000100 20000100 00000018 00000000 rw-.data


    部分分配映射

    输出 属性/
    分区页面来源 长度 输入段
    ---- -------- ------ --------
    重新密封
    * 0 00200030 00000006
    00200030 00000006 startup_ccs.obj (.resetisr:ResetISR)

    .intvecs 0 00201000 000001b0
    00201000 000001b0 startup_ccs.obj (.intvecs)

    .text 0 002e0008 00000a4a
    002e0008 0000018c libSystemControlM3_F28M36x.lib:sysctl.obj (.text:SysCtlClockPllConfig)
    002e0194 00000148 :sysctl.obj (.text:SysCtlClockDividersSet)
    002e02dc 000000a6 :gpio.obj (.text:gpioPadConfigSet)
    002e0382 00000002 startup_ccs.obj (.text:FaultISR)
    002e0384 0000009c main.obj (.text:main)
    002e0420 0000009c rtsv7M3_T_le_eabi.lib:memcpy_t2.obj (.text)
    002e04bc 00000094 libSystemControlM3_F28M36x.lib:sysctl.obj (.text:SysCtlClockConfigGet)
    002e0550 00000090 :sysctl.obj (.text:SysCtlXPllClockDividerSet)
    002e05e0 0000007a rtsv7M3_T_le_eabi.lib:memset_t2.obj (.text)
    002e065a 00000002 startup_ccs.obj (.text:IntDefaultHandler)
    002e065c 00000070 rtsv7M3_T_le_eabi.lib:autobinit.obj (.text)
    002e06cc 0000006a :copy_decompress_rle.obj (.text)
    002e0736 0000005c libSystemControlM3_F28M36x.lib:gpio.obj (.text:gpioDirModeSet)
    002e0792 00000002 startup_ccs.obj (.text:NmiSR)
    002e0794 00000054 rtsv7M3_T_le_eabi.lib:exit.obj (.text)
    002e07e8 0000004c libSystemControlM3_F28M36x.lib:sysctl.obj (.text:SysCtlClockConfigSet)
    002e0834 0000004c rtsv7M3_T_le_eabi.lib:cpy_tbl.obj (.text)
    002e0880 00000048 libSystemControlM3_F28M36x.lib:sysctl.obj (.text:SysCtlPeripheralDisable)
    002e08c8 00000048 :sysctl.obj (.text:SysCtlPeripheralEnable)
    002e0910 00000040 rtsv7M3_T_le_eabi.lib:boot.obj (.text)
    002e0950 00000038 libSystemControlM3_F28M36x.lib:sysctl.obj (.text:SysCtlPeripheralIsEnabled)
    002e0988 00000022 :gpio.obj (.text:gpioPinTypegpioOutput)
    002e09aa 00000020 :gpio.obj (.text:gpioPinWrite)
    002e09ca 00000002 rtsv7M3_T_le_eabi.lib:mpu_init.obj (.text)
    002e09cc 00000018 :args_main.obj (.text)
    002e09e4 00000014 :_lock.obj (.text)
    002e09f8 00000012 libSystemControlM3_F28M36x.lib:watchdog.obj (.text:WatchdogReloadSet)
    002e0a0a 00000012 :watchdog.obj (.text:watchdogRunning)
    002e0a1c 0000000e rtsv7M3_T_le_eabi.lib:copy_decompress_none.obj (.text:decompress:none)
    002e0a2a 0000000c libSystemControlM3_F28M36x.lib:cpu.obj (.text:cpusie)
    002e0a36 0000000a :interrupt.obj (.text:IntMasterEnable)
    002e0a40 00000006 :sysctl.obj (.text:SysCtlDelay)
    002e0a46 00000006 rtsv7M3_T_le_eabi.lib:copy_decompress_rle.obj (.text:decompress:rle24)
    002e0a4c 00000004 :pre_init.obj (.text)
    002e0a50 00000002 :startup.obj (.text)

    .const 0 002e0a58 00000014
    002e0a58 00000014 libSystemControlM3_F28M36x.lib:sysctl.obj (.const:g_pulRCGCRegs)

    .cinit 0 002e0a70 00000028
    002e0a70 00000017 (.cinit、.data.load)[加载映像、压缩= rle]
    002e0a87 00000001 --hole --[填充= 0]
    002e0a88 00000008 (__TI_handler_table)
    002e0a90 00000008 (__TI_cinit_table)

    .data 0 20000100 00000018 未初始化
    20000100 0000000c rtsv7M3_T_le_eabi.lib:exit.obj (.data:$O1$$)
    2000010c 00000008 :_lock.obj (.data:$O1$$)
    20000114 00000004 :stkdepte_vars.obj (.data)

    堆栈 0 20000000 00000100 未初始化
    20000000 00000100 -孔--

    .TI.ramfunc
    * 0 20000000 00000000 未初始化

    GETBUFFER
    * 0 2007f000 00000000 DSECT

    GETWRITEIDX
    * 0 2007f000 00000000 DSECT

    PUTREADIDX
    * 0 2007f000 00000000 DSECT

    模块总结

    模块 代码 ro 数据 RW 数据
    ---- ------ ----
    .
    startup_ccs.obj 12. 432 0
    main.obj 156 0 0
    +-++---------------- +--- +--- +--- +
    总计: 168 432 0

    /home/rwinn/git-sandbox/Libraries/Firmware/TI/M3/libSystemControlM3/lib/libSystemControlM3_F28M36x.lib
    sysctl.obj 1298 20. 0
    GPIO_obj 324 0 0
    安全装置.obj 36. 0 0
    cpu.obj 12. 0 0
    interrupt.obj 10. 0 0
    +-++---------------- +--- +--- +--- +
    总计: 1680 20. 0

    /opt/ti/ccsv6/tools/compiler/arm_15.12.3.LTS/lib/rtsv7M3_T_le_eabi.lib
    memcpy_t2.obj 156 0 0
    memset_t2.obj 122 0 0
    autoinit.obj 112 0 0
    copy_decompress_rle.obj 112 0 0
    exit.obj 84 0 12.
    cpy_tbl.obj 76. 0 0
    boot.obj 64 0 0
    _lock.obj 20. 0 8.
    args_main.obj 24 0 0
    copy_decompress_none.obj 14. 0 0
    pre_init.obj 4. 0 0
    stkdept_vars.obj 0 0 4.
    MPU_init.obj 2. 0 0
    startup.obj 2. 0 0
    +-++---------------- +--- +--- +--- +
    总计: 792 0 24

    堆栈: 0 0 256
    链接器生成: 0 39. 0
    +-++---------------- +--- +--- +--- +
    总计: 2640 491 280


    链接器生成的复制表

    _TI_cinit_table @ 002e0a90记录:1、大小/记录:8、表大小:8
    .data:load addr=002e0a70、load size=00000017字节、run addr=20000100、run size=00000018字节、compression=rle


    链接器生成的处理程序表

    _TI_handler_table @ 002e0a88记录:2、大小/记录:4、表大小:8
    索引:0、处理程序:_TI_decompress_rle24
    索引:1、处理程序:_TI_decompress_none


    全局符号:按名称按字母顺序排序

    地址名称
    ---- ----
    002e0795 C$$EXIT
    002e0a2b CPUcpsie
    002e0737 GPIODirModeSet
    002e02dd GPIOPadConfigSet
    002e0989 GPIOPinTypeGPIOOutput
    002e09ab GPIOPinWrite
    002e0a37 IntMasterEnable
    20000000 RamfuncsLoadEnd
    00000000 RamfuncsLoadSize
    20000000 RamfuncsLoadStart
    20000000 RamfuncsRunEnd
    00000000 RamfuncsRunSize
    20000000 RamfuncsRunStart
    00200031 ResetISR
    UNDEFED SHT$$INIT_RAGE$$Base
    UNDEFED SHT$$INIT_ARRAGE$$LIMIT
    002e04BD SysCtlClockConfigGet
    002e07e9 SysCtlClockConfigSet
    002e0195 SysCtlClockDividersSet
    002e0009 SysCtlClockPllConfig
    002e0a41 SysCtlDelay
    002e0881 SysCtlPeripheralDisable
    002e08c9 SysCtlPeripheralEnable
    002e0951 SysCtlPeripheralIsEnabled
    002e0551 SysCtlXPllClockDividerSet
    002e09f9看门狗 ReloadSet
    002e0a0b 看门狗运行
    20000100 __STACK_END
    00000100 __STACK_SIZE
    20000100 __STACK_TOP
    002e0a90 __TI_CINIT_Base
    002e0a98 __TI_CINIT_LIMIT
    002e0a88 __TI_Handler_Table_Base
    002e0a90 __TI_Handler_Table_Limit
    002e065d __TI_auto_init
    20000100 __TI_clean_ptr
    002e0a1d __TI_decompress_none
    002e0a47 __TI_decompress_rle24
    20000104 __TI_dptors _ptr
    20000108 __TI_ENABLE_EXIT_PROFILE_OUTPUT
    FFFFFFFF __TI_pprof_out_hndl
    FFFFFFFF __TI_PRof _DATA_SIZE
    FFFFFFFF _TI_PROD_DATA_START
    002e0a70 __TI_STATIC_BASE__
    002e05e1 __aeabi_memclr
    002e05e1 __aeabi_memclr4.
    002e05e1 __aeabi_memclr8.
    002e0421 __aeabi_memcpy
    002e0421 __aeabi_memcpy4.
    002e0421 __aeabi_memcpy8.
    002e05e3 __aeabi_memset
    002e05e3 _aeabi_memset4
    002e05e3 __aeabi_memset8.
    FFFFFFFF __binIT__
    FFFFFFFF __c_args__
    002e09cb __MPU_init
    20000000 __stack
    002e09cd _args_main
    002e0911 _c_int00
    2000010c _lock
    002e09f3 _nop
    002e09eb _register_lock
    002e09e5 _register_unlock
    002e0a51 _system_post_cinit
    002e0a4d _system_pre_init
    20000110_unlock
    002e0799中止
    FFFFFFFF 二进制文件
    002e0835 copy_in
    002e07a1出口下
    00201000 g_pfn 矢量
    002e0385 main
    20000114 main_func_sp
    002e0421 memcpy
    002e05e9内存集


    全局符号:按符号地址排序

    地址名称
    ---- ----
    00000000 RamfuncsLoadSize
    00000000 RamfuncsRunSize
    00000100 __STACK_SIZE
    00200031 ResetISR
    00201000 g_pfn 矢量
    002e0009 SysCtlClockPllConfig
    002e0195 SysCtlClockDividersSet
    002e02dd GPIOPadConfigSet
    002e0385 main
    002e0421 __aeabi_memcpy
    002e0421 __aeabi_memcpy4.
    002e0421 __aeabi_memcpy8.
    002e0421 memcpy
    002e04BD SysCtlClockConfigGet
    002e0551 SysCtlXPllClockDividerSet
    002e05e1 __aeabi_memclr
    002e05e1 __aeabi_memclr4.
    002e05e1 __aeabi_memclr8.
    002e05e3 __aeabi_memset
    002e05e3 _aeabi_memset4
    002e05e3 __aeabi_memset8.
    002e05e9内存集
    002e065d __TI_auto_init
    002e0737 GPIODirModeSet
    002e0795 C$$EXIT
    002e0799中止
    002e07a1出口下
    002e07e9 SysCtlClockConfigSet
    002e0835 copy_in
    002e0881 SysCtlPeripheralDisable
    002e08c9 SysCtlPeripheralEnable
    002e0911 _c_int00
    002e0951 SysCtlPeripheralIsEnabled
    002e0989 GPIOPinTypeGPIOOutput
    002e09ab GPIOPinWrite
    002e09cb __MPU_init
    002e09cd _args_main
    002e09e5 _register_unlock
    002e09eb _register_lock
    002e09f3 _nop
    002e09f9看门狗 ReloadSet
    002e0a0b 看门狗运行
    002e0a1d __TI_decompress_none
    002e0a2b CPUcpsie
    002e0a37 IntMasterEnable
    002e0a41 SysCtlDelay
    002e0a47 __TI_decompress_rle24
    002e0a4d _system_pre_init
    002e0a51 _system_post_cinit
    002e0a70 __TI_STATIC_BASE__
    002e0a88 __TI_Handler_Table_Base
    002e0a90 __TI_CINIT_Base
    002e0a90 __TI_Handler_Table_Limit
    002e0a98 __TI_CINIT_LIMIT
    20000000 RamfuncsLoadEnd
    20000000 RamfuncsLoadStart
    20000000 RamfuncsRunEnd
    20000000 RamfuncsRunStart
    20000000 __stack
    20000100 __STACK_END
    20000100 __STACK_TOP
    20000100 __TI_clean_ptr
    20000104 __TI_dptors _ptr
    20000108 __TI_ENABLE_EXIT_PROFILE_OUTPUT
    2000010c _lock
    20000110_unlock
    20000114 main_func_sp
    FFFFFFFF __TI_pprof_out_hndl
    FFFFFFFF __TI_PRof _DATA_SIZE
    FFFFFFFF _TI_PROD_DATA_START
    FFFFFFFF __binIT__
    FFFFFFFF __c_args__
    FFFFFFFF 二进制文件
    UNDEFED SHT$$INIT_RAGE$$Base
    UNDEFED SHT$$INIT_ARRAGE$$LIMIT

    [75个符号]


    引导加载程序映射
    秘书长的报告
    TI ARM 连接器 Unix v15.12.3
    秘书长的报告
    >> 2017年6月14日13:54:59号链接

    输出文件名:
    入口点符号:"_c_int00"地址:002c0295


    存储器配置

    名称 原点长度 已使用 未使用的属性填充
    ------------ ---- ------ ---- ---- --------
    CSM_ECSL_Z1 00200000 00000024 00000000 00000024 RWIX
    CSM_RSVD_Z1 00200024 0000000c 00000000 0000000c RWIX
    RESETISR 00200030 00000008 00000000 00000008 R X
    INTVECS 00201000 00000258 00000000 00000258 R X
    FLASHLOAD 00201258 00006da8 00000000 00006da8 R X
    FLASHE 002c0000 0001FFFF 0000037a 0001fc85 RW X
    BeginA 002e0000 00000002 00000000 00000002 RW X
    BEGINB 002e0003 00000002 00000000 00000002 RW X
    FWVERSITION 002e0005 00000002 00000000 00000002 RWIX
    FLASHD 002e0007 00007ff8 00000000 00007ff8 RW X
    闪存 002e8000 00017e00 00000000 00017e00 R X
    CSM_RSVD_Z2 002ffe00 000001dc 00000000 000001dc RWIX
    CSM_ECSL_Z2 002fffdc 00000024 00000000 00000024 RWIX
    OTPSECLOCK 00681000 00000004 00000000 00000004 RWIX
    OTP_Reserved1 00681004 00000004 00000000 00000004 RWIX
    OTP_Reserved2 00681008 00000004 00000000 00000004 RWIX
    OTP_Z2_FLASH_START_AD 0068100c 00000004 00000000 00000004 RWIX
    OTP_EMACID 00681010 00000008 00000000 00000008 RWIX
    OTP_Reserved3 00681018 00000004 00000000 00000004 RWIX
    Customer_OTP_MAIN_OSC 0068101c 00000004 00000000 00000004 RWIX
    OTP_Reserved4 00681020 00000004 00000000 00000004 RWIX
    OTP_BOOT_MODE_GPIO_CO 00681024 00000004 00000000 00000004 RWIX
    OTP_Reserved5 00681028 00000004 00000000 00000004 RWIX
    OTP_Entry_point 0068102c 00000004 00000000 00000004 RWIX
    OTP_Reserved6. 00681030 00000010 00000000 00000010 RWIX
    C0 20000000 00002000 00000118 00001e8 RW X
    C1 20002000 00002000 00000000 00002000 RW X
    BOOT_RSVD 20004000 00000ff8 00000000 00000ff8 R X
    C2 200051b0 00000e50 00000000 00000e50 RW X
    C3 20006000 00002000 00000000 00002000 RW X
    S0 20008000 00002000 00000000 00002000 RW X
    S1. 2000a000 00002000 00000000 00002000 RW X
    S2 2000c000 00002000 00000000 00002000 RW X
    S3 2000e000 00002000 00000000 00002000 RW X
    S4 20010000 00002000 00000000 00002000 RW X
    S5 20012000 00002000 00000000 00002000 RW X
    S6 20014000 00002000 00000000 00002000 RW X
    S7. 20016000 00002000 00000000 00002000 RW X
    C4 20018000 00002000 00000000 00002000 RW X
    C5 2001a000 00002000 00000000 00002000 RW X
    C6 2001c000 00002000 00000000 00002000 RW X
    C7 2001e000 00002000 00000000 00002000 RW X
    C8 20020000 00002000 00000000 00002000 RW X
    C9 20022000 00002000 00000000 00002000 RW X
    C10. 20024000 00002000 00000000 00002000 RW X
    问题11. 20026000 00002000 00000000 00002000 RW X
    C12. 20028000 00002000 00000000 00002000 RW X
    问题13. 2002a000 00002000 00000000 00002000 RW X
    C14. 2002c000 00002000 00000000 00002000 RW X
    C15 2002e000 00002000 00000000 00002000 RW X
    CTOMRAM 2007f000 00000800 00000000 00000800 R X
    MTOCRAM 2007f800 00000800 00000000 00000800 RW X


    段分配映射

    运行 origin load origin length init length atts members
    ------ ------ ------ ------ ---- ----
    002c0000 002c0000 00000380 00000380 r-x
    002c0000 002c0000 00000352 00000352 r-x .text
    002c0358 002c0358 00000028 00000028 r-.cinit
    20000000 20000000 00000118 00000000 Rw-
    20000000 20000000 00000100 00000000 rw-.stack
    20000100 20000100 00000018 00000000 rw-.data


    部分分配映射

    输出 属性/
    分区页面来源 长度 输入段
    ---- -------- ------ --------
    .text 0 002c0000 00000352
    002c0000 0000009c rtsv7M3_T_le_eabi.lib:memcpy_t2.obj (.text)
    002c009c 0000007a :memset_t2.obj (.text)
    002c0116 00000002 :mpu_init.obj (.text)
    002c0118 00000070 :autoinit.obj (.text)
    002c0188 0000006a :copy_decompress_rle.obj (.text)
    002c01f2 00000002 :startup.obj (.text)
    002c01f4 00000054 :exit.obj (.text)
    002c0248 0000004c :cpy_tbl.obj (.text)
    002294 c000000040 :boot.obj (.text)
    002c02d4 0000002c main.obj (.text:main)
    002c0300 00000018 rtsv7M3_T_le_eabi.lib:args_main.obj (.text)
    002c0318 00000014 :_lock.obj (.text)
    002c032c 0000000e main.obj (.text:JumpToAddress)
    002c033a 0000000e rtsv7M3_T_le_eabi.lib:copy_decompress_none.obj (.text:decompress:none)
    002c0348 00000006 :copy_decompress_rle.obj (.text:decompress:rle24)
    002c034e 00000004 :pre_init.obj (.text)

    .cinit 0 002c0358 00000028
    002c0358 00000017 (.cinit、.data.load)[加载映像、压缩= rle]
    002c036f 00000001 --hole --[填充= 0]
    002c0370 00000008 (__TI_handler_table)
    002c0378 00000008 (__TI_cinit_table)

    .data 0 20000100 00000018 未初始化
    20000100 0000000c rtsv7M3_T_le_eabi.lib:exit.obj (.data:$O1$$)
    2000010c 00000008 :_lock.obj (.data:$O1$$)
    20000114 00000004 :stkdepte_vars.obj (.data)

    堆栈 0 20000000 00000100 未初始化
    20000000 00000100 -孔--

    .TI.ramfunc
    * 0 20000000 00000000 未初始化

    GETBUFFER
    * 0 2007f000 00000000 DSECT

    GETWRITEIDX
    * 0 2007f000 00000000 DSECT

    PUTREADIDX
    * 0 2007f000 00000000 DSECT

    模块总结

    模块 代码 ro 数据 RW 数据
    ---- ------ ----
    .
    main.obj 58. 0 0
    +-++---------------- +--- +--- +--- +
    总计: 58. 0 0

    /opt/ti/ccsv6/tools/compiler/arm_15.12.3.LTS/lib/rtsv7M3_T_le_eabi.lib
    memcpy_t2.obj 156 0 0
    memset_t2.obj 122 0 0
    autoinit.obj 112 0 0
    copy_decompress_rle.obj 112 0 0
    exit.obj 84 0 12.
    cpy_tbl.obj 76. 0 0
    boot.obj 64 0 0
    _lock.obj 20. 0 8.
    args_main.obj 24 0 0
    copy_decompress_none.obj 14. 0 0
    pre_init.obj 4. 0 0
    stkdept_vars.obj 0 0 4.
    MPU_init.obj 2. 0 0
    startup.obj 2. 0 0
    +-++---------------- +--- +--- +--- +
    总计: 792 0 24

    堆栈: 0 0 256
    链接器生成: 0 39. 0
    +-++---------------- +--- +--- +--- +
    总计: 850 39. 280


    链接器生成的复制表

    _TI_cinit_table @ 002c0378记录:1、大小/记录:8、表大小:8
    .data:load addr=002c0358、load size=00000017字节、run addr=20000100、run size=00000018字节、compression=rle


    链接器生成的处理程序表

    _TI_handler_table @ 002c0370记录:2、大小/记录:4、表大小:8
    索引:0、处理程序:_TI_decompress_rle24
    索引:1、处理程序:_TI_decompress_none


    全局符号:按名称按字母顺序排序

    地址名称
    ---- ----
    002c01f5 C$$$EXIT
    20000000 RamfuncsLoadEnd
    00000000 RamfuncsLoadSize
    20000000 RamfuncsLoadStart
    20000000 RamfuncsRunEnd
    00000000 RamfuncsRunSize
    20000000 RamfuncsRunStart
    UNDEFED SHT$$INIT_RAGE$$Base
    UNDEFED SHT$$INIT_ARRAGE$$LIMIT
    20000100 __STACK_END
    00000100 __STACK_SIZE
    20000100 __STACK_TOP
    002c0378 __TI_CINIT_Base
    002c0380 __TI_CINIT_LIMIT
    002c0370 __TI_Handler_Table_Base
    002c0378 __TI_Handler_Table_Limit
    002c0119 __TI_auto_init
    20000100 __TI_clean_ptr
    002c033b __TI_decompress_none
    002c0349 __TI_decompress_rle24
    20000104 __TI_dptors _ptr
    20000108 __TI_ENABLE_EXIT_PROFILE_OUTPUT
    FFFFFFFF __TI_pprof_out_hndl
    FFFFFFFF __TI_PRof _DATA_SIZE
    FFFFFFFF _TI_PROD_DATA_START
    002c0358 __TI_static_BASE__
    002c009d __aeabi_memclr
    002c009d __aeabi_memclr4.
    002c009d __aeabi_memclr8.
    002c0001 __aeabi_memcpy
    002c0001 __aeabi_memcpy4.
    002c0001 __aeabi_memcpy8.
    002c009f __aeabi_memset
    002c009f __aeabi_memset4.
    002c009f __aeabi_memset8.
    FFFFFFFF __binIT__
    FFFFFFFF __c_args__
    002c0117 __mpu_init
    20000000 __stack
    002c0301 _args_main
    002c0295 _c_int00
    2000010c _lock
    002c0327 _nop
    002c031f _register_lock
    002c0319 _register_unlock
    002c01f3 _system_post_cinit
    002c034f _system_pre_init
    20000110_unlock
    002c01f9中止
    FFFFFFFF 二进制文件
    002c0249 copy_in
    002c0201退出
    002c02d5 main
    20000114 main_func_sp
    002c0001 memcpy
    002c00a5内存集


    全局符号:按符号地址排序

    地址名称
    ---- ----
    00000000 RamfuncsLoadSize
    00000000 RamfuncsRunSize
    00000100 __STACK_SIZE
    002c0001 __aeabi_memcpy
    002c0001 __aeabi_memcpy4.
    002c0001 __aeabi_memcpy8.
    002c0001 memcpy
    002c009d __aeabi_memclr
    002c009d __aeabi_memclr4.
    002c009d __aeabi_memclr8.
    002c009f __aeabi_memset
    002c009f __aeabi_memset4.
    002c009f __aeabi_memset8.
    002c00a5内存集
    002c0117 __mpu_init
    002c0119 __TI_auto_init
    002c01f3 _system_post_cinit
    002c01f5 C$$$EXIT
    002c01f9中止
    002c0201退出
    002c0249 copy_in
    002c0295 _c_int00
    002c02d5 main
    002c0301 _args_main
    002c0319 _register_unlock
    002c031f _register_lock
    002c0327 _nop
    002c033b __TI_decompress_none
    002c0349 __TI_decompress_rle24
    002c034f _system_pre_init
    002c0358 __TI_static_BASE__
    002c0370 __TI_Handler_Table_Base
    002c0378 __TI_CINIT_Base
    002c0378 __TI_Handler_Table_Limit
    002c0380 __TI_CINIT_LIMIT
    20000000 RamfuncsLoadEnd
    20000000 RamfuncsLoadStart
    20000000 RamfuncsRunEnd
    20000000 RamfuncsRunStart
    20000000 __stack
    20000100 __STACK_END
    20000100 __STACK_TOP
    20000100 __TI_clean_ptr
    20000104 __TI_dptors _ptr
    20000108 __TI_ENABLE_EXIT_PROFILE_OUTPUT
    2000010c _lock
    20000110_unlock
    20000114 main_func_sp
    FFFFFFFF __TI_pprof_out_hndl
    FFFFFFFF __TI_PRof _DATA_SIZE
    FFFFFFFF _TI_PROD_DATA_START
    FFFFFFFF __binIT__
    FFFFFFFF __c_args__
    FFFFFFFF 二进制文件
    UNDEFED SHT$$INIT_RAGE$$Base
    UNDEFED SHT$$INIT_ARRAGE$$LIMIT

    [56个符号]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在引导至闪存模式下,引导结束时的 ROM 加载程序将分支至闪存入口点,即00200030。 只要应用程序的入口点(ResetISR)链接到0x00200030,应用程序就会启动。

    您可以按照以下步骤进行验证。

    1.>将应用程序加载到闪存中
    2.>在已拆分的地址0x00200030处放置一个断点
    3.>在 main()处放置一个断点
    4.>执行调试复位
    5.>运行
    6.>程序控制应该到达0x00200030处的断点、如果您再次运行、它将到达 main()。

    只要上述序列有效、M3就会在独立运行时在闪存中启动应用程序。

    您是否还想了解其他内容?

    最恰当的考虑
    Santosh Athuru
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢。
    这就是我为 M3引导加载程序准备的。
    现在我想运行另一个应用程序,在 M3引导加载程序 main()中跳转到另一个 M3程序。

    我应该如何处理第二个程序中的 RestISR。
    我希望这是有道理的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    瑞吉斯

    不应在第一个程序上加载第二个程序、但它应与第一个程序共存。 因此、您可以将代码重新链接到第一个程序未使用的任何闪存扇区、还应注意 RAM 的使用情况、以防第二个程序重新使用第一个程序已置于不同状态的任何 RAM。

    然后,在第一个程序的 main()中,您可以分支到硬编码地址,您可以在该地址中链接第二个程序。

    希望这对您有所帮助。


    此致
    Santosh Athuru
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    完全正确! 它们目前共存于闪存的不同部分。

    您能给我提供有关如何重新链接第二个应用程序的更多信息吗?
    我应该将第二个程序重新开始 ISR 指向哪里?
    在链接器命令文件中删除对其的引用会导致存储器锁定。


    Bootloader reISR = 0x00200030
    应用程序恢复 ISR =?????????

    谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    瑞吉斯
    客户应自行决定如何对应用的闪存进行分区。 您将必须修改第二个程序的链接器命令文件、以将所需的段指向第一个程序未使用的闪存扇区。

    此致
    Santosh Athuru
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Santosh、
    通过查看映射文件并查看"_c_int00"地址、我能够实现我需要的目标。
    我的引导加载程序在我的应用程序中分支到此地址、并按预期运行。

    如何控制_c_int00设置为什么地址?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    瑞吉斯
    我建议您使用另一个入口点、类似于 RESETISR 段(或进入本节的代码、在 TI 示例中、该入口点应位于 startup_ccs.c 中)。

    如下所示。 现在、您可以轻松控制 ResetISR 可以通过链接器命令文件加载到何处、而_c_int00可以是.text 段的一部分。 这样、您就可以更好地控制必须为入口点分配的位置数、并且可以将其固定。 例如:您的应用程序可以更改、因此_c_int00可以更改大小和位置、但 ResetISR 代码可以保持常量并保持在同一位置、因为它所做的只是分支到_c_int00。

    #pragma CODE_SECTION (ResetISR、".resettisr")
    无效
    ResetISR (空)

    //跳转到 CCS C 初始化例程。
    _asm (".global _c_int00\n"
    " _c_int00");



    希望这对您有所帮助。

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

    我无法成功地使用 ResetISR 将.resettisr 设置为固定地址。
    我确实将其添加到了我的链接器命令文件中、它似乎可以正常工作。

    应用程序链接器命令文件:

    部分

    BOOT > 0x002E000B

    l rtsv7M3_T_le_eabi.lib (.text)



    引导加载程序 main.c:
    main(){
    JumpToAddress (0x002E000B);


    这是可以接受的方法吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    瑞吉斯
    这是可以接受的、但如果您查看现有的 CCS 示例工程链接器命令文件、它会显示如何将 ResetISR 定向到存储器、已经完成了。 您只需按照相同的步骤操作。

    存储器

    /*闪存*/
    (笑声)
    (笑声)

    RESETISR (RX):origin = 0x00200030,length = 0x0008 //复位 ISR 映射到引导至闪存位置*/

    (笑声)
    (笑声)


    部分

    (笑声)
    (笑声)
    .resettisr:> RESETISR、align (8)
    (笑声)
    (笑声)


    上面的链接器命令文件允许.resettisr 段访问位于0x200030位置的 RESETISR 存储器。 您可以将存储器位置更改为所需的0x2E000A、例如、在链接器命令文件的存储器声明部分中、.resetisr 段将链接到0x2E000A。

    现在、在代码中、您声明一个用户 pragma、将 entry 函数放入.tisreseal 段中、如下所示。

    #pragma CODE_SECTION (ResetISR、".resettisr")
    无效
    ResetISR (空)

    //跳转到 CCS C 初始化例程。
    _asm (".global _c_int00\n"
    " _c_int00");


    这就是您必须正确做的所有事情?

    此致
    Santosh Athuru
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这正是我的工作方式。 唯一的区别是我包含 startup_ccs.c、它包含#pragma CODE_SECTION (ResetISR、".resettisr")。 我可以将其剪切到 main.c 中、看看会发生什么情况。 再次感谢。