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/MSP430F5359:在主代码中包含 C 文件

Guru**** 2526700 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/770910/ccs-msp430f5359-including-a-c-file-in-main-code

器件型号:MSP430F5359

工具/软件:Code Composer Studio

大家好、我已经在链接器文件中创建了一个名为 flash.3的新闪存段、我将在其中存储以下代码。 我在将.c 文件包含在主代码中时遇到问题。 如何将此文件包含在主代码中? 该表很长、因此包含了该表的一部分。

# pragma DATA_SECTION (AUDIO_MEM、".flash3");

const unsigned long AUDIO_MEM[]={
0x00020100
、0x000208BA
、0x00020ECE
、0x00021372
、0x000218DB
、0x00021CFF
、0x00022461
、0x00022CDF
、0x00023267
、0x000239B、0x0002000B




、0x0002000B












、0x0002000B、0x0002000B、0x0002000B、0x0002000B、0x0002000B、0x0002000B、0x000B、0x0002000B、0x0002000B、0x000B、0x0002000B、0x0002000B、0x000B、0x0002000B、0x0002000B、0x000B、0x0002000B、0x0002000B、0x000B、0x0002000B、0x000B、0x0002000B、0x000B、0x0002000B 

三、会议的报告

 

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

    您好、Kary、

    1.包含.c 文件时会出现什么问题?
    2.是否使用此表单:#include "xxxxx.c"? 如果是这样、您需要从构建中排除.c 文件、该文件可在属性中找到。

    伊斯天

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

    您是说 AUDIO_MEM 中的值是二进制可执行代码? 如果是、为什么不直接下载二进制可执行代码?

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

    我从编译中排除了 audio_mem.c、并包含在主函数中 、它在 audio.c 中显示问题 、说"array is too large (数组太大)"

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我无法直接下载二进制可执行代码?如何操作?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您使用的是"-data_model=restricted"。 根据 CCS c 编译器用户指南(SLAU132S)第6.1.2节、在该模型中、任何单个对象都不能大于64KB。 (您的至少为128KB。)

    尝试将 DATA_MODEL 设置为“大型”(生成设置->编译器->处理器选项)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你。 问题现已解决。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但我无法写入闪存存储器、即二进制代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    发生什么事了?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这就是我所期待的:

    但存储器部分为空:

    它在调试时显示 boot.c 文件

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    下一步是检查.map 文件、以确保(a)将 flash3段放置在您想要的位置、以及(b) audio_mem[]放置在该文件中。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如何检查.map 文件?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    它的名称 .map、位于项目的"Debug"文件夹中。 它只是一个文本文件。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    否未在 FLASH.3映射
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您如何在链接器文件中定义.flash3?

    首先、我可能会问:为什么将该表放在特定位置很重要? 是否有理由不让链接器将表放置在它决定放置的任何位置? 您始终可以从.map 文件中找到加载该文件的位置(或询问调试器)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    由于此表用于音频、因此我希望将它们放在一个位置、并一次调用 一个字或类似的字。

    内存
    {
    SFR :origin = 0x0000、length = 0x0010
    外设_8位 :origin = 0x0010,length = 0x00F0
    外设_16BIT :origin = 0x0100,length = 0x0100
    RAM :origin = 0x1C00,length = 0x4800
    RAM2 :origin = 0xF0000、length = 0xC000
    INFOA :origin = 0x1980、length = 0x0080
    信息 :origin = 0x1900,length = 0x0080
    信息系统 :origin = 0x1880、length = 0x0080
    信息系统 :origin = 0x1800,length = 0x0080
    闪存 :origin = 0x8000、length = 0x7F80
    FLASH2 :origin = 0x10000、length = 0x10000
    FLASH3 :origin = 0x20000、length = 0x25C00
    INT00 :origin = 0xFF80、length = 0x0002
    INT01 :origin = 0xFF82、length = 0x0002
    INT02 :origin = 0xFF84,length = 0x0002
    INT03 :origin = 0xFF86、length = 0x0002
    INT04 :origin = 0xFF88、length = 0x0002
    INT05 :origin = 0xFF8A,length = 0x0002
    INT06 :origin = 0xFF8C,length = 0x0002
    INT07 :origin = 0xFF8E、length = 0x0002
    INT08 :origin = 0xFF90,length = 0x0002
    INT09 :origin = 0xFF92,length = 0x0002
    INT10. :origin = 0xFF94,length = 0x0002
    INT11. :origin = 0xFF96、length = 0x0002
    INT12. :origin = 0xFF98,length = 0x0002
    INT13. :origin = 0xFF9A,length = 0x0002
    INT14 :origin = 0xFF9C,length = 0x0002
    INT15. :origin = 0xFF9E、length = 0x0002
    内部16. :origin = 0xFFA0、length = 0x0002
    INT17. :origin = 0xFFA2、length = 0x0002
    INT18 :origin = 0xFFA4、length = 0x0002
    INT19. :origin = 0xFFA6、length = 0x0002
    INT20. :origin = 0xFFFA8、length = 0x0002
    INT21. :origin = 0xFFAA、length = 0x0002
    INT22. :origin = 0xFFAC,length = 0x0002
    INT23 :origin = 0xFFAE、length = 0x0002
    INT24 :origin = 0xFFB0,length = 0x0002
    INT25. :origin = 0xFFB2、length = 0x0002
    INT26. :origin = 0xFFB4,length = 0x0002
    INT27. :origin = 0xFFB6、length = 0x0002
    INT28 :origin = 0xFFB8、length = 0x0002
    INT29 :origin = 0xFFBA,length = 0x0002
    INT30 :origin = 0xFFBC,length = 0x0002
    INT31 :origin = 0xFFBE,length = 0x0002
    Int32. :origin = 0xFFC0、length = 0x0002
    INT33 :origin = 0xFFC2,length = 0x0002
    INT34 :origin = 0xFFC4,length = 0x0002
    INT35. :origin = 0xFFC6、length = 0x0002
    INT36 :origin = 0xFFC8,length = 0x0002
    INT37 :origin = 0xFFCA,length = 0x0002
    INT38 :origin = 0xFFCC,length = 0x0002
    INT39. :origin = 0xFFCE,length = 0x0002
    INT40. :origin = 0xFFD0、length = 0x0002
    INT41 :origin = 0xFFD2,length = 0x0002
    INT42. :origin = 0xFFD4、length = 0x0002
    INT43 :origin = 0xFFD6、length = 0x0002
    INT44 :origin = 0xFFD8、length = 0x0002
    INT45. :origin = 0xFFDA,length = 0x0002
    INT46 :origin = 0xFFDC,length = 0x0002
    INT47. :origin = 0xFFDE,length = 0x0002
    INT48 :origin = 0xFFE0、length = 0x0002
    INT49 :origin = 0xFFE2,length = 0x0002
    INT50 :origin = 0xFFE4,length = 0x0002
    INT51. :origin = 0xFFE6,length = 0x0002
    INT52. :origin = 0xFFE8、length = 0x0002
    INT53 :origin = 0xFFEA,length = 0x0002
    INT54. :origin = 0xFFEC,length = 0x0002
    INT55 :origin = 0xFFEE,length = 0x0002
    INT56 :origin = 0xFFF0,length = 0x0002
    INT57. :origin = 0xFFF2,length = 0x0002
    INT58 :origin = 0xFFF4,length = 0x0002
    INT59. :origin = 0xFFF6、length = 0x0002
    INT60 :origin = 0xFFF8,length = 0x0002
    INT61. :origin = 0xFFFA,length = 0x0002
    INT62 :origin = 0xFFFC,length = 0x0002
    复位 :origin = 0xFFFE,length = 0x0002
    }/*********
    
    /*
    指定段分配到内存中 */
    ********* /
    
    SECTIONS
    {
    .bss :{}> RAM | RAM2 /*全局和静态变量 *
    .data :{}> RAM | RAM2 /*全局和静态变量 *
    .TI.noinit:{}> RAM | RAM2 /*用于#pragma noinit *
    sysmem :{}> RAM /*动态内存分配区域*/
    堆栈 :{}> RAM (高) /*软件系统堆栈 //
    
    #ifndef __large_code_model__
    .text :{}>闪存 /*代码 */
    #else
    .text :{}>> FLASH2 | FLASH /*代码 */
    #endif
    .text:_ISR:{}> FLASH /* ISR 代码空间 *
    .cinit :{}>闪存 /*初始化表 */
    #ifndef __large_data_model__
    .const :{}>闪存 /*常量数据 */
    #else
    .const :{}>> FLASH | FLASH2 /*常量数据 */
    #endif
    .cio :{}> RAM /* C I/O 缓冲器 *
    
    .pinit :{}>闪存 /* C++构造函数表 *
    二进制文件 :{}>闪存 /*引导时初始化表*/
    init_array:{}> FLASH /* C++构造函数表 *
    .mspabi.exidx:{}>闪存 /* C++构造函数表 *
    .mspabi.extab:{}> FLASH /* C++构造函数表 */
    #ifdef __TI_Compiler_version__
    #if __TI_Compiler_version__>=15009000
    #ifndef __large_code_model__
    .TI.ramfunc:{} load=flash,run=RAM,table (BINIT)
    其他
    .TI.ramfunc:{} load=flash | FLASH2、run=RAM、table (BINIT)
    endif
    #endif #endif #endif
    
    
    信息 A :{}>INFOA /* MSP430 INFO 闪存段*/
    信息 B :{}>INFOB
    .infoC :{}>INFOC
    信息 D :{}>INFOD
    .flash3:{}> FLASH3
    /* 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
    .int18. :{} > INT18
    .int19. :{} > INT19
    .int20. :{} > INT20
    .int21. :{} > INT21
    .int22. :{} > INT22
    .int23. :{} > INT23
    .int24. :{} > INT24
    .int25. :{} > INT25
    .int26. :{} > INT26
    .int27. :{} > INT27
    .int28 :{} > INT28
    .int29 :{} > INT29
    .int30 :{} > INT30
    .int31. :{} > INT31
    .int32. :{} > Int32
    .int33. :{} > INT33
    .int34. :{} > INT34
    USCI_B2 :{*(.int35)}> INT35 type = VECT_init
    USCI_A2 :{*(.int36)}> INT36 type = VECT_init
    端口4. :{*(.int37)}> INT37类型= VECT_INIT
    PORT3 :{*(.int38)}> INT38类型= VECT_INIT
    TIMER2_A1:{*(.int39 )}> INT39 TYPE = VECT_INIT
    TIMER2_A0:{*(.int40)}> INT40 type = VECT_INIT
    DAC12 :{*(.int41)}> INT41 type = VECT_init
    RTC :{*(.int42 )}> INT42 type = VECT_init
    .int43. :{} > INT43
    端口2 :{*(.int44)}> INT44 type = VECT_init
    USCI_B1 :{*(.int45 )}> INT45 type = VECT_init
    USCI_A1 :{*(.int46)}> INT46 type = VECT_init
    端口1 :{*(.int47 )}> INT47类型= VECT_INIT
    Timer1_A1:{*(.int48)}> INT48 type = VECT_init
    Timer1_A0:{*(.int49)}> INT49类型= VECT_INIT
    DMA :{*(.int50)}> INT50类型= VECT_INIT
    LDO_PWR :{*(.int51 )}> INT51 type = VECT_init
    TIMER0_A1:{*(.int52)}> INT52 type = VECT_INIT
    TIMER0_A0:{*(.int53)}> INT53 type = VECT_INIT
    ADC12. :{*(.int54)}> INT54 type = VECT_init
    USCI_B0 :{*(.int55)}> INT55 type = VECT_init
    USCI_A0 :{*(.int56)}> INT56 type = VECT_init
    WDT :{*(.int57 )}>INT57 type = VECT_init
    TIMER0_B1:{*(.int58 )}> INT58 TYPE = VECT_INIT
    TIMER0_B0:{*(.int59 )}> INT59 TYPE = VECT_INIT
    Comp_B :{*(.int60)}> INT60 type = VECT_init
    联合国管理信息系统 :{*(.int61 )}>INT61 type = VECT_INIT
    SYSNMI :{*(.int62)}> INT62 type = VECT_init
    复位 :{} >复位/* MSP430复位矢量 */
    }/
    
    ********* /*
    包括外设内存映射 */
    ********* /-l
    
    msp430f5359.cmd
    

     是的、我在链接器文件中定义了.flash3。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我对 Fresh Project 进行了这些(2)更改、并为 AUDIO_MEM 添加了定义、并且根据.map 文件正确分配了地址。 我没有您的设备、因此我实际上无法尝试加载它。

    您的代码中是否有任何对 AUDIO_MEM 的引用? 链接器在我添加诸如"volatile unsigned long dummy = AUDIO_MEM[5];"的内容之前删除了 mine 中的变量
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../voice_5F00_Test.zipI在我的代码中没有任何对 AUDIO_MEM 的引用。 我已在主文件中包含 audio_mem、并更改了链接器文件管理器以查看是否填充了内存。 我要附加项目的压缩 zip 文件。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我建议您添加(可能是虚拟)引用、因为链接器在我添加诸如"volatile unsigned long dummy = audio_MEM[5];"的内容之前删除了 mine 中的变量
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢您的所有帮助! 感谢您的支持。