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.

[参考译文] MSP430FR5969:为什么代码存储器的设置不匹配反汇编?

Guru**** 2578945 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/613122/msp430fr5969-why-begging-of-code-memory-doesn-t-match-disassembly

器件型号:MSP430FR5969

数据表显示主代码存储器空间从0x4400开始。

当我查看反汇编时、我看到了我的 ISR 代码段。  这将以我的 Timer2_A0 ISR 结束、该 ISR 只会切换 LED。  以下是指以下内容的反汇编代码:

TIMER2_A0 ():
00464A:E2F2 0223 XOR.B #8、&Port_3_4_P4OUT
302}
00464e:1300 RETI
004650:0000 布拉 @PC
004652:02B9 0000 SubA #0x20000、R9
004656:088C 0001 MOVA #0x80001、R12
00465a:4650 0000 MOV.B 0x0000 (R6)、PC
00465e:1C00 .word 0x0000
004660:0000 布拉 @PC
004662:FFFF FFFF AND。B @R15+、0xFFFF (R15)
004666:FFFF FFFF AND。B @R15+、0xFFFF (R15)
00466A:FFFF FFFF AND。B @R15+、0xFFFF (R15)
00466e:FFFF FFFF AND。B @R15+、0xFFFF (R15)
004672:FFFF FFFF 和.B @R15+、0xFFFF (R15) 

当我使用调试窗口并单击 main()时,我看到我的主程序从0x10234地址开始。  如果 PC 从0x4400启动、如何到达0x10234?  我看不到将我转到那里的跳转指令。  我只是对程序在加电后是如何执行的有点困惑。  对于此器件、在加电/复位时 PC 的起始值似乎为0x4400。  

我提出这一问题是因为我正在尝试实现 BSL、并且希望更好地了解代码执行过程。  有人能否详细说明一下这里有关从复位执行代码的情况、以及为什么代码似乎在 FRAM 代码空间存储器中拆分?  

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

    0x4400是可访问主代码闪存的第一个地址。 但是、这不是 CPU 启动的位置。 用户指南的1.2.1节说明:

    程序计数器(PC)加载引导代码地址、引导代码执行从该地址开始
    地址。 有关引导代码的更多信息、请参阅第1.10节。 完成时启动
    代码、PC 被载入包含在复位位置(0FFFEh)的地址。

    上电之前、电源电压过低、因此即使是"正常"上电也会被视为掉电中断(SVSHIFG;请参阅表6-4)。

    编译器将自身启动代码(最终调用 main())的地址放入复位矢量中。

    "实现 BSL"是什么意思? FR5969的 BSL 位于 ROM 中、无法更改。 请参阅《FR5xx/FR6xx BSL 用户指南》(SLAU550)的第5章。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正确。 我的意思是在我的系统中实施...也许"使用"一词更清晰。 那么、引导代码是我在0x4400看到的吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    引导代码位于 MCU 的 ROM 中。 您的固件在地址0x4400处的内容是编译器决定放置在该地址的内容。