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/MSP430F5419A:大型内存模型入门

Guru**** 2535590 points
Other Parts Discussed in Thread: MSP430F5419A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/580941/ccs-msp430f5419a-getting-started-with-large-memory-model

部件号:MSP430F5419A

工具/软件:Code Composer Studio

我的代码大小刚刚达到需要使用大内存模型的程度。

我使用的是5.3 0.219 0.0.005万 .版的GCC GNU v.Code Composer Studio版本:6.2 .(Linux)

是否有任何关于如何使用GCC工具切换到大内存模型的示例或教程?

我在编译器和链接器中添加了-mlarge标志。

我仍然收到:

/opt/ti-MSP.0/ccsv6/tools/compiler/gcc_MSP430_MSP.MSP/bin/./lib/gcc/MSP430-elf/MSP.0/./.../../../../.././xxxx-MSP/ld:elf.out 6.2 节`.text'将不适用于区域`ROM' 5.3 0.219 5.3
/opt/ti-MSP.0/ccsv6/tools/compiler/gcc_MSP430_MSP.MSP/bin/./lib/gcc/MSP430-elf/MSP.0/./../../../../../../MSP430-MSP/bin/ld 6.2 :在[0000ffd8,80000ffd9]上加载的章节__interrupt_vector_45与[0.8万.000f7005b上7005上加载的文本重叠[0.0008万ffd] 5.3 0.219 5.3
/opt/ti-MSP.0/ccsv6/tools/compiler/gcc_MSP430_MSP.ROM/bin/./lib/gcc/MSP430-elf/MSP.0/././././././././././././././././././././././././././././././././. 6.2 5.3 0.219 5.3 `

另外,配置保存地址的硬件寄存器(如DMAxDA和DMAxSA)的正确方法是什么?

我尝试了:

char myBuffer[10];
__data16_write_addr ((unsigned short)&DMA1SA,(unsigned long) myBuffer);

我得到了  

警告:从指针类型转换为不同大小的整数[-Wpointer-to -int-cast]

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    显示完整的编译器/链接器命令行。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    建筑文件:../main.c.
    调用:GNU编译器
    "/opt/ti-MSP.0/ccsv6/tools/compiler/gcc_MSP430_MSP430.MSP430/bin/MSP430-elf-gcc" 6.2 -c -mmcu=msp430f5419a -i"/opt/ti-spdwar.0/ccsv6/ccsv6/Css_base/MSP/include_gcc"-i"/opt/ti-sp-mv-ms/msp-msp-msp-msp-msp.msp-msp-msp-msp-msp-msp./msp-msp-msp-msp-msp-msp-msp-msp-msp-msp-msp-msp-msp-msp-msp-msp-msp-msp-msp-msp-msp-msp-msp-msp-msp-msp. 5.3 0.219 6.2 6.2 5.3 0.219
    ../main.c:在函数'主'中:
    ../main.c:89:28: Warning: CAST from pointer to int-size of different [-Wpointer-int-cast](警告:从指针转换为不同大小的整数[-Wpointer-to -int-cast])
    memset(&__bssstart, 0x31,(U16)&__stack -(U16)&__bssstart -30);
    ^
    ../main.c:89:44:警告:从指针转换为不同大小的整数[-Wpointer-int-cast]
    memset(&__bssstart, 0x31,(U16)&__stack -(U16)&__bssstart -30);



    构建目标:uec100a.out
    调用:GNU Linker
    "/opt/ti-lcs.0/ccsv6/tools/compiler/gcc_mspap.lc/bin/msp430f5419a 6.2 -os -g -gdwarf-3 -gstrile-dwarf -wl -wl,-Map,"uec100a.map"-l"/lvdemo" dum.ph/" mot.phor.ph" 5.3 0.219 6.2
    Makefile:163:目标'uec100a.out '的配方失败
    /opt/ti-MSP.0/ccsv6/tools/compiler/gcc_MSP430_MSP.MSP/bin/./lib/gcc/MSP430-elf/MSP.0/././././././../../../.././MSP430-MSP/uec100a.out 6.2 节`.text'将不适用于区域`ROM' 5.3 0.219 5.3
    /opt/ti-MSP.0/ccsv6/tools/compiler/gcc_MSP430_MSP.MSP/bin/./lib/gcc/MSP430-elf/MSP.0/./../../../../../MSP430-MSP/bin/ld 5.3 :在[0000ffd8,80000ffd9]上加载的第__interrup_vector_45节与第0.00011亿f47节中加载的内容重叠[0000ffd8,80000ffd9] 6.2 0.219 5.3 重叠[0000.0000.0000.dl]</s>0000.
    /opt/ti-MSP.0/ccsv6/tools/compiler/gcc_MSP430_MSP.ROM/bin/./lib/gcc/MSP430-elf/MSP.0/././././././././././././././././././././././././././././././././. 6.2 5.3 0.219 5.3 `
    collect2:错误:LD返回1退出状态
    gmake:***[uec100a.ut]错误1
    gmake:由于错误,目标'all'没有重制。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    GCC 6 changelog

    MSP430编译器现在能够在低内存(地址低于64K)和高内存之间自动分发代码和数据。

    这意味着您的GCC 5.3 还没有此能力。

    无论如何, MSP430 GCC在低ROM和远ROM之间自动拆分代码? 表示自4.9 起就支持此功能,并且您必须使用-mcode-region=任一 选项。

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

    您能否帮助我使用地址值初始化特殊功能寄存器的正确方法:
    我试过
    char myBuffer[10];
    __data16_write_addr ((unsigned short)&DMA1SA,(unsigned long) myBuffer);

    我得到了

    警告:从指针类型转换为不同大小的整数[-Wpointer-to -int-cast]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在大内存模型中,指针具有16位以上。 编译器抱怨,因为您将此类指针强制转换为“unsigned short”值(它不知道DMA1SA位于低地址)。

    但是您不需要该帮助程序函数,您应该能够写入“DMA1SA =(uintpttr_t)myBuffer;”。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢!!!
    我的项目现在正在大内存模型中运行!!