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/MSP430F449:链接器错误

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/893652/ccs-msp430f449-linker-error

器件型号:MSP430F449
主题中讨论的其他器件: MSP430WARE

工具/软件:Code Composer Studio

我已将工作中的 IAR 代码迁移到 CCS、没有汇编错误。  但是、我有一个无法解决的链接器错误。

我从 TI CCS 空白 ASM 示例中复制了以下内容。

          cdecls C、list、"msp430.h" ;包含器件头文件

;------------------------------------------------------------------

          .def  重置                      ;将程序入口点导出到

                                                         ;使链接器知道它。

;------------------------------------------------------------------

          .text                                       ;汇编到程序存储器中。

 

          .retain                                  ;覆盖 ELF 条件链接

                                                         ;并保留当前部分。

 

          .retainrefs                             ;并保留具有的任何段

                                                        ;对当前段的引用。

;------------------------------------------------------------------

;堆栈指针定义

;------------------------------------------------------------------

           .global __stack_end

          .sect  .stack

 

重置         mov.w  #_stack_end、SP        ;初始化 stackpointer

 

 然后、我使用下面相同的格式定义了我的所有变量、如下所示。  我的最后一个变量大约为0600h、这完全在 RAM 资源中。

 garb               .equ     0200h  ;garb 表示 RAM 的开始

下面是构建错误。  没有报告的汇编错误。  使用 IAR、我从未需要查看或更改任何编译器或链接器设置、因为它会根据汇编代码和 MSP 器件自动设置这些设置。  CCS 不是这样吗????  请告知需要更改哪些内容才能修复它由于我使用了 TI CCS 默认空白汇编设置、因此我不希望进入编译器或链接器代码。  也就是说、如果汇编代码没有报告错误、它应该根据所选 MSP 器件进行编译、链接和正确加载。 谢谢。

****为项目 G4_Build 构建配置调试****

"C:\\ti\\ccs1000\\ccs\\utils\bin\\gmake"-k -j 4 all -O

构建目标:"G4_build.out"

调用:MSP430链接器

"c:/ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/bin/cl430 /ti/ccs1000/ccs/ccs_base/msp430/include /ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/include -vmsp -code_model=small --data_model=small --use_hw_mpy=16 --advice:power-define=__MSP430F449_-g --printf_support=minimal --diag_warn=225 --display_error_number_iph="-line_display_ipt="-line_f_line_display_info-display_ram_line_display_build="-cn"-line_display_mp4 -content_infote_display_policy"-line_display_line_display_linep.xml-line_display_policy"/ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/lib -line_display_line_display_linep-line_display_linep-linep-line_display_linep-line_display_gu4 -linep-content_linep-content_gu4 -out.cn/secome.xml-status.cn/secome.xml-content_line_display_line_display_policy"-linep-status.cn/secome.xml-status.cn_line_display_linep-status.  



"./lnk_MSP430F449.cmd"、第91行:错误#10099-D:程序不能放入可用存储器、或者该段包含需要无法为此段生成的 trampoline 的调用站点。 ".stack"大小为0x2ec2时、定位失败。  可用存储器范围:

  RAM         大小:0x800       未使用:0x800       最大孔:0x800     

错误#10010:链接期间遇到错误;未生成"G4_build.out"

>>编译失败

Makefile:141:目标"G4_build.out"的配方失败

gmake.1]:***[G4_build.out]错误1.

Makefile:137:目标'all'的配方失败

