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.

[参考译文] MSP430I2021:不能从引导模式跳转到应用程序

Guru**** 2589275 points
Other Parts Discussed in Thread: MSP430I2021, MSP430G2553, MSP-EM-DESIGN-CENTER, MSP430I2041

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/686464/msp430i2021-not-jumping-to-app-from-boot

器件型号:MSP430I2021
主题中讨论的其他器件: MSP430G2553MSP-EM-DESIGN-CENTERMSP430I2041

您好!

通过 MSP-FETFlash 仿真工具编程的启动代码和应用代码、发现不跳转到 App.found checkusm 验证为 true、应用程序复位矢量() 0xFbFE)正常。

已连接应用链接器(lnk430i2041.xcl)、启动链接器(lnk_msp430I20XX_UART_1KB_Boot.xcl)和应用程序的输出文件(emeter-app-i2021/txt)。 如需更多信息、请告诉我。

e2e.ti.com/.../8233.Files.7z

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

    您好!

    感谢您的发帖。 您能否提供有关您提到的资源(假设 是 SLAA600SLAA450)以及您遵循/完成的说明/步骤的更多背景信息? 我假设您正在尝试使用 G2xx 的示例进行 MSPBoot、但请记住、它与 i20xx 器件不同。 此外、您还没有提到您使用的 IDE、但根据链接器文件扩展名、您似乎正在使用 IAR。

    查看这两个链接器文件、它们很难读取、应该更好地组织起来、以便更轻松地进行调试。 我假设您将'lnk430i2041.xcl'链接器文件用于引导加载程序代码项目、将'lnk_msp430I20XX_UART_1KB_Boot.xcl'链接器文件用于应用程序代码项目。 是这样吗?

    您是否碰巧使用了'/MSPBootProjectCreator.pl 脚本?

    此致、

    James

    MSP 客户应用

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

    尊敬的 James:

    感谢您的快速响应。

    我参考了 SLAA600文档。 参考与 CCS 兼容的代码(MSPBoot_UART_G2553和 App2_MSPBoot_G2553_UART)。 引导代码(MSPBoot_UART_G255)在 IAR 中被移植到 MSP430i20XX。

    将 lnk430i2041.xcl 用于应用、将 lnk_msp430I20XX_UART_1KB_Boot.xcl 用于引导加载程序。

    我尚未使用'/MSPBootProjectCreator.pl 脚本。

    如果您需要任何其他信息、请告诉我。

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

    您好!

    感谢您提供更多详细信息。 首先、我强烈建议将这项工作分成两部分。 首先让 MSP430i2021上与 MSPBoot 相关的所有内容在 CCS 中工作、然后再尝试将任何内容移植到 IAR。 然后、根据需要处理移植。

    请首先按照 SLAA600中第4节"构建 MSPBoot "中的说明进行操作。 如您在第4.1.1节 MSPBootProjectCreator.pl 中所见、您需要下载并安装 Perl 才能运行脚本。 此外、如说明中所述、将 MSP430i2021的头文件和链接器文件复制到"Project_Creator"文件夹中(还提供了这些文件的文件路径)。

    C:\Downloads\MSPBoot_2_00_01\MSPBoot\Utilities\Project_Creator
    > MSPBootProjectCreator.pl
    
    
    
    
    
    
    
    msp430i2021.h -h MSPBootProjectCreator.pl
    
    
    MSPBootProjectCreator.pl v1.0 Texas Instruments Inc 2017选项 h 不明确(HDR、帮助)命令行参数中的错误 C:\Downloads\MSPBoot_2_00_01\MSPBoot\Utilities\Project_Creator > MSPBootProjectCreator.pl -HDR
    2017 -lnk_iDRC:0x430i2021_000_000_0001\MSP430iFlash
    
    Application:-DRC:0x430FR42012_000_000_0x430iFlash -0x430iFlash
    APP_CODE:0x8000-0xFBC1
    proxy_table:0xFBC2-0xFBFD
    APP_Reset_Vector:0xFBFE-0xFBFF
    引导加载程序区域:0xFC00-0xFFFF
    BOOT_CODE:0xFC00-0xFFD9
    SHARED_Vectors:0xFFDA-0xFFDF
    中断向量:0xFFE0-0xFFFD
    RESET_Vector:0xFFFE-0xFFFF
    
    C:\Downloads\MSPBoot_2_00_01\MSPBoot\Utilities\Project_Creator 

    使用这些指令、我能够快速地将生成的项目导入到 MSP430i2021的 CCS 中。 在 CCS 属性中查看了他们修改后的链接器文件后、我注意到与您使用的文件有多种不同(似乎适用于 MSP430G2553而不是 MSP430i2021)。

    完成所有这些操作后、请告诉我您是否遇到任何问题、以及这是否解决了您的问题。

    您是否有理由尝试移植到 IAR? 您的项目是否与电源监控或电能计量相关? 如果是、我建议使用我们的全新电能测量设计中心(MSP-EM-DESIGN-CENTER)工具、该工具具有 CCS 支持功能、比我们的传统能源库更易于使用!

    此致、

    James

    MSP 客户应用

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

    尊敬的 James:

    感谢您的回复。 我将遵循您的建议。 在此之前、正如您所说的、该项目与功率计量有关、并且即将完成。 我们正在进行固件升级。

    我在 IAR 中为 MSP430i2041创建了虚拟项目、并找到了正确跳转到应用程序。 现在、我们转向根本原因、在功率计中发现代理矢量表导致了问题。

    您能否告诉我如何为功耗计量代码创建代理矢量表?

     我附加了我们从 TI 网站下载的功率计代码。

    e2e.ti.com/.../Submeter-i2040-8k_5F00_DC_5F00_THD_5F00_AUTO_5F00_OSR_5F00_IAR5.5_5F00_customer.7z

    请向我提供您的意见、以便我可以继续。

    如果您需要更多详细信息、请告诉我。

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

    您好!

    感谢您提供更多详细信息。 您是否按照我的说明使用 Perl 生成 CCS 工程? 您是否看到了两个生成的项目(如上所示)、分别是"MSPBoot_I2021_UART_Single_img"、引导加载程序项目和"App_Simple_I2021_UART_Single_img"、应用程序代码项目? 我知道您正在使用 IAR、但在 CCS 中执行所有操作后、移植工作应该比确定您的问题是否与 MSPBoot 配置或移植错误有关更轻松。

    如果确实如此、则可以打开 MSPBoot 应用程序的矢量重定向文件、名为"TI_MSPBoot_Mgr_Vectors_I2021/c"(如下添加)。 第41行和第60行包含与添加系统中每个 ISR 的外部原型以及使用应用程序中使用的中断向量更新代理矢量表相关的"待办事项"注释。 《闪存器件中的第2.2.3节中断矢量》和《SLAA600中修改 TI_MSPBoot_Mgr_Vectors_xxxx.c》中的第4.1.1.3.6节详细介绍了应用程序代理矢量。

    TI_MSPBoot_Mgr_Vectors_I2021/c

    /********* //*
    
    使用 MSP430I2021的 MSPBoot 应用程序的矢量重定向文件*/*在2018年5月7日通过 MSPBootVecRedGen.pl 生成的文件*/*/*---------------
    */
    
    #include "msp430.h"
    #include 
    #include "TI_MSPBoot_Mgr_Vectors.h"
    
    //全局变量
    /*! 应用程序发送的强制引导模式的密码。 该变量是固定的
    位置,并且在 Boot and App 中应保持相同的功能和位置*/
    extern uint16_t passwd;
    
    /*! 状态和控制字节。 该变量是固定的
    在 Boot and App 中的位置和位置应保持相同的功能和位置*/
    extern uint8_t StatCtrl;
    
    /*********
    *
    **@简短强制启动模式
    *将状态和控制字节中的位置位以请求启动模式、在
    passwd 中写入密码*并强制 PUC 复位
    *启动将在 PUC 后开始执行并检测到强制启动模式
    *
    *@返回无
    /
    void TI_MSPBoot_JumpToBoot( void ){
    
    passwd = BSL_password; //发送密码
    StatCtrl |= BOOT_APP_REQ;//将标志设置为请求引导模式
    _disable_interrupt (); //禁用所有中断
    WDTCTL = WDT_MRST_0_064;//设置看门狗并等待到期
    while (1);
    }
    
    //
    // ProxyVectorTable 使用的外部 ISR 原型
    //按如下所示添加您自己的 ISR
    //
    // TODO:添加系统中每个 ISR 的外部原型
    extern __interrupt void Dummy_ISR (void);
    
    #ifdef shared_pi
    extern __interrupt TI_MSPBoot_COMM_ISR (void);//
    
    
    
    
    void ///entables
    
    ! 这是引导加载程序用来跳转到的"代理"中断表
    每个中断例程。
    它始终位于同一位置。
    它包含一个 BRA 指令(0x4030)、后跟每个指令的地址
    矢量例程。
    未实现的向量被移除(并且未使用的向量也可被移除)
    要保存闪存空间
    */
    //TODO:使用应用中使用的中断矢量进行更新、请参阅示例
    #pragma DATA_SECTION (ProxyVectorTable、".app_proxy_vector")
    #pragma RETAIN (ProVectorTable)
    const uint16_t ProxyorTable[]=
    {
    0x4030、(uint16_t)虚拟 ISR、 // app_proxy_vector (0)端口2
    0x4030、(uint16_t)虚拟 ISR、 // app_proxy_vector (1) Port1
    0x4030、(uint16_t)虚拟 ISR、 // app_proxy_vector (2) TIMER0_A1
    0x4030、(uint16_t)虚拟 ISR、 // app_proxy_vector (3) TIMER0_A0
    0x4030、(uint16_t)虚拟 ISR、 // app_proxy_vector (4) SD24
    0x4030、(uint16_t)虚拟 ISR、 // app_proxy_vector (5) USCI_B0
    0x4030、(uint16_t)虚拟 ISR、 // app_proxy_vector (6) USCI_A0
    0x4030、(uint16_t)虚拟 ISR、 // app_proxy_vector (7) WDT
    0x4030、(uint16_t)虚拟 ISR、 // app_proxy_vector (8) VMON
    0x4030、(uint16_t)虚拟 ISR、 // app_proxy_vector (9) Timer1_A1
    0x4030、(uint16_t)虚拟 ISR、 // app_proxy_vector (10) Timer1_A0
    0x4030、(uint16_t)虚拟 ISR、 // app_proxy_vector (11) NMI
    }; 

    接下来、您可以看到在应用项目的链接器文件'lnk_MSP430I2021_UART_1KB_Single_App.cmd'中定义了"app_proxy_vectors"大小和位置。

    在继续之前、请完成这些说明。 我还强烈建议您仔细阅读 SLAA600中的第4.1.1.3节修改生成的源代码。 如果您错过了这里的 TODO、可能无法执行。

    此致、

    James

    MSP 客户应用

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

    尊敬的 James:

    感谢您的回复。

    我尝试了您建议的任何操作。 我添加 了每个 ISR 的外部原型、并使用中断矢量更新代理矢量表。 请找到相同的屏幕截图。

    但它仍然不会跳转到应用程序、反之亦然。

    请检查随附的代码并提供您的反馈。 (在计量代码\Submeter i2040 8k_IAR5.5_TID_2021\emeter-app\emeter-main.c 中查找代理矢量表)

    e2e.ti.com/.../Metering-code.7z

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是一个很好的开始! 请在 SLAA600中搜索"待办事项"、并确保完成每个任务。

    此致、

    James

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

    尊敬的 James:

    我参考了 SLAA600并修改 了添加的 ISR 原型更新了"代理矢量表"。 仍然不能跳转到应用程序。 我无法找到为什么它不跳。 您能浏览随附的代码并指导我吗?

    如果您提出建议、这确实会非常有帮助、因此我可以继续。

    提前感谢。

    e2e.ti.com/.../3833.Metering-code.7z

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

    是否有上述问题的更新?
    我热切地等待你帮助解决他的问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我看了一下您的代码。 首先、我看不到引导项目。 在哪里可以找到它? 我在您的项目中搜索了"TI_MSPBoot_APPMGR_JUMPTOAPP ()"函数、类似于"MSPBoot_I2021_UART_Single_img"项目的'main.c'文件中的函数。 也许这就是您的代码不跳转到应用程序的原因。

    main.c

    /*
    \file main.c
    *
    *\brief Main routine for the bootloader for the MSP430 flash based devices
    *
    //
    *--copyright--bsd
    * Copyright (c) 2017,Texas Instruments Incorporated
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *--/copyrights-*/
    //
    include 文件
    //
    #include 
    #include "msp430.h"
    #include "TI_MSPBoot_Common.h"
    #include "TI_MSPBoot_CI.h"
    #include "TI_MSPBoot_AppMgr.h"
    #include "TI_MSPBoot_CI_PHYDL.h"
    
    //
    本地函数
    //
    内联静态时钟初始化(void);
    inline static HBOUNT (void
    
    )/inline void (void)
    *
    *@简要主函数
    *-初始化 MCU
    *-选择是运行应用程序还是引导加载程序
    *-如果是引导加载程序
    :* -初始化外设接口
    * -等待命令
    * -发送相应的响应
    *-如果应用:
    * -跳转至应用
    程序*
    @注意此函数后 USI 中断被启用
    *@返回无
    中断 /
    int main_boot( void ){
    
    //停止看门狗计时器以防止超时复位
    WDTCTL = WDTPW + WDTHOLD;
    
    /*
    *重要提示:
    *复位后执行时、MSPBoot 假定满足适当的条件。
    *请务必注意、在 VCC>=VCC (min)之前不得更改 DCO、
    *并且闪存编程/擦除操作需要至少2.2V 的电压。
    *对于速度较慢的应用程序,可以添加可选的软件延迟
    *建议使用电压斜升或外部电压监控器
    *
    *
    //__delay_cycles (10000);//取消注释此行并调整延迟数
    //根据应用电压斜坡进行循环
    //初始化 MCU
    hw_init();
    
    clock_init();
    
    //验证应用程序并在需要时跳转
    if (TI_MSPBoot_AppMgr_ValidateApp ()=true)
    TI_MSPBoot_APPMGR_JUMPTOAPP ();
    
    TI_MSPBoot_CI_Init(); //初始化通信接口
    
    #ifndef NDEBUG
    //TODO:定义调试接口(可选),请参阅 MSPBoot 示例
    //例如 LED 到信号引导加载程序执行
    #endif
    
    while (1)
    {
    //轮询新数据包的 PHY 和数据链路接口
    TI_MSPBoot_CI_PHYDL_Poll ();
    
    //如果检测到新的数据包,请处理它
    if (TI_MSPBoot_CI_Process ()= RET_jump 至应用)
    {
    //如果数据包指示跳转到应用程序
    TI_MSPBoot_AppMgr_JumpToApp();
    }
    #ifdef NDEBUG
    //每隔一次喂狗(间隔取决于 MCLK 频率)
    Watchdog_sfeed ();
    #endif
    }
    
    
    }
    
    /*********
    *
    *@brief 初始化 MSP430时钟
    *
    *@返回无
    ********* /
    内联静态空 Clock_init (void)
    {
    //TODO:设置时钟系统(特定于器件)、请参阅示例
    
    }
    
    
    /*********
    *
    *@简要初始化基本 MCU 硬件
    *
    *@返回无
    ********* /
    内联静态 void hw_init (void)
    {
    //TODO:设置硬件初始化(特定于器件)、请参阅示例
    
    } 

    此致、

    James

    MSP 客户应用

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

    尊敬的 James:

    感谢您的宝贵答复。 我将根据您的建议进行尝试、这是我上传引导和应用程序代码供您参考的时间。
    请查看并向我提供您的意见和建议。

    等待宝贵的回复。

    谢谢。

    e2e.ti.com/.../Boot-and-App-code.7z

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

    您是否已解决问题? 您提到您会尝试我的建议并继续进行此操作。 我相信您已经取得了良好的进展。

    此致、

    James

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

    尊敬的 James:

    我尝试了您的所有建议、无法解决问题。 因此、我附加了引导和应用程序代码(请参阅上面的对话)。

    请您检查并向我提供建议、以便我能够继续。

    提前感谢。

    此致、

    Ranjith

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

    您好 Ranjith、

    我的所有建议和反馈都直接取自 SLAA600中的说明 。 为了节省我们两个时间、我鼓励您仔细浏览这一宝贵资源。 同样、第4.1节介绍了如何开始使用。 我谨指出、您需要使用 Perl 脚本来生成 CCS 项目、这在第4.1.1.1节中有明确提及、但您尚未使用该脚本。 有许多事情必须更新、遗憾的是、我无法审查每一项更改。

    为 i20xx 生成 CCS 项目、然后将其与可用的 G2xx 项目进行比较(查找待办事项区域)。 使用 i20xx 特定代码更新 i20xx 项目、这样您就可以开始了。 然后、移植到 IAR。

    此致、

    James

    MSP 客户应用

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

    尊敬的 James:

    感谢您的回复。

    我使用应用程序代码(MSP430i20xx 的不同项目)测试了启动代码、并使其正常工作、就像它从启动正常跳转到应用程序一样 因此、在 emeter 中发现代理矢量表导致了此问题。 我不知道我在创建代理矢量表时犯了什么错误。 请参阅随附的代码、提供您的想法。

    等待宝贵的回复。

    提前感谢。

    此致、
    Ranjiith

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

    您好!

    [引用 USER="Ranjith Shanbhag"]我使用应用程序代码(MSP430i20xx 的不同项目)测试了启动代码,并使其正常工作,就像它从启动正常跳转到应用程序一样[/引用]

    如果您确认代码在另一个项目中正确地从引导跳转到应用程序、这是一个很好的开始。 如果您确定该项目中的所有内容都正常工作、请将其用作比较电表代码中的内容的参考。

    我知道您在代码中进行了大量的调试、但更难仔细查看。 我注意到的一件事是在'lnk_msp430I20XX_UART_1KB_Boot.xcl'链接器命令文件中。 查看 MSPBoot 示例中的链接器文件以及我在 CCS 中为 i20xx 生成的工程、我发现您缺少"-D_Appl_Start"。 同样、使用有效的 MSPBoot 项目、仔细浏览这些文件并确保所有内容都匹配。 此外、请确保您指向的是 IAR 项目中正确的链接器文件。

    lnk_msp430I20XX_UART_1KB_Boot.xcl

    /*------------------------------------------
    *版权所有(c) 2012、IAR Systems -保留所有权利。
    *
    *此源代码是 IAR Systems 的属性。 源代码只能
    *与 IAR Embedded Workbench 一起使用。
    允许以源代码和二进制形式*重新分发和使用
    *、无论是否修改*前提是满足以下条件:
    *
    -源代码的全部或部分重新分发必须保留
    *上述版权声明、本条件列表和下面的免责声明。
    *
    *-未经
    特定的事先书面许可,不得使用 IAR Systems 的名称来认可或推广从本软件衍生的产品*。
    *
    *本软件按"原样"提供、且作者拒绝对
    本软件的所有保证*、包括
    对*适销性和适用性的所有暗示保证。 在任何情况下,提交人都不应对
    任何特殊的、直接的、间接的、 或因
    使用、数据或利润损失而造成的任何后果性损害或任何损害*、无论是
    在*合同行为、疏忽或其他侵权行为中、
    均由*或与本软件的使用或性能相关。
    ******************************************************************************************************* *//*********
    
    //
    // MSP430G2553的 XLink 引导加载程序配置文件
    // 2014年2月10日通过 MSPBootLinkerGen.pl 生成的文件
    //
    
    
    
    /////////////////////////////////////////////////////////// MCU 闪存地址////////////////////////////////////////////////////////////////////////////////////////////////////////
    //
    //闪存起始地址:
    -D_FLASH_START=8000 /C000
    //闪存结束地址:始终为0xFFFF
    -D_FLASH_END=FFFF
    //闪存矢量起始地址:
    -D_FLASH_Vectors_start=FFE0
    //闪存复位矢量地址:始终为 FFFE
    -D_FLASH_RESET_Vector=FFFE
    
    
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    
    /* RAM 内存地址*/
    -D_RAM_Start=200 /* RAM 开始*/
    -D_RAM_END=3FF /* RAM 结束*/
    /*应用程序和引导加载程序之间共享的 RAM,必须保留*/
    -D_PASSWD=200 /*应用程序发送的强制引导模式的密码*/
    -D_StatCtrl+202 /*通信使用的状态和控制字节*/
    -D_CI_State_Machine=203 /* Comm 使用的状态机变量*/
    -D_CI_Callback_PTR=204 //指向 Comm 回调结构的指针*/
    /*用于引导加载程序或应用程序的未保留 RAM */
    -D_NONRESERTED_RAM_Start=208 //非保留 RAM */
    
    /*闪存地址*/
    //-D_appl_Start=8000 //C000 /*应用程序区域开始*/
    -D_appl_end=FBFF /*应用程序区域结束*/
    
    //为引导加载程序区域保留的闪存位置*/
    -D_Boot_Start=FC00 /*启动闪存*/
    -D_Boot_Reset=FFFE /*引导复位矢量*/
    -D_Boot_VectorTable=FFE0 /*引导矢量表*/
    -D_Boot_SharedCallbacks_Len=6 //16 //共享回调的长度(2个调用=4B (MSP430)或8B (msp430x)*/
    -D_Boot_SharedCallbacks=FFDA //FFD2 /*开始共享回调*/
    -D_Appl_Proxy_Vector_Start=FBC2 //FBE0 /*代理中断表*/
    /*应用领域的保留闪存位置*/
    -D_appl_Checksum =(_flash_start) //*应用的 CRC16
    -D_appl_Start_Memory=(_appl_Checksum + 2) /*应用领域*/
    -D_Appl_CRC_SIZE1=(_Appl_End-_Appl_Start_Memory+1) /*为 CRC 计算的较低存储器中的字节数*/
    
    -D_appl_Reset_Vector=(_Boot_Start-2)
    
    -D_BOOT_APPVECTOR=(FFDC-_Boot_SharedCallbacks_Len)
    
    
    //引导加载程序与应用程序共享的矢量/函数的字节大小
    // (即2个矢量 TI_vBoot_pi_Init 和 TI_vBoot_pi_Poll = 4个字节(MSP430)或8个字节(MSP320X))
    //-D_boot_apvertor_size=6
    //带有引导共享的矢量/函
    
    
    数的表的起始地址//-D_RAM_end=(_flash_start-=/vertise_boot_address=)/start_start_address/ boot_start_address=/start_start_address/ boot_address/ boot_address/ boot_sets/ boot_address/ boot_address/ boot_sets/ boot_sets/ vectors/ boot_endeds/ boot_address/ boot_address/
    
    -D_Boot_Info_Start=1000
    //引导使用的信息存储器区域的结束地址
    -D_Boot_Info_End=10BF
    //引导加载程序矢量表
    D__Boot_VectorTable=(_flash_vectors_start)
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    
    ///////////////////////////////////////////////////////////// 应用程序区域闪存地址////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //
    //应用程序校验和地址
    D-AppChecksum =_flash_start
    //-D_AppChecksum 8=(_flash_start+2)
    //应用程序起始地址(校验和之后)
    -D_App_Start=(_flash_start+2)
    //应用程序结束地址
    -D_App_End=(_Boot_Start-1)
    //应用程序复位矢量
    -D_App_Reset_Vector=(_App_End-1)
    //代理矢量表的起始地址
    -D_App_Proxy_Vector_Start=(_App_Reset_Vector-30)
    //代理矢量表的结束地址
    -D_App_Proxy_Vector_End=(_App_Reset_Vector-1)
    //由 CRC 计算的区域大小(App+ProxyTable)
    -D_CRC_SIZE =(_App_END-_App_Start+1)
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    
    ////////////////////////////////////////////////// 引导区域 RAM 地址////////////////////////////////////////////////////////////////////////////////////////////////
    //
    //启动 RAM 的起始地址
    -D_BOOT_RAM_START=_RAM_Start
    // RAM 密码的地址(2B)
    -D_RAM_PASSWORD_ADDR=_RAM_Start
    //状态和控制区域的地址(1B)
    -D_RAM_STATCTRL_ADDR=(_RAM_PASSWORD_ADDR+2)
    //状态机地址(1B)
    -D_RAM_CISM_ADDR=(_RAM_STATCTRL_ADDR+1)
    //回调结构的地址(2B)
    D_RAM_CICALBACK_ADDR=(_RAM_CISM_ADDR+1)
    //引导 RAM 的结束地址
    -D_BOOT_RAM_END=(_RAM_CICALBACK_ADDR+1)
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    
    //////////////////// 引导应用程序 RAM 地址(可被应用程序或引导覆盖)//////////////////
    //
    //堆栈大小
    -D_STACK_SIZE=50
    //堆大小
    -D_DATA16_HAP_SIZE=0
    //应用程序和引导使用的 RAM 的起始地址
    -D_shared_RAM_start=(_boot_RAM_end+1)
    //应用程序和引导使用的 RAM 的结束地址
    -D_SHARGE_RAM_END=_RAM_END
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    
    //--------------------------------------------------------
    //定义 CPU
    //
    
    -cmsp430
    
    //------
    //支持将函数放置在读取/写入存储器
    中//
    -qcode_i=code_ID
    
    //------------
    //读取/写入存储
    器//
    -Z (data) RAM_PASSWORD_RAM_PASSWORD_ADDR
    -Z (data) RAM_STATCTRL=_RAM_STATCTRL_ADDR
    -Z (data) RAM_CISM=_RAM_CISM_ADDR
    -Z (data) RAM_CICALBACK_=_RAM_SAMPLE-16 (data-_DATA_DATA_SYSRM-
    /_SAMPLE-16-/_DATA_DATA_DATA_DATA_SYSRM-/_DATA_DATA_SYSRM-/_DATA_DATA_DATA_SYSRM-/_DATA_DATA_DATA_DATA_DATA_SYSRM-
    
    
    
    
    
    //只读存储器
    //
    ------------------
    
    //--------------------------------------------------------
    //常量数据
    //
    -Z (const) boot_app_vectors=_boot_APPVECTOR -(_boot_APPVECTOR +_Boot_SharedCallbacks_Len-1)
    -Z (const) DATA16_C、DATA16_ID、TLS16_ID、DIFFInfo、CHECKSUM_Boot_FF----
    
    
    //代码
    //
    -Z (代码) CSTRT、ISR_code、CODE_ID=_Boot _Start-FFDB、_Boot_Info_Start-_Boot_Info_End
    -P (代码) code=_Boot _Start-FFDB、_Boot _Info_Start-_Boot _Info_End
    
    
    //---
    //中断矢量
    //
    -Z (const) boot_vector_table=_flash_vectors_start-_flash_end
    -Z (const) signature=FFDC-FFDF
    -Z (code) intvec=_flash_vectors_start-_flash_end
    -Z (code) reset=_flash_reset_vector-_flash_end 

    此致、

    James

    MSP 客户应用