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.

[参考译文] MSP430F2419:重定位被截断以拟合:R_MSP430_16相对于符号`memcpy'在/usr/msp430/lib/libc.a (memcpy.o)中的.text 段中定义+数学库问题 x.c:(.text+0x36e):未定义对`isinfinity&#39的引用;

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1291651/msp430f2419-relocation-truncated-to-fit-r_msp430_16-against-symbol-memcpy-defined-in-text-section-in-usr-msp430-lib-libc-a-memcpy-o-math-library-problems-x-c-text-0x36e-undefined-reference-to-isfinite

器件型号:MSP430F2419

我们拥有可以通过 Windows 上的 Code Composer TI 构建并运行的固件。 最大 Im 尝试集成到 WSL 上。 我将工具链从 cl430更改为 msp430-gcc。 Im 中使用 MSP430工具链中的链接器。 这是构建过程中的整个错误:

/usr/lib/gcc/msp430/4.6.3/../../../../msp430/bin/ld:go_two_linux.elf 段`.text'将不适应区域` ROM"
/usr/lib/gcc/msp430/4.6.3/../../../../msp430/bin/ld:加载于[000000000000ffc0000000000000ffdf]的段.vectors 与加载于[0000000000002,100,000000010405]的段.text 重叠
/usr/lib/gcc/msp430/4.6.3/../../../../msp430/bin/ld:区域`ROM"溢出2230字节
/usr/lib/gcc/msp430/4.6.3/libcrt0.a (_copy_data.o):在函数`___ DO_copy_data'中:
/build/gcc-msp430-gRBRRo/gcc-msp430-4.6.3~mspgcc-20120406/./gcc-4.6.3/gcc/config/MSP430/crt0.S:195:重新定位已截断以适合:R_MSP430_16_BYTE、对应于 go_two_linux.elf 中的* abs*段中定义的符号`_data_load_start'
/usr/lib/gcc/msp430/4.6.3/crt0ivtbl16.o:在函数`_ISR_14'中:
(.text+0x2):重定位被截断以拟合:针对/usr/lib/gcc/msp430/4.6.3/libcrt0.a (_unexpect_.o).text.crt0段中定义的符号` unexpect_'的 R_MSP430_16
lib/libx_lib.a (cmd_handling.c.obj):在函数`CMD_GET_param_data'中:
CMD_handling.c:(.text+0x11e):重定位被截断以拟合:`no symbol'的 R_MSP430_16_byte
lib/libx_lib.a (cmd_handling.c.obj):在函数`Handle_Transaction 中:
CMD_handling.c:(.text+0x5b6):重定位被截断以拟合:R_MSP430_16相对于/usr/msp430/lib/libc.a (memset.o)中.text 段定义的符号`memset'
lib/libx_lib.a (cmd_handling.c.obj):在函数`CMD_DAC_currents'中:
CMD_handling.c:(.text+0x970):重定位被截断以拟合:R_MSP430_16 `m/usr/msp430/lib/libc.a (memset.o)中.text 段中定义的符号"emset"
lib/libx_lib.a (cmd_handling.c.obj):在函数`CMD_ADC_currents'中:
CMD_handling.c:(.text+0xbbe):重定位被截断以拟合:R_MSP430_16对/usr/msp430/lib/libc.a (memset.o)中.text 段中定义的符号`memset'进行比较
lib/libx_lib.a (cmd_handling.c.obj):在函数`CMD_DAC_voltes'中:
CMD_handling.c:(.text+0xdf0):重定位被截断以拟合:R_MSP430_16、对应于/usr/msp430/lib/libc.a (memset.o)中.text 段定义的符号`memset'
lib/libx_lib.a (cmd_handling.c.obj):在函数`CMD_ADC_voltages'中:
CMD_handling.c:(.text+0xF8):重定位被截断以拟合:R_MSP430_16 (相对于/usr/msp430/lib/libc.a (memset.o)中.text 段定义的符号`memset')
lib/libx_lib.a (cmd_handling.c.obj):在函数`CMD_VOLTAGES_CURRENTs'中:
CMD_handling.c:(.text+0x1252):重定位被截断以拟合:R_MSP430_16相对于/usr/msp430/lib/libc.a (memset.o)中.text 段定义的符号`memset'
lib/libx_lib.a (cmd_handling.c.obj):在函数`CMD_serial_number'中:
CMD_handling.c:(.text+0x1cc8):重定位被截断以拟合:R_MSP430_16、对应于/usr/msp430/lib/libc.a (memcpy.o)中.text 段中定义的符号`memcpy'
CMD_handling.c:(.text+0x1d1e):输出中省略了其他重定位溢出
lib/libx_lib.a (heater.c.obj):在函数`heater_get_temperates'中:
HEATER.c:(.text+0x36e):对`有限'的引用未定义
collect2:LD 返回1个退出状态
make[2]:***[CMakeFiles/go_two_linux.elf.dir/build.make:98: go_two_linux.elf]错误1
make[1]:***[CMakeFiles/Makefile2:129: CMakeFiles/GO_

我怎么了? 如何正确集成数学库。 MSP430工具链附带数学库、我检查了这些、但是找不到像 islimit 这样的简单函数。 以下是我的编译器/链接器标志:

set (MSP430_CFLAGS "-std=c99 --data_model=restricted -ffunit-sections -Fdata-sections -vmspx --data_model=restricted -O0 - opt_for_speed=4 --use_diag_compach=16 - define=__MSP430F2419_
set (MSP430_LFLAGS "-WL --relax --gc-sections -T ../MSP430.x -L/MSP430/lib -lm -lc"缓存字符串"MSP430 link flags")#-L/usr/include -L/usr/MSP430/bin -L/usr/msp430/lib -lm -lc  
提前感谢您!  
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不适合 ROM 错误意味着您忽略了在 msp430-elf-gcc 选项中添加"-mlarge"。

    它似乎你正在使用 cmake 我从来没有使用过,所以可能会导致问题也。

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

    尊敬的 David:

    感谢您的快速响应。 它基本上就是链接器脚本的问题。 我需要正确定义段。 这是从 CCS 自动生成的。 我的链接器脚本如下:  

    output_format ("ELF32-MSP430")
    output_arch ("MSP430")
    内存{
    SFR:origin = 0x0000、length = 0x0010 /* end=0x0010、size 16 */
    peripheral_8bit:origin = 0x0010、length = 0x00f0 /* end=0x0100、size 240 */
    peripheral_16bit:origin = 0x0100、length = 0x0100 /* end=0x0200、size 256 */
    RAM_MIRR (Wx):origin = 0x0200、length = 0x0800 /* end=0x0a00、size 2K */
    Infomem:origin = 0x1000、length = 0x0100 /* end=0x1100、size 256作为4个64字节段*/
    infod : origin = 0x1000,length = 0x0040 /* end=0x1040,size 64 */
    Infoc:origin = 0x1040、length = 0x0040 /* end=0x1080、size 64 */
    infob:origin = 0x1080,length = 0x0040 /* end=0x10c0,size 64 */
    infoa:origin = 0x10c0、length = 0x0040 /* end=0x1100、size 64 */
    RAM (WX):origin = 0x1100、length = 0x1000 /* end=0x2100、size 4K */
    ROM (Rx):origin = 0x2100,length = 0xdebe /* end=0xffbe,size 57022 */
    VECTORS : origin = 0xFFc0 , length = 0x0040 /* end=0x10000 , size 64作为32个2字节段*/
    far_ROM:origin = 0x00010000、length = 0x00010000 /* end=0x00020000、size 64K */
    /*其余银行不存在*/
    BSL:origin = 0x0000、length = 0x0000
    RAM2 (WX):origin = 0x0000、length = 0x0000
    usbram (Wx):origin = 0x0000、length = 0x0000

    region_alias ("region_text"、ROM);
    region_alias ("region_data"、ram);
    region_alias ("region_far_rom"、far_rom);
    提供(__INFO_SEGMENT_SIZE = 0x40);
    提供(__infod = 0x1000);
    提供(__infoc = 0x1040);
    提供(__infob = 0x1080);
    提供(__infoa = 0x10c0);
    region_alias ("region_text"、ROM);
    region_alias ("region_data"、ram);
    region_alias ("region_far_rom"、far_rom);
    提供(__INFO_SEGMENT_SIZE = 0x40);
    提供(__infod = 0x1000);
    提供(__infoc = 0x1040);
    提供(__infob = 0x1080);
    提供(__infoa = 0x10c0);
    __IE1 = 0x0000;
    __IFG1 = 0x0002;
    __IE2 = 0x0001;
    __IFG2 = 0x0003;
    __UC1IE = 0x0006;
    __UC1IFG = 0x0007;
    __ADC12CTL0 = 0x01A0;
    __ADC12CTL1 = 0x01A2;
    __ADC12IFG = 0x01A4;
    __ADC12IE = 0x01A6;
    __ADC12IV = 0x01A8;
    __ADC12MEM0 = 0x0140;
    __ADC12MEM1 = 0x0142;
    __ADC12MEM2 = 0x0144;
    __ADC12MEM3 = 0x0146;
    __ADC12MEM4 = 0x0148;
    __ADC12MEM5 = 0x014A;
    __ADC12MEM6 = 0x014C;
    __ADC12MEM7 = 0x014E;
    __ADC12MEM8 = 0x0150;
    __ADC12MEM9 = 0x0152;
    __ADC12MEM10 = 0x0154;
    __ADC12MEM11 = 0x0156;
    __ADC12MEM12 = 0x0158;
    __ADC12MEM13 = 0x015A;
    __ADC12MEM14 = 0x015C;
    __ADC12MEM15 = 0x015E;
    __ADC12MCTL0 = 0x0080;
    __ADC12MCTL1 = 0x0081;
    __ADC12MCTL2 = 0x0082;
    __ADC12MCTL3 = 0x0083;
    __ADC12MCTL4 = 0x0084;
    __ADC12MCTL5 = 0x0085;
    __ADC12MCTL6 = 0x0086;
    __ADC12MCTL7 = 0x0087;
    __ADC12MCTL8 = 0x0088;
    __ADC12MCTL9 = 0x0089;
    __ADC12MCTL10 = 0x008A;
    __ADC12MCTL11 = 0x008B;
    __ADC12MCTL12 = 0x008C;
    __ADC12MCTL13 = 0x008D;
    __ADC12MCTL14 = 0x008E;
    __ADC12MCTL15 = 0x008F;
    __DCOCTL = 0x0056;
    __ BCSCTL1 = 0x0057;
    __ BCSCTL2 = 0x0058;
    __ BCSCTL3 = 0x0053;
    __ CACTL1 = 0x0059;
    __ CACTL2 = 0x005A;
    __CAPD = 0x005B;
    __ FCTL1 = 0x0128;
    __ FCTL2 = 0x012A;
    __ FCTL3 = 0x012C;
    _FCTL4 = 0x01BE;
    __MPY = 0x0130;
    __MPYS = 0x0132;
    __MAC = 0x0134;
    __MACS = 0x0136;
    __OP2 = 0x0138;
    _RESLO = 0x013A;
    __ RESHI = 0x013C;
    __SUMEXT = 0x013E;
    __P1IN = 0x0020;
    __P1OUT = 0x0021;
    __P1DIR = 0x0022;
    __P1IFG = 0x0023;
    __P1IES = 0x0024;
    __P1IE = 0x0025;
    __P1SEL = 0x0026;
    __P1REN = 0x0027;
    __P2IN = 0x0028;
    __P2OUT = 0x0029;
    __P2DIR = 0x002A;
    __P2IFG = 0x002B;
    __P2IES = 0x002C;
    __P2IE = 0x002D;
    __P2SEL = 0x002E;
    __P2REN = 0x002F;
    __P3IN = 0x0018;
    __P3OUT = 0x0019;
    __P3DIR = 0x001A;
    __P3SEL = 0x001B;
    __P3REN = 0x0010;
    __P4IN = 0x001C;
    __P4OUT = 0x001D;
    __P4DIR = 0x001E;
    __P4SEL = 0x001F;
    __P4REN = 0x0011;
    __P5IN = 0x0030;
    __P5OUT = 0x0031;
    __P5DIR = 0x0032;
    __P5SEL = 0x0033;
    __P5REN = 0x0012;
    __P6IN = 0x0034;
    __P6OUT = 0x0035;
    __P6DIR = 0x0036;
    __P6SEL = 0x0037;
    __P6REN = 0x0013;
    __P7IN = 0x0038;
    __P7OUT = 0x003A;
    __P7DIR = 0x003C;
    __P7SEL = 0x003E;
    __P7REN = 0x0014;
    __P8IN = 0x0039;
    __P8OUT = 0x003B;
    __P8DIR = 0x003D;
    __P8SEL = 0x003F;
    __P8REN = 0x0015;
    __pain = 0x0038;
    __PAOUT = 0x003A;
    __PADIR = 0x003C;
    __PASEL = 0x003E;
    __Paren = 0x0014;
    __SVSCTL = 0x0055;
    __TAIV = 0x012E;
    __TACTL = 0x0160;
    __ TACCTL0 = 0x0162;
    __ TACCTL1 = 0x0164;
    __ TACCTL2 = 0x0166;
    __TAR = 0x0170;
    __TACCR0 = 0x0172;
    __ TACCR1 = 0x0174;
    _TACCR2 = 0x0176;
    __ TBIV = 0x011E;
    __TBCTL = 0x0180;
    __TBCCTL0 = 0x0182;
    __ TBCCTL1 = 0x0184;
    __ TBCCTL2 = 0x0186;
    __ TBCCTL3 = 0x0188;
    __ TBCCTL4 = 0x018A;
    __ TBCCTL5 = 0x018C;
    __ TBCCTL6 = 0x018E;
    __ TBR = 0x0190;
    __ TBCCR0 = 0x0192;
    __ TBCCR1 = 0x0194;
    __TBCCR2 = 0x0196;
    __ TBCCR3 = 0x0198;
    __ TBCCR4 = 0x019A;
    __ TBCCR5 = 0x019C;
    __ TBCCR6 = 0x019E;
    _UCA0CTL0 = 0x0060;
    _UCA0CTL1 = 0x0061;
    __UCA0BR0 = 0x0062;
    __UCA0BR1 = 0x0063;
    __UCA0MCTL = 0x0064;
    __UCA0STAT = 0x0065;
    __UCA0RXBUF = 0x0066;
    _UCA0TXBUF = 0x0067;
    _UCA0ABCTL = 0x005D;
    __UCA0IRTCTL = 0x005E;
    __UCA0IRRCTL = 0x005F;
    _UCB0CTL0 = 0x0068;
    __UCB0CTL1 = 0x0069;
    __UCB0BR0 = 0x006A;
    __UCB0BR1 = 0x006B;
    __UCB0I2CIE = 0x006C;
    __UCB0STAT = 0x006D;
    __UCB0RXBUF = 0x006E;
    __UCB0TXBUF = 0x006F;
    __UCB0I2COA = 0x0118;
    __UCB0I2CSA = 0x011A;
    _UCA1CTL0 = 0x00D0;
    __UCA1CTL1 = 0x00D1;
    __UCA1BR0 = 0x00D2;
    __UCA1BR1 = 0x00D3;
    __UCA1MCTL = 0x00D4;
    __UCA1STAT = 0x00D5;
    _UCA1RXBUF = 0x00D6;
    _UCA1TXBUF = 0x00D7;
    _UCA1ABCTL = 0x00CD;
    __UCA1IRTCTL = 0x00CE;
    __UCA1IRRCTL = 0x00CF;
    __UCB1CTL0 = 0x00D8;
    ___ UCB1CTL1 = 0x00D9;
    ___ UCB1BR0 = 0x00DA;
    __UCB1BR1 = 0x00DB;
    __UCB1I2CIE = 0x00DC;
    __UCB1STAT = 0x00DD;
    __UCB1RXBUF = 0x00DE;
    __UCB1TXBUF = 0x00DF;
    __UCB1I2COA = 0x017C;
    __UCB1I2CSA = 0x017E;
    __ WDTCTL = 0x0120;
    __TLV_CHECKSUM = 0x10C0;
    __TLV_DCO_30_TAG = 0x10F6;
    __TLV_DCO_30_LEN = 0x10F7;
    __TLV_ADC12_1_TAG = 0x10DA;
    __TLV_ADC12_1_LEN = 0x10DB;
    __CALDCO_16MHz = 0x10F8;
    __CALBC1_16MHz = 0x10F9;
    __CALDCO_12MHz = 0x10FA;
    __CALBC1_12MHZ = 0x10FB;
    __CALDCO_8MHZ = 0x10FC;
    __CALBC1_8MHZ = 0x10FD;
    __CALDCO_1MHz = 0x10FE;
    __CALBC1_1MHZ = 0x10FF;

    部分
    {
    /*只读部分、合并为文本段。 */
    .hash:{*(.hash)}
    .dynsym:{*(.dynsym)}
    .dynstr :{*(.dynstr)}
    .gnu.version:{*(.gnu.version)}
    .gnu.version_d:{*(.gnu.version_d)}
    .gnu.version_r:{*(.gnu.version_r)}
    .rel.init :{*(.rel.init }
    .rela.init :{*(.rela.init }
    .rel.fini:{*(.rel.fini)}
    .rela.fini:{*(.rela.fini)}
    .rel.text:{*(.rel.text .rel.text.*.rel.gnu.linkone.t*)}
    .rela.text:{*(.rela.text .rela.text.*.rela.gnu.linkone.t*)}
    .rel.rodata:{*(.rel.rodata .rel.rodata.*.rel.gnu.linkone.r*)}
    .rela.rodata:{*(.rela.rodata .rela.rodata.rodata.*.rela.gnu.linkone.r*)}
    .rel.data:{*(.rel.data .rel.data.*.rel.gnu.linkone.d.*)}
    .rela.data:{*(.rela.data .rela.data.data.*.rela.gnu.linkone.d.*)}
    .rel.bss:{*(.rel.bss .rel.bss.*.rel.gnu.linkone.b*)}
    .rela.bss:{*(.rela.bss .rela.bss.*.rela.gnu.linkone.b*)}
    .rel.ctors :{*(.rel.ctors)}
    .rela.ctors :{*(.rela.ctors)}
    .rel.dores:{*(.rel.dtors)}
    .rela.dores:{*(.rela.dtors)}
    .rel.got:{*(.rel.got)}
    .rela.got:{*(.rela.got)}
    .rel.plt :{*(.rel.plt)}
    .rela.plt :{*(.rela.plt)}
    .text:
    {
    。 = align (2);
    keep(*(.init .init.*)
    keep (*(.init0))/*重置后从此处开始。 */
    keep (*(.init1))/*用户可定义。 */
    keep(*.init2)/*初始化堆栈。 */
    keep(*.init3)/*初始化硬件,用户可定义。 */
    keep (*(.init4))/*将数据复制到.data、清除 BSS。 */
    keep(*.init5)/*用户可定义。 */
    keep (*(.init6))/* C++构造函数。 */
    keep(*(.init7))/*用户可定义。 */
    keep (*(.init8))/*用户可定义。 */
    keep(*(.init9))/*调用 main ()。 */
    keep(*.fini9))/*在 main()之后落入此处。 用户可定义。 */
    keep (*(.fini8))/*用户可定义。 */
    keep (*(.fini7))/*用户可定义。 */
    keep (*(.fini6))/* C++析构函数。 */
    keep (*(.fini5))/*用户可定义。 */
    keep(*.fini4)/*用户可定义。 */
    keep(*.fini3)/*用户可定义。 */
    keep(*(.fini2)/*用户可定义。 */
    keep(*.fini1)/*用户可定义。 */
    keep (*(.fini0))/*程序终止后无限循环。 */
    keep(*.fini .fini.*)
    。 = align (2);
    __ctors_start =。 ;
    keep (*(.ctors))
    __ citors_end =。 ;
    __dters_start =。 ;
    keep (*(.dtors))
    __dters_end =。 ;
    。 = align (2);
    *(.text .text .*.gnu.linkone.t*)
    。 = align (2);
    }> REGION_TEXT
    .rodata:
    {
    。 = align (2);
    *(.rodata .rodata.*.gnu.linkone.r*)
    。 = align (2);
    }> REGION_TEXT
    etext =.;/*通过最后一个只读(可加载)段*/
    .data:
    {
    。 = align (2);
    提供(__ data_start =。) ;
    *(.data .data.*.gnu.linkone.d.*)
    。 = align (2);
    edata =。 ;/*上一个读写(可载入)段*/
    }> region_data 位于> region_text
    提供(__DATA_LOADDDR (.data));
    提供(__DATA_SIZEOF (.data));
    .bss:
    {
    提供(__BSS_START =。) ;
    *(.bss .bss.*)
    *(通用)
    。 = align (2);
    提供(__BSS_END =。) ;
    }> REGION_DATA
    提供(__BSS_SIZE = SIZEOF (.bss));
    .noinit:
    {
    提供(__noinit_start =。) ;
    *(.noinit .noinit.*)
    。 = align (2);
    提供(__noinit_end =。) ;
    }> REGION_DATA
    。 = align (2);
    _end =。 ;/*通过最后一个写入(可载入)段*/
    .infomem:
    {
    *(.infomem)
    。 = align (2);
    *(.infomem.*)
    }>信息
    .infomemnobits:
    {
    *(.infomemnobits)
    。 = align (2);
    *(.infomemnobits.*)
    }>信息
    .infoa:
    {
    *(.infoa .infoa。*)
    }>信息 a
    .infoob:
    {
    *(.infoob .infoob.*)
    }>信息
    .infoc:
    {
    *(.infoc .infoc.*)
    }> infoc
    .infod:
    {
    *(.infod .infod.*)
    }>信息
    .vectors:
    {
    提供(__ vectors_start =。) ;
    keep(*.vector*)
    _vectors_end =。 ;
    }>向量
    .fartext:
    {
    。 = align (2);
    *(.fartext)
    。 = align (2);
    *(.fartext*)
    efartext =.;
    }> REGION_FAR_ROM
    /*用于性能分析信息的 stabs */
    .profiler 0:{*(.profiler)}
    /* stabs 调试段。 */
    .stab 0:{*(.stab)}
    . st7130 :{*(.stBurr)}
    .stab.exclave 0:{*(.stab.exclave)}
    .stab.exclstr 0 :{*(. stab.exclstr )}
    .stab.index 0 :{*(.stab.index }
    .stab.indexstr 0 :{*(.stab.indexstr }
    .comment 0:{*(.comment)}
    /* DWARF 调试段。
    DWARF 调试段中的符号与 DCL 的开始
    因此我们从0开始。 */
    /* DWARF 1 */
    .debug 0:{*(.debug)}
    .line 0:{*(.line)}
    /* GNU DWARF 1扩展名*/
    .debug_srcinfo 0:{*(.debug_srcinfo)}
    .debug_sfnames 0:{*(.debug_sfnames)}
    /* DWARF 1.1和 DWARF 2 */
    .debug_aranges 0:{*(.debug_aranges)}
    .debug_pubnames 0:{*(.debug_pubnames)}
    /* DWARF 2 */
    .debug_info 0:{*(.debug_info)*(.gnu.linkone.wi.*)}
    .debug_Abbrev 0:{*(.debug_Abbrev)}
    .debug_line 0:{*(.debug_line)}
    .debug_FRAME 0:{*(.debug_FRAME)}
    .debug_str 0:{*(.debug_str)}
    .debug_loc 0:{*(.debug_loc)}
    .debug_macinfo 0:{*(.debug_macinfo)}
    /* DWARF 3 */
    .debug_pubtypes 0:{*(.debug_pubtypes)}
    .debug_ranges 0:{*(.debug_ranges)}
    提供(__stack = origin (ram)+ length (ram));
    提供(__DATA_START_ROM =_etext);
    提供(__DATA_END_ROM =_etext + SIZEOF (.data));

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

    GCC 具有链接器脚本、如果您告诉它您在使用哪个 MCU、则知道如何查找这些脚本。 非常简单的 makefile 示例:

    GCC_DIR = /usr/ti/gcc
    SUPPORT_FILE_DIRECTORY = $(GCC_DIR)/include
    CC = $(GCC_DIR)/bin/msp430-elf-gcc
    CPU = msp430fr5969
    CFLAGS = -g -mmcu=${CPU} -I $(SUPPORT_FILE_DIRECTORY)  -Wall  -Wl,--gc-sections -mlarge
    
    a.out: timer.c
            $(CC) $(CFLAGS) -O3 timer.c
    
    
    
    

    你的脚本会有很多问题。 我不会全部查找、但用于向量的单个区域不起作用。 GCC 将每个向量放入其自身的2字节段:

     __reset_vector :
      {
        KEEP (*(__interrupt_vector_32))
        KEEP (*(__interrupt_vector_reset))
        KEEP (*(.resetvec))
      } > RESETVEC
    
    

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

    尊敬的 David:  

    感谢您的答复。 我发现、我只需要将  

    -t./memory.x 和 LFLAGS,以及  
    -mmcu=msp430f2419至 CFLAGS。 构建成功、但未静态链接也未定义段                                    
    [100%]链接 C 可执行文件 example.elf
    反向恢复技术。
    读取/usr/lib/gcc/msp430/4.6.3/../../../../msp430/lib/msp430mcu.spec 上的规格数据
    collect_GCC=/usr/bin/msp430-gcc
    collect_LTO_wraper=/usr/lib/gcc/msp430/4.6.3/lto-wrapper
    目标:MSP430
    配置为:'/build/gcc-msp430-gRBRRo/gcc-msp430-4.6.3~mspgcc-20120406/.gcc-4.6.3/configure'-v --enable-languages=c、c++--prefix=/usr--with-system-zlib --infodir='/usr/share/info /usr/lib --mandir='/usr/share/man /usr/lib --bexecdir='/usr/bin
    Thread 模型:单个
    GCC 版本4.6.3 20120301 (mspgcc LTS 20120406未修补)(GCC)
    Compiler_path=/usr/lib/gcc/msp430/4.6.3:/usr/lib/gcc/msp430/4.6.3 /:/usr/lib/gcc/msp430 /:/usr/lib/gcc/msp430/4.6.3 /:/usr/lib/gcc/msp430 /:/usr/lib/gcc/msp430/4.6.3/../../../../msp430/bin
    library_path=/usr/lib/gcc/msp430/4.6.3/mcpu-430x/mmpy-16:/usr/lib/gcc/msp430/4.6.3/../../../../msp430/lib/mcpu-430x/mmpy-16 /:/usr/lib/gcc/msp430/4.6.3 /:/usr/lib/gcc/msp430/4.6.3/../../../../msp430/lib
    collect_GCC_options='-O3''-D''NDEBUG''-mmcu=msp430f2419''--reread_libs''--diag_wow=off''--display_error_number'--issue_remarks /usr/msp430/include ''-v''-warn_sections''-mlarge''-t''-t'/msp430' msp43fx''/msp430i'msp430' msp43fx'/usr/msp430/lib 脚本。
    /usr/lib/gcc/msp430/4.6.3/collect2 -o msp430 -o go_two_linux.elf /usr/lib/gcc/msp430/4.6.3/mcpu-430x/mmpy-16/crt0ivtbl32.o -L/usr/msp430/lib/ldscripts/msp430f2419 -L/usr/lib/gcc/mcc/MSP430/4.6.3/Mcpu-430x/mmpy-16 -L/usr/lib/msp430/4.6.3.3/../../../../msp430/lib/mcpu-430x/mmpy-16 -L/usr/lib/mcc/lib/mcc/lcc/lcc/-lc/lcc/msp430.html -/usr/lib/gcc/../../msp430/lib/ldscripts/msp430f2419 -sl_msp430.lcc/lib/mcc/lcc/lib.sl_msp430.lcc/lib_msp430.html -/../../../msp430/lib -mspmsp430.lcc/lib_msp430.lcc/lib.sl_msp430.html 示例。
    [100%]已构建目标示例.elf
    文本数据 BSS 解码十六进制文件名  
    0    0        0 0 0 example.elf
    文件大小为55KB。 当我尝试使用 mspdebug sim 模式时: (mspdebug) prog example.elf
    完成、总共0个字节。
    任何帮助都会很感激!  
    Danke.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我只在给 gcc 选项"-v"的情况下才会看到打印的选项列表。 它有更多的信息比通常所需的,所以我的眼睛有点釉在上面。

    我确实看到您使用的是非常旧的版本。 我不是一个狂热的保持最新的,但即使我的安装显示的是9.3.1版本,而不是4.6.3。 更新可能是按顺序进行的。