gmake:***[全部]错误2.

 ****构建完成****

 

 

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

    您好!

    您遇到的错误是链接器错误、因此与代码本身无关、而是与将数据分配到器件存储器的过程有关。

    MSP430F449器件具有2kB (0x800)的 RAM、而错误消息指示您使用的是几乎12kB (0x2EC2)的堆栈。  

    您能否检查项目构建选项上的选项?

    如果此参数为零、请在链接器.cmd 文件内部检查显示-stack 的文本 。  

    将这些设置为在 IAR 项目上分配的大小应该足以解决这个问题。  

    希望这对您有所帮助、

    拉斐尔

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

    我更改了基本选项以将堆栈大小设置为100h、链接器编译错误指示了该堆栈大小。  但是、它仍然报告相同的行91错误 ("fails for section ".stack" size 0x2ec2")。  在 IAR 系统中、我使用了汇编代码指令

    重置  mov  $800H,SP ;初始化 stackpointer

    这是唯一需要的指令。  我不记得必须调整任何其他设置、尽管我确信这些设置可用于特殊要求。  有了 CCS、 就有许多设置选项。  我是否应该使用汇编代码行指令来设置.stack 大小?

    是否有任何默认设置来根据汇编代码和 MSP430器件编译直接通用汇编语言代码、而无需特殊要求?  也就是说、无需了解所有可配置的"后台办公"编译器和链接器选项、即可轻松对简单的无差错汇编语言程序进行编码、编译、构建、链接并加载到 MSP430器件中。  

    您是否可以建议这样一个程序来设置所有内容、以便我只需像  使用 TI ASM 模板一样将汇编代码复制并粘贴到示例中?  谢谢。        

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

    我指的是此主题中的第一个帖子。

    我不明白为什么会发生这种情况...

    [引用 USER="Greg Piesinger55">调用:MSP430链接器

    "c:/ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/bin/cl430/ti/ccs1000/ccs/ccs_base/msp430/include/ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/include -vmsp -code_model=small --data_model=small --use_hw_mpy=16 --advice:power-define=__MSP430F449_-g --printf_support=minimal --diag_warn=225 --display_error_number_iph="-line_display_ipt="-line_f_line_display_info-display_ram_line_display_build="-cn"-line_display_mp4 -content_infote_display_policy"-line_display_line_display_linep.xml-line_display_policy"/ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/lib -line_display_line_display_linep-line_display_linep-linep-line_display_linep-line_display_gu4-linep-content_linep-content_gu4 -out.cn/secome.xml-status.cn/secome.xml-content_line_display_line_display_policy"-linep-status.cn/secome.xml-status.cn_line_display_linep-status. 



    "./lnk_MSP430F449.cmd"、第91行:错误#10099-D:程序不能放入可用存储器、或者该段包含需要无法为此段生成的 trampoline 的调用站点。 ".stack"大小为0x2ec2时、定位失败。  可用存储器范围:

      RAM         大小:0x800       未使用:0x800       最大孔:0x800     

    错误#10010:链接期间遇到错误;未生成"G4_build.out"

    >>编译失败
    [/报价]

    我没有复制它。  如果您将 CCS 项目重新置于此状态并提交、我将不胜感激。  要创建项目的 zip 文件、请按照文章 共享项目中的说明进行操作。  然后将该 zip 文件附加到下一篇文章中。

    谢谢、此致、

    乔治

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

    谢谢 George。  您无法复制它、这是我尝试使用更少的代码构建它的线索。  通过省去大量代码、可以正确构建。  我添加了反向代码、直到添加一条额外的行导致代码失败。  下面插入了工作时的结果。  问题是堆栈仍然会将所有 RAM 都吸走。  请注意、只剩下2个字节的 RAM。  再添加一行代码会导致链接器行91错误。   完整代码在 IAR 中运行、因此我不会使用所有可用的 SP430 RAM。

     

    我注意到 CCS 在编码方面比 IAR 更正式。   我是否必须 在 CCS 中声明.bss 或.data 段以防止这种情况?    CCS 中的汇编代码中必须包含 IAR 中不需要的一些语句、 以防止栈抓取所有 RAM。  链接器会根据我的请求报告堆栈大小为0100h。

     

    是否有任何人拥有包含所有锅炉平板的装配语言程序模板以正确运行、因此我只需插入代码?  谢谢。

    Greg   

     

     

     

     

     

    ****为项目 ti-test 构建配置调试****

     

    "C:\\ti\\ccs1000\\ccs\\utils\bin\\gmake"-k -j 4 all -O

     

    构建文件:"../TI_main.asm"

    调用:MSP430编译器

    "c:/ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/bin/cl430 -vmsp -code_model=small --data_model=small --near_data=globals --use_hw_mpy=16 --include_path="C:/ti/ccs1000/ccs/ccs_base/msp430/include --include_path="C:/TI_test"--include_path="C:/ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/include --advice:power_us="preproc_off="-print_us_infote_display_suppremote_suppremote_tine_display_probe.g=-cn_proc-print_prob_prob_suppremote_supp_--f_probe_suppremote_suppremote_display_probe.g_prob_---us_prob_probe_display_probe_display_prob_-----_probe_display_

    >>警告:--near_data 仅适用于大型数据模型。 选项被忽略。

    完成构建:"../TI_main.asm"

     

    构建目标:"TI-test.out"

    调用:MSP430链接器

    "c:/ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/bin/cl430 /ti/ccs1000/ccs/ccs_base/msp430/include /ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/include -vmsp -code_model=small --data_model=small --near_data=globals --use_hw_warn=16 --advice:pow="all"--define="_MSP430F449_-g --printf_support=minimal --diag_warn=ti ---ti--ipt_example_display_zh-out-out-link_linep-out_linep-status-out_ram_zh-out.xml-out_linep-status-out_ram_zh-out_content_ram_info-out.iptise.xml-out_display_linep-out_linep-out_zh-out_linep-out_linep-out_content_content_content_content_status.xml-out.ipt.ips.mp.ipt.ips.ipt.ipt.ipt.ipt.ip_content-out.ipt.ins-out.ipt.ipt.ipt.ip.in_content-out.ipt.ipt.ip./ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/lib  

    >>警告:--near_data 仅适用于大型数据模型。 选项被忽略。

    完成构建目标:"TI-test.out"

     

     

    ****构建完成****

     

     

    秘书长的报告

                     MSP430链接器 PC v20.2.0                     

    秘书长的报告

    >> 2020年4月2日08:38:20链接

     

    输出文件名:

    入口点符号:"复位"地址:00000200

     

     

    存储器配置

     

            名称              长度     使用    未使用  的属性   填充

    ------------ ----  ------  ----  ----  --------  

     SFR                  00000000   00000010  00000000  00000010  RWIX

     外设_8位     00000010   000000f0  00000000  000000f0  RWIX

     外设_16BIT     00000100   00000100  00000000  00000100  RWIX

     RAM                   00000200   00000800  000007fe  00000002  RWIX

     INFOB                 00001000   00000080  00000000  00000080  RWIX

     INFOA                 00001080   00000080  00000000  00000080  RWIX

                     存00001100   0000eee0  00000008  0000eed8  RWIX

     INT00                 0000ffe0 00000002  00000002  00000000  RWIX

     INT01                 0000ffe2   00000002  00000002  00000000  RWIX

     INT02                 0000ffe4   00000002  00000002  00000000  RWIX

     INT03                 0000ffe6   00000002  00000002  00000000  RWIX

     INT04                0000ffe8   00000002  00000002  00000000  RWIX

     INT05                 0000ffea   00000002  00000002  00000000  RWIX

     INT06                 0000ffec   00000002  00000002  00000000  RWIX

     INT07                 0000ffee   00000002  00000002  00000000  RWIX

     INT08                 0000fff0   00000002  00000002  00000000  RWIX

     INT09                 0000fff2   00000002  00000002 00000000   RWIX

     INT10                 0000fff4   00000002  00000002  00000000  RWIX

     INT11                 0000fff6   00000002  00000002  00000000  RWIX

     INT12                 0000fff8   00000002  00000002  00000000  RWIX

     INT13                 0000fffa   00000002  00000002  00000000  RWIX

     INT14                 0000fffc   00000002  00000002  00000000  RWIX

     重置                0000fffe   00000002  00000002  00000000  RWIX

     

     

    部分分配映射

     

     输出                                 属性/

    段     原点     长度      输入段

    ---- --------   ------   --------

    .stack     0    00000200    000007fe     

                     00000200    000007fe     TI_main.obj (.stack)

     

    .text     0    00001100    00000008     

                     00001100    00000008     rts430_eabi.lib:isr_trap.asm.obj (.text:_isr:_TI_isr_trap)

     

    .cinit     0    00001100    00000000    未初始化

     

    binit     0    00001100    00000000     

     

    init_array

    0            00001100    00000000    未初始化

     

    BASITITIMER

    0            0000ffe0    00000002     

                     0000ffe0    00000002     rts430_eabi.lib:int00.asm.obj (.int00)

     

    端口2     0    0000ffe2    00000002     

                     0000ffe2    00000002     rts430_eabi.lib:int01.asm.obj (.int01)

     

    USART1TX   0    0000ffe4    00000002     

                     0000ffe4    00000002     rts430_eabi.lib:int02.asm.obj (.int02)

     

    USART1RX   0    0000ffe6    00000002     

                     0000ffe6    00000002     rts430_eabi.lib:int03.asm.obj (.int03)

     

    端口1     0    0000ffe8    00000002     

                     0000ffe8    00000002     rts430_eabi.lib:int04.asm.obj (.int04)

     

    TIMERA1   0    0000ffea    00000002     

                     0000ffea    00000002     rts430_eabi.lib:int05.asm.obj (.int05)

     

    TIMERA0      0000ffec    00000002     

                     0000ffec    00000002    rts430_eabi.lib:int06.asm.obj (.int06)

     

    ADC12     0    0000ffee    00000002     

                     0000ffee    00000002     rts430_eabi.lib:int07.asm.obj (.int07)

     

    USART0TX   0    0000fff0    00000002     

                     0000fff0    00000002   rts430_eabi.lib:int08.asm.obj (.int08)

     

    USART0RX   0    0000fff2    00000002     

                     0000fff2    00000002     rts430_eabi.lib:int09.asm.obj (.int09)

     

    WDT       0    0000fff4    00000002     

                     0000fff4    00000002     rts430_eabi.lib:int10.asm.obj (.int10)

     

    COMPARATORA

    0            0000fff6    00000002     

                     0000fff6    00000002     rts430_eabi.lib:int11.asm.obj (.int11)

     

    TIMERB1   0    0000fff8    00000002     

                     0000fff8    00000002     rts430_eabi.lib:int12.asm.obj (.int12)

     

    TIMERB0      0000fffa    00000002     

                     0000fffa    00000002     rts430_eabi.lib:int13.asm.obj (.int13)

     

    NMI       0    0000fffc    00000002     

                     0000fffc    00000002     rts430_eabi.lib:int14.asm.obj (.int14)

     

    .reset     0    0000fffe    00000002     

                     0000fffe    00000002     TI_main.obj (.reset)

     

    模块总结

     

          模块            代码   ro 数据   RW 数据

          ----             ------   ----

       

          TI_main.obj        0      2         0      

       +--+---------------- +--- +--- +--- +

          总计:            0      2         0      

                                                     

       C:\ti\ccs1000\ccs\tools\compiler\ti-cgt-msp430_20.2.0.LTS \lib\rts430_eabi.lib

          ISR_TRAP_ASM.obj   8      0              

          int00.asm.obj      0      2         0      

          int01.asm.obj      0      2         0      

          int02.asm.obj      0      2         0      

          int03.asm.obj      0      2         0      

          int04.asm.obj      0      2         0      

          int05.asm.obj      0      2         0      

          int06.asm.obj      0      2         0      

          int07.asm.obj      0      2         0      

          int08.asm.obj      0      2         0      

          int09.asm.obj      0      2         0      

          int10.asm.obj      0      2         0      

          int11.asm.obj      0      2         0      

          int12.asm.obj      0      2         0      

          int13.asm.obj      0      2         0      

          int14.asm.obj      0      2         0      

       +--+---------------- +--- +--- +--- +

          总计:            8      30        0      

                                                   

          堆栈:            0      2046           

       +--+---------------- +--- +--- +--- +

          总计:      8      32        2046   

     

     

     

    000009fe __STACK_END         

    000007fe __STACK_SIZE        

    00001100 _TI_ISR_TRAP      

    0000ffe0 _TI_int00          

    0000ffe2 __TI_int01          

    0000ffe4 _TI_int02          

    0000ffe6 _TI_int03          

    0000ffe8 _TI_int04          

    0000ffea __TI_int05          

    0000ffec __TI_int06          

    0000ffee _TI_int07          

    0000fff0 _TI_int08          

    0000fff2 _TI_int09          

    0000fff4 _TI_INT10          

    0000fff6 _TI_INT11          

    0000fff8 _TI_INT12          

    0000fffa __TI_INT13          

    0000fffc __TI_INT14          

    FFFFFFFF __TI_pprof_out_hndl

    FFFFFFFF __TI_PRof _DATA_SIZE

    FFFFFFFF _TI_PROD_DATA_START

    FFFFFFFF __c_args__          

     

     

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

    映射文件中的这些行...

    [引用用户="Greg Piesinger55"]

    .stack     0    00000200    000007fe     

                     00000200    000007fe     TI_main.obj (.stack)

    [/报价]

    (笑声) 意味着源文件 TI_main.asm 包含创建长度为0x7fe 字节的.stack 段的代码。   

    我们在此论坛中是编译器、汇编器、链接器和相关工具方面的专家。  我们不是 MSP430编程方面的专家。  此时、这就是您需要的帮助。

    [引用用户="Greg Piesinger55"]是否有任何人有一个包含所有锅炉板的装配语言程序模板才能正常运行,因此我只需插入代码?

    我不知道任何此类示例。  我将向 MSP430器件专家发送有关此主题的通知。  

    谢谢、此致、

    乔治

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

    您好、Greg、

    有很多东西可帮助您轻松开始在汇编器中进行 MSP430编码。

    第一个也可能是最简单的示例是 CCS 及其 TI Resource Explorer 中的代码示例。 请在此处查看屏幕截图中的单个步骤:

    单击 Resource Explorer 按钮。 如果您看不到此窗口、由于之前使用 CCS 进行的活动、请转至"View >> Getting Started"、然后您将再次获得此视图。

    转至"软件"。 在这里、您可以看到"MSP430Ware - xxxx"如果不应该有绿色按钮、正如我在这里的屏幕截图中看到的那样、您需要先下载 MSP430Ware、然后再执行后续步骤。 您可以通过单击 MSP430Ware、然后选择"Install"选项来执行此操作。 然后开始安装。 成功安装后、应显示绿色按钮。

    通过单击左侧箭头打开"MSP430Ware"时、您将能够进入"Devices >> MSP430F4xx >> MSP430F449"

    您可以在此处转到"Peripheral Examples >> Assembly"、您可以在那里找到一些代码示例。 第一个通常是最简单的一个、即所谓的闪烁 LED。

    通过单击它、您可以在右侧将其可视化。 在源代码窗口的右上角有一个"import"按钮。 通过单击它、您可以触发导入、从而导入源代码、包括对相应项目的完整设置、从而完全正常工作。

    另一种方法是、再次从"Getting Started"视图开始、但单击"Create a new project"

    然后在弹出窗口中选择要使用的器件。

    为项目选择一个名称。

    并选择"Empty asm Project"

    然后单击"Finish"

    再次执行此操作将在汇编语言中创建一个完整的项目、您可以在其中开始添加代码。 但功能汇编工程的所有基本设置已包括在内...

    此外、在汇编语言中编写代码时、还有一些文档、这些文档当然很有用:

    在这个演示中、您甚至可以找到有关如何从 IAR 汇编语言迁移到 CCS 的提示

    此外、本文档还介绍了如何混合使用汇编代码和 C 代码。

    此致

    Peter

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

    你(们)好。  感谢您提供链接。  这是我的情况。  尽管多年来我不得不修改我的代码、因为我们的一些探头硬件(GPS 模块等)已经过时 2004年、我在 Windows 2000 PC 上使用 IAR 工具编写了代码。  这是一个大型程序(8000行汇编代码、注释和查找表)、几乎使用可用的每个 MSP430汇编指令。  代码工作正常、 仍在数百个探针上运行。  目标 是将代码迁移到现代 Windows 10 PC。  

    我使用了您提供的 PDF 中的 TI 迁移说明、并获得 了无差错的汇编编译。  问题是由于链接器错误、代码无法生成。  显然、TI 迁移说明和/或 TI 空白汇编构建模板尚未完成。

    我将再次搜索、但 我发现的唯一迁移帖子是来自放弃尝试的人。  我找到的所有 MSP430汇编项目都用于简单的闪烁光项目。   一个带有构建选项的相当完整的工作汇编代码示例将很有用。  我 在 CCS 工具中看到了一个选项 、用于使编译与早期版本的 CCS 兼容。  因为我相信我使用的是原始的 IAR 工具、这会有帮助吗?

    我将再试几天 CCS、但升级到最新的 IAR 工具可能更具成本效益。  谢谢。

    Greg  

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

    您好、Greg、

    明白。 当然、这是一个更困难的问题、因为一方面、如果没有整个项目、就无法在我们这边重现和调试、我知道 IDE 的错误消息有多"有用"。

    我在很多年前一直在使用汇编器、但也在使用 IAR 而不是 CCS。 当我切换到 CCS 时、我也主要切换到 C 语言编码、这也是因为我在使用 CCS 汇编命名法时遇到了障碍。

    切换到 IAR 最新版本、这可能是一个选项。 在汇编语言编码的情况下、旧的 MSP430 IAR 版本是免费/无限制的。 我不确定目前的情况如何、但也许您可以找到与 IAR 的协议、在那里、他们为您提供了一项无需 C 编译器的许可的特别优惠。 至少值得一试。

    除此之外、我还将与一些我的老同事进行联系、他们也从汇编语言迁移到 C 语言和 CCS。 也许他们知道如何解决您所面临的链接器问题。

    此致

    Peter

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

    您好、Greg、

    最好阅读一下、您已经可以执行大多数到 CCS 的转换。

    通读此帖子并不能提供解决问题的所有答案、尤其是 p。因为您的代码中的某些关键代码片段不可用。

    那么、让我们来分析一下其中的内容:

    -链接器报告提供了大部分答案:

    存储器配置

     

            名称           源   长度     使用    未使用  的属性   填充

    ------------ ----  ------  ----  ----  --------  

     SFR                 00000000  00000010 00000000 00000010 RWIX

     外设_8位     00000010  000000f0 00000000 000000f0 RWIX

     外设_16BIT    00000100  00000100 00000000 00000100 RWIX

     RAM                  00000200  00000800 000007fe 00000002 RWIX

     INFOB                00001000  00000080 00000000 00000080 RWIX

     INFOA                00001080  00000080 00000000 00000080 RWIX

     闪                存00001100  0000eee0 00000008 0000eed8 RWIX

    您的代码未放置在应该位于的闪存存储器区域中-已使用的存储 器8 -这是一些最合适的中断矢量

    但是、它看起来像是进入 RAM 区域-这个被填充-只剩下两个字节-最合适的是、最后一条指令有更多的2个字、不再适合。

    -您在第一个帖子中展示了一些代码,您说您将其用作起点

    很棒的酒店

    ;------------------------------------------------------------------
    ;堆栈指针定义
    ;------------------------------------------------------------------
              .global __stack_end
              .sect  .stack

    重置         mov.w  #_stack_end、SP        ;初始化 stackpointer

    因此、我假设您在这行之后继续编写代码、现在这就是问题所在。

    链接器始终将代码放入您之前指定的段中、直到您为新段命名

    您的代码应如下所示:

    很棒的酒店

    ;------------------------------------------------------------------
    ;堆栈指针定义
    ;------------------------------------------------------------------
              .global __stack_end
              .sect  .stack

       .text                                       ;汇编到程序存储器中。
                                                     ;告诉链接器以下部分
                                                     ;需要进入文本=闪存部分

    重置         mov.w  #_stack_end、SP        ;初始化 stackpointer

    … 继续执行代码

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

    感谢 Stefan、他修复了 RAM 问题。  我在2004年使用不需要使用段的 IAR 工具编写了此代码。  希望您能建议我如何正确定义 RAM 和堆栈部分。  下面是我转换为 CCS 时的 IAR 代码。  我从 TI ASM 模板开始、并在模板的"主循环部分"中添加了我的代码。

    ;------------------------------------------------------------------
    ;与 TI Code Composer Studio 一起使用的 MSP430汇编器代码模板
    ;------------------------------------------------------------------
               cdecls C、list、"msp430.h"      ;包含器件头文件
               
    ;------------------------------------------------------------------
               .def   重置       ;将程序入口点导出到
                                               ;使链接器知道它。
    ;------------------------------------------------------------------
               .text                         ;汇编到程序存储器中。
               .retain                     ;覆盖 ELF 条件链接
                                              ;并保留当前部分。
               .retainrefs              ;并保留具有的任何段
                                              ;对当前段的引用。

    ;------------------------------------------------------------------
    重置        mov.w  #_stack_end、SP                ;初始化 stackpointer
    ;StopWDT    mov.w  #WDTPW|WDTHOLD,&WDTCTL ;停止看门狗计时器(将其移到下面)

    ;------------------------------------------------------------------
    ;这里是主循环
    ;------------------------------------------------------------------

    ;********
    ;用于变量的 RAM 字
    ;********

    ; RAM 变量(字节)

    加尔布               .equ   0200h   ;garb 表示 RAM 的开始
    RX_STORE_FLAG     .equ   0201h
    LOW_BAT_FLAG      .equ   0202h
      (加上更多字节和字)
    ;------------------------------------------------------------------
    设置      ;配置模块和控制寄存器
    ;------------------------------------------------------------------

                     .align 2.
    StopWDT         MOV   #WDTPW+WDTHOLD、&WDTCTL      ;停止看门狗定时器

    SetupFLL2      bis.b   #020h、&FLL_CTL0         ;为 xtal (14uf)设置负载电容

                     MOV.b   #(64-1)、&SCFQCTL      ;2MHz 时钟
                     MOV.b   #FN_2、&SCFI0

    PWR_UP_POINT  调用   #Delay2                     ;等待大约半秒
         (以及更多 说明)

    ;------------------------------------------------------------------
    ;中断矢量 (在 IAR 中定义了我自己的矢量)
    ;------------------------------------------------------------------

          .sect  ".reset"               ;MSP430复位矢量(这是来自 TI 模板的矢量)
               短路 复位
               
             .sect  ".NMI_Vector"
              短接 DUMMEMY_NMI

             .sect  ".TIMERB0_VECTOR "
                DUMMEMY_TIMER_B7_2

               .sect  ".TIMERB1_Vector"
                短接 DUMMEY_TIMER_B7_1

             .sect  ".COMPARATORA_Vector"   
             .short   比较

             .sect  ".WDT_Vector"
             短整型   DUMMEY_watch_dog

             .sect  ".USART0RX_Vector"      
             .short   USART0RX_ISR

             .sect  ".USART0TX_Vector"
                短整型 DUMMEMY_USART0_TX

             .sect  ".adc_vector"
             DUMMEY_ADC12短接    

             .sect  ".TIMERA0_Vector"
                短接 DUMMEY_TIMER_A3_2

             .sect  ".TIMERA1_Vector"
                短接 DUMMEMY_TIMER_A3_1

             .sect  ".Port1_vector"          
             .SHORT   PPS_ISR

             .sect  ".port2_vector"         
             .short   switch_isr

             .sect  ".BASICTIME_VECTOR "   
             短整型   ADC_SAMP

               .end

    这是构建结果。

    ****为项目 ti2_test 构建配置调试****

    "C:\\ti\\ccs1000\\ccs\\utils\bin\\gmake"-k -j 4 all -O
     
    生成文件:"../main.asm"
    调用:MSP430编译器
    "c:/ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/bin/cl430 -vmsp -code_model=small --data_model=small --use_hw_mpy=16 --include_path="C /ti/ccs1000/ccs/ccs_base/msp430/include:/TI2_test"--include_path="C:/ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/include --use_hw_mpy=16 --include_define=_define=_supert_driag="-suppremote_suppremote_display_probe.g_suppremote_suppf-nature_suppf-nature_suppremote_display_guest_dature=-suppf-nature_suppf-prob_suppremote_suppf-nature_suppremote_display_guest_diag_suppremote_suppremote_sup  
    完成构建:"../main.asm"
     
    构建目标:"ti2_test.out"
    调用:MSP430链接器
    "c:/ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/bin/cl430 /ti/ccs1000/ccs/ccs_base/msp430/include /ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/include -vmsp -code_model=small --data_model=small --use_hw_mpy=16 --advice:power-define=__MSP430F449_-g --printf_support=minimal --diag_warn=225 --display_error_number_iptine-ram_zh-out_linep-out_line_display_linep-out-content_linep-out_linep-out_linep-content_linep-content_linep-out_linep-content_linep-content_linep-out.xml-out_zh-out_linep-out_linep-out_linep-out_content_content_linep-content_content_linep-out.cn_content_content_linep-out.cn_content_content_linep-out.track-content_content_content_content_content_content_content_content_content_content_content_content_content_content/latit_linep-out.track-out.track_content_content/latit_s./ti/ccs1000/ccs/tools/compiler/ti-cgt-msp430_20.2.0.LTS/lib  

    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段".NMI_Vector"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段".TIMERB0_VECTOR "
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段".TIMERB1_Vector"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段".COMPARATORA_Vector"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段".WDT_Vector"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段".USART0RX_Vector"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段".USART0TX_Vector"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段".adc_vector"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段".TIMERA0_Vector"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段".TIMERA1_Vector"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段".Port1_vector"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段".port2_vector"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段".BASICTIME_VECTOR "
    已完成构建目标:"ti2_test.out"
     

    ****构建完成****

    这是地图。

    秘书长的报告
                     MSP430链接器 PC v20.2.0                     
    秘书长的报告
    >>链接日期 2020年4月8日10:26:39

    输出文件名:   
    入口点符号:"复位" 地址:00001100


    存储器配置

            名称           源   长度     使用    未使用  的属性   填充
    ------------  ----  ------  ----  ----  --------  
     SFR                  00000000  00000010 00000010 00000000 RWIX
     外设_8位     00000010  000000f0 0000000a 000000e6 RWIX
     外设_16BIT    00000100  00000100 00000000 00000100 RWIX
     RAM                  00000200  00000800 00000200 00000600 RWIX
     INFOB                00001000  00000080 00000000 00000080 RWIX
     INFOA                00001080  00000080 00000000 00000080 RWIX
     闪存                00001100  0000eee0 00002eca 0000c016 RWIX
     INT00                0000ffe0  00000002 00000002 00000000 RWIX
     INT01                0000ffe2  00000002 00000002 00000000 RWIX
     INT02                0000ffe4  00000002 00000002 00000000 RWIX
     INT03                0000ffe6  00000002 00000002 00000000 RWIX
     INT04                0000ffe8  00000002 00000002 00000000 RWIX
     INT05                0000ffea  00000002 00000002 00000000 RWIX
     INT06                0000ffec  00000002 00000002 00000000 RWIX
     INT07                0000ffee  00000002 00000002 00000000 RWIX
     INT08                0000fff0  00000002 00000002 00000000 RWIX
     INT09                0000fff2  00000002 00000002 00000000  RWIX
     INT10                0000fff4  00000002 00000002 00000000 RWIX
     INT11                0000fff6  00000002 00000002 00000000 RWIX
     INT12                0000fff8  00000002 00000002 00000000 RWIX
     INT13                0000fffa  00000002 00000002 00000000 RWIX
     INT14                0000fffc  00000002 00000002 00000000 RWIX
     重置                0000fffe  00000002 00000002 00000000 RWIX


    部分分配映射

     输出                                 属性/
    段  页   原点     长度      输入段
    ----  --------   ------   --------
    .stack    0   00000800   00000200     
                     00000800   00000200    --hole --[填充= 0]

    .text     0   00001100   00002eca     
                     00001100   00002ec2    main.obj (.text)
                     00003fc2   00000008    rts430_eabi.lib:isr_trap.asc.obj (.text:_isr:_TI_isr_trap)

    .cinit    0   00001100   00000000    未初始化

    binit    0   00001100   00000000     

    init_array
    0            00001100   00000000    未初始化

    .adc_vector
    *         0   00000000   00000002     
                     00000000   00000002    main.obj (.adc_vector)

    .bASICTIME_VECTOR
    *         0   00000002   00000002     
                     00000002   00000002    main.obj (.BASICTIME_Vector)

    .COMPARATORA_Vector
    *         0   00000004   00000002     
                     00000004   00000002    main.obj (.COMPARATORA_vector)

    .Port1_vector
    *         0   00000008   00000002     
                     00000008   00000002    main.obj (.Port1_vector)

    port2_vector
    *         0   0000000a   00000002     
                     0000000a   00000002    main.obj (.port2_vector)

    TIMERA0_VECTOR
    *         0   0000000c   00000002     
                     0000000c   00000002    main.obj (.TIMERA0_vector)

    TIMERA1_Vector
    *         0   0000000e   00000002     
                     0000000e   00000002    main.obj (.TIMERA1_vector)

    USART0RX_Vector
    *         0   00000014   00000002     
                     00000014   00000002    main.obj (.USART0RX_Vector)

    .USART0TX_Vector
    *         0   00000016   00000002     
                     00000016   00000002    main.obj (.USART0TX_Vector)

    BASITITIMER
    0            0000ffe0   00000002     
                     0000ffe0   00000002    rts430_eabi.lib:int00.asm.obj (.int00)

    端口2     0   0000ffe2   00000002     
                     0000ffe2   00000002    rts430_eabi.lib:int01.asm.obj (.int01)

    USART1TX  0   0000ffe4   00000002     
                     0000ffe4   00000002    rts430_eabi.lib:int02.asm.obj (.int02)

    USART1RX  0   0000ffe6   00000002     
                     0000ffe6   00000002    rts430_eabi.lib:int03.asm.obj (.int03)

    端口1     0   0000ffe8   00000002     
                     0000ffe8   00000002    rts430_eabi.lib:int04.asm.obj (.int04)

    TIMERA1   0   0000ffea   00000002     
                     0000ffea   00000002    rts430_eabi.lib:int05.asm.obj (.int05)

    TIMERA0      0000ffec   00000002     
                     0000ffec   00000002    rts430_eabi.lib:int06.asm.obj (.int06)

    ADC12     0   0000ffee   00000002     
                     0000ffee   00000002    rts430_eabi.lib:int07.asm.obj (.int07)

    USART0TX  0   0000fff0   00000002     
                     0000fff0   00000002    rts430_eabi.lib:int08.asm.obj (.int08)

    USART0RX  0   0000fff2   00000002     
                     0000fff2   00000002    rts430_eabi.lib:int09.asm.obj (.int09)

    WDT       0   0000fff4   00000002     
                     0000fff4   00000002    rts430_eabi.lib:int10.asm.obj (.int10)

    COMPARATORA
    0            0000fff6   00000002     
                     0000fff6   00000002    rts430_eabi.lib:int11.asm.obj (.int11)

    TIMERB1   0   0000fff8   00000002     
                     0000fff8   00000002    rts430_eabi.lib:int12.asm.obj (.int12)

    TIMERB0      0000fffa   00000002     
                     0000fffa   00000002    rts430_eabi.lib:int13.asm.obj (.int13)

    NMI       0   0000fffc   00000002     
                     0000fffc   00000002    rts430_eabi.lib:int14.asm.obj (.int14)

    .reset    0   0000fffe   00000002     
                     0000fffe   00000002    main.obj (.reset)

    .NMI_Vector
    *         0   00000006   00000002     
                     00000006   00000002    main.obj (.NMI_Vector)

    TIMERB0_VECTOR  
    *         0   00000010   00000002     
                     00000010   00000002    main.obj (.TIMERB0_Vector)

    TIMERB1_VECTOR
    *         0   00000012   00000002     
                     00000012   00000002    main.obj (.TIMERB1_Vector)

    .wDT_Vector
    *         0   00000018   00000002     
                     00000018   00000002    main.obj (.WDT_Vector)

    模块总结

          模块            代码   ro 数据  RW 数据
          ----             ------      ----
       。
          main.obj          11970  28       0      
       +--+---------------- +--- +--- +--- +
          总计:            11970  28       0      
                                                      
       C:\ti\ccs1000\ccs\tools\compiler\ti-cgt-msp430_20.2.0.LTS \lib\rts430_eabi.lib
          ISR_TRAP_ASM.obj  8      0              
          int00.asm.obj     0      2        0      
          int01.asm.obj     0      2        0      
          int02.asm.obj     0      2        0      
          int03.asm.obj     0      2        0      
          int04.asm.obj     0      2        0      
          int05.asm.obj     0      2        0      
          int06.asm.obj     0      2        0      
          int07.asm.obj     0      2        0      
          int08.asm.obj     0      2        0      
          int09.asm.obj     0      2        0      
          int10.asm.obj     0      2        0      
          int11.asm.obj     0      2        0      
          int12.asm.obj     0      2        0      
          int13.asm.obj     0      2        0      
          int14.asm.obj     0      2        0      
       +--+---------------- +--- +--- +--- +
          总计:            8      30       0      
                                                      
          堆栈:            0      0        512    
       +--+---------------- +--- +--- +--- +
          总计:      11978  58512           


    全局符号:按名称按字母顺序排序

    地址名称                  
    ----   ----                
    000001a0 ADC12CTL0  

    (以及头文件中的更多内容)

    秘书长的报告

    我将堆栈设置为0200h、这就是我得到的所有结果。  也就是说、我定义的所有变量及其地址都不会出现在 RAM 空间中。  我只要求0200h 的堆栈。

    我还获得了我添加的所有矢量以及头文件中定义的所有矢量。  我想使用我的名字。  我是否需要删除头文件中 TI 定义的名称?  否则、我必须更改代码中的名称。

    如果您能提供任何意见或建议、我们将不胜感激。  谢谢。

    Greg

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

    您好、Greg、

    您可以解决您的初始问题。 我现在还看到、您已经在 IAR 中手动完成了所有代码放置、并且没有使用链接器为您完成该工作。

    为了解决其他问题、我在代码模板下放置了一个代码模板。 我希望这将帮助您解决剩余的部分。

    ;------------------------------------------------------------------
    ;与 TI Code Composer Studio 一起使用的 MSP430汇编器代码模板


    ;------------------------------------------------------------------
               cdecls C、list、"msp430.h"      ;包含器件头文件
               
    ;------------------------------------------------------------------
               .def   重置                  ;将程序入口点导出到
                                               ;使链接器知道它。
    ;------------------------------------------------------------------
    ;常量
               .sect ".const"                 ;使用数据段放置常量
    WordConst1 .uword 0xABCD
    WordConst2 .uword 0x1234
    ByteConst1 .byte   0x12
               .align 2                       ;使用字节和字之间的对齐来使下一个字对齐
    WordConst3 .uword 0x3333


    ;------------------------------------------------------------------
    ;变量
               .bss   var1、2                 ;分配大小为2字节的 var1
               .bss   var2、1                 ;分配大小为1字节的 var2
               .bss   var3、2                 ;分配大小为2字节的 var2

    ;------------------------------------------------------------------
               .text                          ;汇编到程序存储器中。
               .retain                        ;覆盖 ELF 条件链接
                                               ;并保留当前部分。
               .retainrefs                    ;并保留具有的任何段
                                               ;对当前段的引用。

    ;------------------------------------------------------------------
    重置      mov.w  #_stack_end、SP        ;初始化 stackpointer
    StopWDT    mov.w  #WDTPW|WDTHOLD、&WDTCTL ;停止看门狗计时器


    ;------------------------------------------------------------------
    ;这里是主循环
    ;------------------------------------------------------------------
               您的代码。。。
                                               

    ;------------------------------------------------------------------
    ;堆栈指针定义
    ;------------------------------------------------------------------
               .global __stack_end
               .sect  .stack
               
    ;------------------------------------------------------------------
    ;中断矢量
    ;------------------------------------------------------------------
               .sect  ".reset"               ;MSP430复位矢量
               短路 复位
               
               添加中断表

    使用此方法、例如用于放置变量-链接器为您执行地址计算的所有任务。 因此、当您添加或更改任何内容时、它将自动对齐并计算地址。

    好的、现在谈谈您的其他问题。

    -您使用的方法未显示变量,因为这不是由链接器完成的,而是手动为变量分配值。

    -我不建议更改头文件中的名称-保持这将保持可移植性并使用环境更新。
    我想您想做的就是这样、例如、对于 UART ISR:
             .sect  ".USART0RX_Vector"         ;->这是您将从器件头文件获取的向量的名称和位置
                                                                                    ->请勿更改此名称
             .short   USART0RX_ISR                     ;->这是激活此中断时要调用的函数的名称
                                                                                    ->您可以自由选择此名称、因此请在此处使用您的名称

    ~ Stefan

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

    谢谢 Stefan。  您的模板正是我要查找的模板。  2004年、当我编写初始代码时、IAR 工具非常简单易用。  无需了解有关链接器、段等的任何信息、因为 IAR 会自动处理所有这些"后台"工作。  因此、编程器可专注于将 MSP430引脚映射到 PWB 硬件组件、它们的设置例程和总体最终产品特性。

    您的模板应允许我完成 IAR 到 CCS 的迁移。  非常感谢您的帮助。  谢谢。

    Greg