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.

[参考译文] CCS/MSP430F169:使用自定义链接器命令文件进行调试

Guru**** 2524550 points
Other Parts Discussed in Thread: MSP430FR4133

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/866982/ccs-msp430f169-debugging-with-custom-linker-command-file

器件型号:MSP430F169
主题中讨论的其他器件:MSP430FR4133

工具/软件:Code Composer Studio

您好!

我要编写的应用使用自定义链接器命令文件、该文件将复位和中断矢量移动到0xD7E0、因为我有一个将占用闪存底部的自定义引导加载程序。 当我尝试调试应用程序时、它找不到主符号。 默认情况下、似乎跳转至复位矢量的0xFFFE、我找不到如何更改它。 如何告知调试器跳转到我的自定义复位矢量(位于0xD7FE)? 请注意、我使用的是 CCS v5.5。

谢谢、

Dan Closson

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

    Dan、您好!  

    我知道、无法修改复位矢量和中断矢量、因为它是由硬件设计的。 您只需修改复位矢量地址0xFFFE 中的内容、即代码的起始地址。 您可以从此地址启动引导加载程序。  

    谢谢、  

    Lixin  

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

    感谢您的回复 Lixin。 我已经针对不同的时间重映射了复位和中断矢量、根据我的理解、只需编辑链接器命令文件并指定闪存中的矢量地址位置即可完成。

    我有两个程序、一个引导加载程序在0xFFFE 处具有复位矢量(程序驻留在0xD800至0xFFFF)、另一个应用程序在0xDFFE 处具有复位矢量(程序驻留在0x1100至0xDFFF)。 我可以正常运行和调试我的引导加载程序。 但是、当复位矢量重新映射到0xDFFE 时、我无法运行和调试应用程序。 作为一种权变措施、我一直在更改链接器命令文件、以便在我进行调试时将复位矢量放置在0xFFFE 上、然后当我释放程序时、我将复位矢量设置为0xDFFE 并与引导加载程序一起对其进行编程(一切正常)。 我的问题是、是否有一种机制允许我使用0xDFFE 上的复位矢量来调试我的应用程序?

    谢谢、

    Dan

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

    Dan、您好!  

    我尝试更改 MSP430FR4133目标板上链接器文件中的复位矢量(我目前没有 f169板、但我认为对于这个问题调试应该是相同的操作理论)。 但我无法传递链接、并且.out 文件未构建。  

    错误消息:  

    错误#10010:链接期间遇到错误;未构建"Reset_vector_change.out"

    "./lnk_msp430fr4133.cmd"、第123行:错误#10264:复位存储器范围与现有存储器范围 FRAM 重叠

    我更改了文件"lnk_msp430fr4133.cmd"、并对复位矢量进行了以下更改:  

    "复位           :origin = 0xFFFE,length = 0x0002" -> "reset           :origin = 0xDFFE、length = 0x0002"

    确认0xDFFE 是 MSP430FR4133中的有效存储器、代码存储器为0xC400 ~ 0xFFFF。  

    您能否分享如何更改链接器文件并传递链接以构建.out 文件?  

    谢谢、  

    Lixin  

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

    此外、我的测试代码非常简单- 它是 MSP430FR4133代码示例中的"msp430fr413x_1.c"。  

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

    Dan、您好!  

    我认为没有一种机制可以让您使用0xDFFE 上的复位矢量来调试您的应用程序。  

    由于引导加载程序 在0xFFFE 处具有复位矢量、 我认为您可以跳转到引导加载程序中的应用程序代码。 然后、您可以调试您的应用程序代码。  

    谢谢、  

    Lixin   

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

    Dan、您好!  

    我通过更改复位矢量成功构建了代码:将复位矢量更改为 0xDFFE、并更改了 FRAM 段长度

    • FRAM           :origin = 0xC400、length = 0x1B80

    但在对 MCU 进行编程后、代码无法正常运行。 它也不能认为这是因为 MCU 硬件不认为0xDFFE 是有效的复位矢量。  

    您能否与您分享您的经验,如上所述,如何做? "我已经多次重映射复位和中断矢量、根据我的理解、只需编辑链接器命令文件并指定闪存中的矢量地址位置即可完成此操作。"

    谢谢、  

    Lixin  

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

    您好、Lixin、

    我要附加两个链接器命令文件。 一个用于引导加载程序、该引导加载程序将闪存映射到0xD800、长度为0x27E0。 复位矢量位于0xFFFE (预期位置)、因此我可以调试引导加载程序。 第二个文件是应用程序的链接器命令文件。 它将闪存映射到长度为0xC6E0的0x1100。 复位矢量位于0xD7FE。 如果没有固件更新、引导加载程序将跳转至0xD7FE、主应用程序将运行。 不过、这种方法可以正常工作、当我想要调试主应用程序时、我必须修改链接器命令文件以将复位矢量放置在0xFFFE、否则我无法调试应用程序。 这是我原始帖子的预期目的、是查看社区是否有更好的方法来调试重映射了复位矢量的应用。 我知道这是其他 ARM 微控制器可以实现的、但 MSP430似乎无法实现这一点? 我可能弄错了。

    谢谢、

    Dan C.

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

    我在附加文件时遇到问题、因此这里是您感兴趣的部分。

    引导加载程序链接器命令文件

    / /
    /*指定系统内存映射*/
    / /

    存储器

    SFR:origin = 0x0000、length = 0x0010
    外设_8位:origin = 0x0010、length = 0x00F0
    peripherals_16BIT:origin = 0x0100、length = 0x0100
    RAM:origin = 0x0200,length = 0x0800
    INFOA:origin = 0x1080、length = 0x0080
    INFOB:origin = 0x1000、length = 0x0080
    闪存:origin = 0xD800,length = 0x27E0
    INT00:origin = 0xFFE0、length = 0x0002
    INT01:origin = 0xFFE2,length = 0x0002
    INT02:origin = 0xFFE4,length = 0x0002
    INT03:origin = 0xFFE6,length = 0x0002
    INT04:origin = 0xFFE8、length = 0x0002
    INT05:origin = 0xFFEA,length = 0x0002
    INT06:origin = 0xFFEC,length = 0x0002
    INT07:origin = 0xFFEE,length = 0x0002
    INT08:origin = 0xFFF0,length = 0x0002
    INT09:origin = 0xFFF2,length = 0x0002
    INT10:origin = 0xFFF4,length = 0x0002
    INT11:origin = 0xFFF6、length = 0x0002
    INT12:origin = 0xFFF8,length = 0x0002
    INT13:origin = 0xFFFA,length = 0x0002
    INT14:origin = 0xFFFC,length = 0x0002
    复位:origin = 0xFFFE,length = 0x0002

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

    / /
    /*指定系统内存映射*/
    / /

    存储器

    SFR:origin = 0x0000、length = 0x0010
    外设_8位:origin = 0x0010、length = 0x00F0
    peripherals_16BIT:origin = 0x0100、length = 0x0100
    RAM:origin = 0x0200,length = 0x0800
    INFOA:origin = 0x1080、length = 0x0080
    INFOB:origin = 0x1000、length = 0x0080
    闪存:origin = 0x1100,length = 0xC6E0
    INT00:origin = 0xD7E0,length = 0x0002
    INT01:origin = 0xD7E2,length = 0x0002
    INT02:origin = 0xD7E4,length = 0x0002
    INT03:origin = 0xD7E6,length = 0x0002
    INT04:origin = 0xD7E8,length = 0x0002
    INT05:origin = 0xD7EA,length = 0x0002
    INT06:origin = 0xD7EC,length = 0x0002
    INT07:origin = 0xD7EE,length = 0x0002
    INT08:origin = 0xD7F0,length = 0x0002
    INT09:origin = 0xD7F2,length = 0x0002
    INT10:origin = 0xD7F4,length = 0x0002
    INT11:origin = 0xD7F6,length = 0x0002
    INT12:origin = 0xD7F8,length = 0x0002
    INT13:origin = 0xD7FA,length = 0x0002
    INT14:origin = 0xD7FC,length = 0x0002
    复位:origin = 0xD7FE,length = 0x0002

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

    Dan、您好!  

    您是否参考了 slaa600 (http://www.ti.com/lit/an/slaa600d/slaa600d.pdf)的应用报告来开发自定义引导加载程序和应用程序代码? 如果是、则概念是无法调试应用程序代码、因为复位矢量和中断表在应用程序代码项目中重新映射、生成的.txt 文件通过预编程到 MCU 的引导加载程序下载到 MCU。  

    在 slaa600文档的自定义引导加载程序中、在跳转到应用程序代码起始地址之前、中断表由引导加载程序复制到0xFFE0~0xFFFC。 您可以参阅下图(从 slaa600复制)以进行中断矢量重定向。  

    如果要调试应用程序代码、必须将链接器命令文件更改为默认文件、以便复位矢量和中断表正常。 调试完成后、您需要更改回映射的链接器命令文件以生成.txt、以便使用自定义的引导加载程序。  

    谢谢、  

    Lixin