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/MSP430FR5994:CCS/MSP430FR5994

Guru**** 2542530 points
Other Parts Discussed in Thread: MSP430FR5994

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/910755/ccs-msp430fr5994-ccs-msp430fr5994

器件型号:MSP430FR5994

工具/软件:Code Composer Studio

我已启用 MPU 存储器保护、链接器会报告这些错误;

未定义的首次引用
符号
------ --------
MPUSEG /home/ckeller/ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/lib/rts430x_lc_rd_eabi.lib
_mpusam /home/ckeller/ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/lib/rts430x_lc_rd_eabi.lib
_mpuseg /home/ckeller/ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/lib/rts430x_lc_rd_eabi.lib

错误:未解析的符号仍然存在

什么 lib 路径包含这些符号?

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

    好的、我得到这些值在链接器文件中、如所示;

    4.3.4 FRAM 存储器保护单元的初始化链接器支持 FRAM 存储器保护单元(MPU)的初始化。 链接器使用引导例程、该例程根据特定符号的定义执行 MPU 初始化。 默认情况下用于不同器件的 TI 提供的链接器命令文件定义了必要的符号、以便自动进行 MPU 初始化。 代码段和数据段会自动获得正确的访问权限。 如果要手动调整 MPU 的初始化方式、可以修改链接器命令文件中的__mpuseg 和__mpusam 定义。 当这两个符号被定义时、使用 MPU 专用引导例程、并且它根据这些值设置 MPUSEG 和 MPUSAM 寄存器的值。 如果不希望初始化 MPU、可以从链接器命令文件中删除这些定义。

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

    Craig、

    链接器决定在链接中包含_mpu_init()例程(如果看到:

      _MPU_ENABLE

      __mpusam &&__mpuseg

    _mpusam/_mpuseg 是在更新之前、较旧的 MPU 初始支持实现中的一种、用于更好地支持更多器件。

    您只需更新 Project_properties->General_>MPU 选项卡中的 CCS MPU 对话框并选中 "Enable Memory Protection Unit (MPU)"复选框、或者添加带有-D_MPU_enable 的预定义符号(这是选中该复选框无论如何都会执行的操作)。 这应该适用于大多数新的链接器 cmd 文件。  

    如果您仍然遇到链接器错误、请提供有关 CCS 工程、MSP 器件、编译器选项等的更多信息

    谢谢
    Greg

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

    Greg、

    非常感谢您的回复。  我已选择启用存储器保护单元(MPU)。 我在启用 MPU 时开始遇到这些错误。 我正在使用  

    Code Composer Studio

    版本:10.0.00010

    (C)版权所有德州仪器(TI)、2016年。 保留所有权利。

    链接器命令文件中添加了该链接器

    /*********
    *
    *版权所有(C) 2012 - 2020 Texas Instruments Incorporated - http://www.ti.com/
    *
    *以源代码和二进制形式重新分发和使用、有无
    *如果满足以下条件、则允许进行修改
    符合*:
    *
    *源代码的重新分发必须保留上述版权
    *注意、此条件列表和以下免责声明。
    *
    *二进制形式的再发行必须复制上述版权
    *请注意、中的此条件列表和以下免责声明
    *随提供的文档和/或其他材料
    *分发。
    *
    *德州仪器公司的名称和名称均不相同
    *其贡献者可用于认可或推广衍生产品
    *未经特定的事先书面许可。
    *
    *本软件由版权所有者和贡献者提供
    *"按原样"以及任何明示或暗示的保证、包括但不包括
    *仅限于对适销性和适用性的暗示保证
    *一项特定目的不予承认。 在任何情况下、版权均不得
    *所有者或贡献者应对任何直接、间接、偶然或
    *特殊、惩戒性或后果性损害(包括但不包括)
    *仅限于采购替代货物或服务;丧失使用、
    *数据或利润;或业务中断)
    *责任理论、无论是合同责任、严格责任还是侵权行为
    *(包括疏忽或其他)因使用而以任何方式产生
    *、即使被告知可能会发生此类损坏。
    *
    *德州仪器 MSP430FR5994的默认链接器命令文件
    *
    (小部分 /

    /********* /
    /**//
    /*用法:lnk430 -o -m lnk.cmd */
    /* cl430 z -o -m lnk.cmd */
    /**//
    /*------------------ *
    /*这些链接器选项仅用于命令行链接。 对于 IDE 链接、*/
    /*您应该在 Project Properties 中设置链接器选项*/
    /*-c link using C conventions */
    /*-stack 0x0100软件栈大小*
    /*-heap 0x0100堆区域大小*/
    /**//
    /*------------------ *
    /* 1.209 */
    /*------------------ *

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

    存储器

    TINYRAM:origin = 0xA、length = 0x16
    BSL:origin = 0x1000、length = 0x800
    INFOD:origin = 0x1800,length = 0x80
    INFOC:origin = 0x1880、length = 0x80
    INFOB:origin = 0x1900,length = 0x80
    INFOA:origin = 0x1980、length = 0x80
    RAM:origin = 0x1C00,length = 0x1000
    FRAM:origin = 0x4000,length = 0xBF80
    FRAM2:origin = 0x10000、length = 0x34000
    JTAGSIGNATURE:origin = 0xFF80,length = 0x0004,fill = 0xFFFF
    BSLSIGNATURE:origin = 0xFF84,length = 0x0004,fill = 0xFFFF
    IPESIGNATURE:origin = 0xFF88,length = 0x0008,fill = 0xFFFF
    INT00:origin = 0xFF90,length = 0x0002
    INT01:origin = 0xFF92,length = 0x0002
    INT02:origin = 0xFF94,length = 0x0002
    INT03:origin = 0xFF96,length = 0x0002
    INT04:origin = 0xFF98,length = 0x0002
    INT05:origin = 0xFF9A,length = 0x0002
    INT06:origin = 0xFF9C,length = 0x0002
    INT07:origin = 0xFF9E,length = 0x0002
    INT08:origin = 0xFFA0、length = 0x0002
    INT09:origin = 0xFFA2、length = 0x0002
    INT10:origin = 0xFFA4、length = 0x0002
    INT11:origin = 0xFFA6、length = 0x0002
    INT12:origin = 0xFFFA8、length = 0x0002
    INT13:origin = 0xFFAA、length = 0x0002
    INT14:origin = 0xFFAC,length = 0x0002
    INT15:origin = 0xFFAE、length = 0x0002
    Int16:origin = 0xFFB0,length = 0x0002
    INT17:origin = 0xFFB2、length = 0x0002
    INT18:origin = 0xFFB4,length = 0x0002
    INT19:origin = 0xFFB6、length = 0x0002
    INT20:origin = 0xFFB8、length = 0x0002
    INT21:origin = 0xFFBA,length = 0x0002
    INT22:origin = 0xFFBC,length = 0x0002
    INT23:origin = 0xFFBE,length = 0x0002
    INT24:origin = 0xFFC0,length = 0x0002
    INT25:origin = 0xFFC2,length = 0x0002
    INT26:origin = 0xFFC4,length = 0x0002
    INT27:origin = 0xFFC6,length = 0x0002
    INT28:origin = 0xFFC8,length = 0x0002
    INT29:origin = 0xFFCA,length = 0x0002
    INT30:origin = 0xFFCC,length = 0x0002
    INT31:origin = 0xFFCE、length = 0x0002
    int32:origin = 0xFFD0,length = 0x0002
    INT33:origin = 0xFFD2,length = 0x0002
    INT34:origin = 0xFFD4,length = 0x0002
    INT35:origin = 0xFFD6、length = 0x0002
    INT36:origin = 0xFFD8,length = 0x0002
    INT37:origin = 0xFFDA,length = 0x0002
    INT38:origin = 0xFFDC,length = 0x0002
    INT39:origin = 0xFFDE,length = 0x0002
    INT40:origin = 0xFFE0,length = 0x0002
    INT41:origin = 0xFFE2,length = 0x0002
    INT42:origin = 0xFFE4,length = 0x0002
    INT43:origin = 0xFFE6,length = 0x0002
    INT44:origin = 0xFFE8、length = 0x0002
    INT45:origin = 0xFFEA,length = 0x0002
    INT46:origin = 0xFFEC,length = 0x0002
    INT47:origin = 0xFFEE,length = 0x0002
    INT48:origin = 0xFFF0,length = 0x0002
    INT49:origin = 0xFFF2,length = 0x0002
    INT50:origin = 0xFFF4,length = 0x0002
    INT51:origin = 0xFFF6、length = 0x0002
    INT52:origin = 0xFFF8,length = 0x0002
    INT53:origin = 0xFFFA,length = 0x0002
    INT54:origin = 0xFFFC,length = 0x0002
    复位:origin = 0xFFFE,length = 0x0002

    / /
    /*指定 LEA 存储器映射*/
    / /

    #define LEASTACK_SIZE 0x138

    存储器

    LEARAM:origin = 0x2C00,length = 0x1000 - LEASTACK_SIZE
    LEASTACK:origin = 0x3C00 - LEASTACK_SIZE、length = LEASTACK_SIZE

    / /
    /*指定段分配到内存中*/
    / /

    部分

    .text:EraseMe > 0x43F00 /*这是内存顶部的擦除函数*/

    组(RW_IPE)

    组(READ_WRITE_MEMORY)

    .TI.persistent:{}/* for #pragma PERSISTENT */
    .cio:{}//* C I/O 缓冲器*/
    .sysmem:{}/*动态内存分配区域*/
    } PALIGN (0x0400)、RUN_START (fram_rw_start)

    组(IPENCAPSULATED_MEMORY)

    .ipestruct:{}/* IPE 数据结构*/
    .ipe:{}//* IPE */
    .ipe_const:{}/* IPE 受保护常量*/
    .ipe:_isr:{}/* ipe isr */
    } PALIGN (0x0400)、RUN_START (fram_IPE_START) RUN_END (fram_IPE_END) RUN_END (fram_Rx_START)

    }> 0x4000

    .cinit:{}> FRAM /*初始化表*/
    binit:{}> FRAM /*启动时初始化表*/
    .pinit:{}> FRAM /* C++构造函数表*/
    init_array:{}> FRAM /* C++构造函数表*/
    .mspabi.exidx:{}> FRAM /* C++构造函数表*/
    .mspabi.extab:{}> FRAM /* C++构造函数表*/
    .text:_ISR:{}> FRAM //代码 ISR */

    #ifndef __large_data_model__
    .const:{}> FRAM /*常量数据*/
    其他
    .const:{}>> FRAM | FRAM2/*常量数据*/
    #endif

    #ifndef __large_code_model__
    .text:{}> FRAM /*代码*/
    其他
    .text:{}>> FRAM2 | FRAM /*代码*/
    #endif

    #ifdef __TI_Compiler_version__
    #if __TI_Compiler_version__>=15009000
    #ifndef __large_code_model__
    .TI.ramfunc:{} load=FRAM、run=RAM、table (BINIT)
    其他
    .TI.ramfunc:{} load=FRAM | FRAM2、run=RAM、table (BINIT)
    #endif
    #endif
    #endif

    jtagsignature:{}> JTAGSIGNATURE
    bslsignature:{}> BSLSIGNATURE

    组(signature_SHAREDMEMORY)

    ipesignature:{}/* IPE Signature *//
    .jtagpassword:{}/* JTAG 密码*/
    }> IPESIGNATURE


    .bss:{}> RAM /*全局和静态变量*/
    .data:{}>RAM /*全局和静态变量*/
    .TI.noinit:{}>RAM /* for #pragma noinit */
    .stack:{}> RAM (高)/*软件系统堆栈*/

    tinyram:{}> TINYRAM /* Tiny RAM */

    /* MSP430信息内存段*/
    infoA:type = NOINIT{}> INFOA
    infoB:type = NOINIT{}> INFOB
    infoC:type = NOINIT{}> INFOC
    infoD:type = NOINIT{}> infOD


    leaRAM:{}> LEARAM /* LEA RAM */
    leaStack:{}> LEASTACK (HIGH)/* LEA STACK */

    /* MSP430中断矢量*/

    .int00:{}>int00
    .int01:{}>INT01
    .int02:{}>INT02
    .int03:{}>INT03
    .int04:{}>INT04
    .int05:{}>INT05
    .int06:{}>INT06
    .int07:{}>INT07
    .int08:{}>INT08
    .int09:{}>INT09
    .int10:{}>int10
    .int11:{}>int11
    .int12:{}>int12
    .int13:{}>int13
    .int14:{}>int14
    .int15:{}>INT15
    .int16:{}>int16
    .int17:{}>INT17
    LEA:{*(.int18)}> INT18 type = VECT_init
    port8:{*(.int19 )}> INT19 type = VECT_init
    PORT7:{*(.int20 )}> INT20 type = VECT_INIT
    EUSCI_B3:{*(.int21)}> INT21类型= VECT_INIT
    EUSCI_B2:{*(.int22)}> INT22类型= VECT_INIT
    EUSCI_B1:{*(.int23)}> INT23类型= VECT_INIT
    EUSCI_A3:{*(.int24)}> INT24 type = VECT_init
    EUSCI_A2:{*(.int25)}> INT25类型= VECT_INIT
    PORT6:{*(.int26 )}> INT26 type = VECT_INIT
    PORT5:{*(.int27)}> INT27 type = VECT_INIT
    TIMER4_A1:{*(.int28 )}> INT28 type = VECT_INIT
    TIMER4_A0:{*(.int29)}> INT29 type = VECT_INIT
    AES256:{*(.int30)}> INT30类型= VECT_INIT
    RTC_C:{*(.int31)}> INT31类型= VECT_INIT
    Port4:{*(.int32 )}> int32 type = VECT_init
    PORT3:{*(.int33 )}> INT33 TYPE = VECT_INIT
    TIMER3_A1:{*(.int34 )}> INT34 TYPE = VECT_INIT
    TIMER3_A0:{*(.int35 )}> INT35 TYPE = VECT_INIT
    端口2:{*(.int36 )}> INT36类型= VECT_INIT
    TIMER2_A1:{*(.int37 )}> INT37 TYPE = VECT_INIT
    TIMER2_A0:{*(.int38 )}> INT38 TYPE = VECT_INIT
    Port1:{*(.int39 )}> INT39 TYPE = VECT_INIT
    Timer1_A1:{*(.int40)}> INT40 type = VECT_init
    Timer1_A0:{*(.int41)}> INT41 type = VECT_init
    DMA:{*(.int42 )}> INT42 type = VECT_init
    EUSCI_A1:{*(.int43)}> INT43类型= VECT_INIT
    TIMER0_A1:{*(.int44 )}> INT44 TYPE = VECT_INIT
    TIMER0_A0:{*(.int45)}> INT45 type = VECT_INIT
    ADC12_B:{*(.int46)}> INT46 type = VECT_init
    EUSCI_B0:{*(.int47)}> INT47类型= VECT_INIT
    EUSCI_A0:{*(.int48)}> INT48类型= VECT_INIT
    WDT:{*(.int49 )}> INT49类型= VECT_INIT
    TIMER0_B1:{*(.int50 )}> INT50 TYPE = VECT_INIT
    TIMER0_B0:{*(.int51 )}> INT51 TYPE = VECT_INIT
    Comp_E:{*(.int52)}> INT52类型= VECT_INIT
    UNMI:{*(.int53 )}> INT53 TYPE = VECT_INIT
    SYSNMI:{*(.int54 )}> INT54 TYPE = VECT_INIT
    .reset:{}> reset /* MSP430 reset vector */


    / /
    /* MPU/IPE 特定内存段定义*/
    / /

    #ifdef _IPE_ENABLE
    #define IPE_MPUIPLOCK 0x0080
    #define IPE_MPUIPENA 0x0040
    #define IPE_MPUIPPUC 0x0020

    //评估 IP 封装控制设置的设置
    #if defined (_IPE_ASSERTPUC1)
    #if defined (_IPE_LOCK)&&(_IPE_ASSERTPUC1 == 0x08)
    FRAM_IPE_ENABLE_VALUE =(IPE_MPUIPENA | IPE_MPUIPPUC |IPE_MPUIPLOCK);
    #elif defined (_IPE_LOCK)
    FRAM_IPE_ENABLE_VALUE =(IPE_MPUIPENA | IPE_MPUIPLOCK);
    #Elif (_IPE_ASSERTPUC1 = 0x08)
    FRAM_IPE_ENABLE_VALUE =(IPE_MPUIPENA | IPE_MPUIPPUC);
    其他
    FRAM_IPE_ENABLE_VALUE =(IPE_MPUIPENA);
    #endif
    其他
    #if defined (_IPE_LOCK)
    FRAM_IPE_ENABLE_VALUE =(IPE_MPUIPENA | IPE_MPUIPLOCK);
    其他
    FRAM_IPE_ENABLE_VALUE =(IPE_MPUIPENA);
    #endif
    #endif

    //段定义
    #ifdef _ipe_manual //用于在 GUI 中选择的自定义大小
    FRAM_IPE_Border1 =(_IPE_SEGB1>>4);
    FRAM_IPE_Border2 =(_IPE_SEGB2>>4);
    #else //链接器生成的自动大小
    FRAM_IPE_Border2 = fRAM_IPE_END >> 4;
    FRAM_IPE_Border1 = fRAM_IPE_START >> 4;
    #endif

    FRAM_IPE_SETTINGS_STRUCT_ADDRESS = IPE_设置 结构>> 4;
    FRAM_IPE_CHECKSUM =~((fRAM_IPE_ENABLE_VALUE & fRAM_IPE_Border2 & fRAM_IPE_Border1)|(fRAM_IPE_ENABLE_VALUE &~fRAM_IPE_Border2 &~fRAM_IPE_ENABBorder1)|(~frAM_IPE_ENABLE_ENABLE_IPE_1和~FRAM_IPE_IPE_IPE_IPAM_Border1)|(~~FRAM_IPE_IPE_IPE_IPE_IPE_IPAM_IPE_IPE_IPAM_FRAM_IPE_IPE_IPE_IPE_1和 IPAM_IPAM_IPAM_Border1)
    #endif

    #ifdef _MPU_enable
    #define MPUPW (0xA500)/* MPU 访问密码*/
    #define MPUENA (0x0001)/* MPU 使能*
    #define MPULOCK (0x0002)/* MPU 锁定*/
    #define MPUSEGIE (0x0010)/* MPU 在段违反时启用 NMI */

    _MPU_ENABLE = 1;
    //段定义
    #ifdef _MPU_manual //用于在 GUI 中选择的自定义大小
    MPU_SEARD_Border1 =_MPU_SEGB1 >> 4;
    MPU_SEARD_Border2 =_MPU_SEGB2 >> 4;
    MPU_SAM_VALUE =(_MPU_SAM0 << 12)|(_MPU_SAM3 << 8)|(_MPU_SAM2 << 4)|_MPU_SAM1;
    #else //链接器生成的自动大小
    #ifdef _ipe_enable //如果项目中也使用 IPE
    //seg1 =任何读取+写入持久性变量
    //seg2 = IPE =读取+写入+执行访问
    //seg3 =代码、只读+只执行
    MPU_SEGM_Border1 = fRAM_IPE_START >> 4;
    MPU_SEGM_Border2 = fRAM_Rx_START >> 4;
    MPU_SAM_VALUE = 0x1573;// Info R、Seg3 RX、Seg2 rwx、Seg1 RW
    其他
    MPU_SEGM_Border1 = fRAM_Rx_START >> 4;
    MPU_SEGM_Border2 = fRAM_Rx_START >> 4;
    MPU_SAM_VALUE = 0x1513;// Info R、Seg3 RX、Seg2 R、Seg1 RW
    #endif
    #endif
    #ifdef _MPU_LOCK
    #ifdef _MPU_ENABLE_NMI
    MPU_ctl0_value = MPUPW | MPUENA | MPULOCK | MPUSEGIE;
    其他
    MPU_ctl0_value = MPUPW | MPUENA | MPULOCK;
    #endif
    其他
    #ifdef _MPU_ENABLE_NMI
    MPU_ctl0_value = MPUPW | MPUENA | MPUSEGIE;
    其他
    MPU_ctl0_value = MPUPW | MPUENA;
    #endif
    #endif
    #endif

    / /
    /*包括外设内存映射*/
    / /

    l msp430fr5994.cmd

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

    Greg、

    请查看此内容。

    首先我重试了 Project->Properties->Gener->MPU->Enable Memory Protection Unit (MPU),结果出现了符号错误。

    MPUSEG /home/ckeller/ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/lib/rts430x_lc_ld_eabi.lib
    _mpusam /home/ckeller/ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/lib/rts430x_lc_ld_eabi.lib
    _mpuseg /home/ckeller/ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/lib/rts430x_lc_ld_eabi.lib

    但是、如果我选择 "Enable Memory Protection Unit (MPU)"并将符号 D_MPU_enable 放入"Projects"(项目)->"Properties"->"Build"->"MSP430 Compiler"->"Predefined Symbols"(属性-> MSP430编译器->预定义符号)中、则构建链接。

    有什么区别?

    Craig

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

    Craig、您能否再发送一些有关您最初创建项目时所做的工作的详细信息?

    当我使用具有20.2.0.LTS 编译器的 CCS10.0为 FR5994创建闪烁 LED 时、该 LED 会在无链接错误的情况下进行清理、并包含 MPU_init (即默认设置)。

    如果我取消选中 MPU 初始化复选框、那么它将在没有任何链接错误的情况下进行清理。  没有 MPU_init。

    如果我选中 MPU 初始化复选框、它将再次在启用 MPU_init 的情况下进行清理。

    因此、我无法重现您的问题。

    我不确定 CCS MPU 启用复选框是否执行了除将_MPU_enable 添加为预定义符号之外的任何其他操作、但我已经询问过使用该功能的另一位同事。

    谢谢
    Greg

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

    您好、Greg、

    该项目最初是使用 CCS 8.3.1创建的、我最近升级到了 ccs10.0.0。  我以前没有需要在8.3.1下启用 MPU、只是在迁移到10.0.0之后。 让我们看看、哦、 当我安装 ccs10.0.0时、我只包含 MSP430的资源、因此可能还没有安装或配置某些资源。

    常规:

    系列= MSP430

    编译器版本= TI v20.2.0.LTS

    输出格式= elf

    链接器命令= lnk_msp430fr5994.cmd (修改为包含'   .text:EraseMe > 0x43F00          /*This is the Erase function at the top of Memory */" under sections

    运行时支持库=自动

    Gener-->Build->MSP430 Compiler->Processor Options

    芯片版本=mspx

    代码内存模型=大

    数据模型=大

    指示哪些数据必须为 near = none

    Generic->Build->MSP430 Compiler->Advice Options

    已检查 FRAM 配置设置

    1、1:FRAM LockIO (已检查)

    1.2 FRAM 等待状态(已检查)

    注意:昨天晚上、我向预定义符号添加了符号_MPU_enable、而今天早上它不是持久的

    Gener-->Build->MSP430 Compiler->Advamed Options->Language Options

    C dialect=C11

    浮点精度...=全部

    字符=无符号

    printf/scanf...=最小值

    Generic->Build->MSP430 Linker->Basic Options

    堆=4096

    设置 C system stack size=128

    保持 WDT=ON

    General -> Build -> MSP430 Linker -> File Search Path

    ${COM_TI_XDC_library_path}

    ${CCS_base_root}/MSP430/include

    /home/ckeller/ti/ccs1000/ccs/ccs_base/msp430/include

    /home/ckeller/ti/ccs1000/ccs/ccs_base/msp430/lib/5xx_6xx_FRxx

    /home/ckeller/ti/ccs1000/ccs/ccs_base/msp430/lib/FR59xx

    Craig

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

    Greg、

    我查看 了./tools/compiler/ti-cgt-msp430_20.2.0.LTS/lib/src/mpu_init.c、如果我将其拉入、则所有缺失的符号都在那里? 那么、如何使用错误的 MPU_init.c 呢?

    void __mpu_init (void)

    MPUCTL0 = 0xA500;//解锁 MPU */
    MPUSEG =(unsigned int)_symval (&_mpuseg);//设置段边界*
    MPUSAM =(unsigned int)_symval (&_mpusam);//设置 rwx 权限*
    MPUCTL0 = 0xA501;//启用 MPU *
    MPUCTL0_H = 0x0;/*锁定 MPU */

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

    Craig、

    不应在 RTS lib/src/mpu_init.c 中进行链接、因为这是仅适用于 FR57的旧版实现。

    如果 libc.a 在 libmpu_init.a 之前链接、则可能会引入错误的旧实现

    请确认 Genero-Build->MSP430 Linker->File Search Path 中的顺序为:
      libmath.a
      libmpu_init.a
      libc.a

    此外、链接步骤的控制台输出应在 libc.a 之前链接 libmpu_init.a
    cl430... -o "MSP_MPU_fr5994.out""./blink.obj ""./lnk_msp430fr5994.cmd"-llibmath.a -llibpu_init.a -llibc.a

    谢谢
    Greg

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

    您好、Greg、

    我决定从 ccsv8.3.1升级到 v10是一次巨大的飞跃。 因此我 rm -rf ~/ti/*然后重新安装(脱机安装) CCS v10、从 git 下拉我的代码、针对 MSP430FR5994重新配置、内置启用了 MPU。

    很抱歉、我们浪费了这么多时间。  祝你度过美好的一天!

    Craig