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.

[参考译文] 编译器/MSP430FR5739:如何命名、包含和使用汇编语言、以及 CCS 4.3编译器的 Code Composer Studio 中 MSP430汇编语言的相关术语是什么?

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/651658/compiler-msp430fr5739-how-do-i-name-include-and-use-assembly-and-what-is-the-relevant-terminology-for-msp430-assembly-in-code-composer-studio-for-the-4-3-compiler-in-ccs

器件型号:MSP430FR5739

工具/软件:TI C/C++编译器

你(们)好。

我尝试在汇编语言中创建例程、因为我希望时钟周期的数量精确到依赖于时间的例程中。

在这种情况下、我使用什么文件扩展名?

包含.asm 文件时、#include 指令如何工作?

是否有一个在 code composer 中编译的示例工程以正确的方式使用 include 指令、提供在 C 语言中使用参数调用的符号、并在 R12中返回参数或类似的参数?

这些文档都讨论了 IAR 以及使用另一个汇编变量而不是 IAR 使用的变量。 显然、.s43文件的使用是 IAR 特有的、asm 文件用于 CCS。

我真的想阅读一些有关这方面的文档。

到目前为止、我有这个代码

; cdecls C、list、"msp430fr5739.h"  ;此器件的头文件 
; .text ; 保留 TIME_Waste _ASM: MOV R12、R15 ;将第一个参数“count”加载到 R15 L1: NOP ;无操作 十进制 R15. ;降低 R15 Jnz L1 ;如果 R15不为零,则跳转到 L1 (nop) 可重置 ;从子例程返回 .end

保存在名为 TIME_Waste ASM.asm 的文件中 、我将其添加到 CCS 的"MSP430 Compiler->Advanced Options->Assembler Options"-> Simulate source ".include filename"部分中。

我接收到的当前误差是


错误:符号"_system_pre_init"已定义

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

    [引用 user="Matthew Sergei Perrin"]保存在名为 time_Waste _asm.asm 的文件中 ,我在 CCS 中的 MSP430编译器->高级选项->汇编器选项->模拟源'.include filename'部分中添加了该文件。

    别那样做。  只需像任何其他源文件一样将 time_baste .asm 添加到项目中。  CCS 会识别扩展名为.asm 的文件并知道如何构建该文件。

    对您的源代码有一些评论...

    [引用用户="Matthew Sergei Perrin"]
    ;.cdecls C, list,"msp430fr5739.h"  ;此设备的头文件
    ;.text
    ;.retain[/quot]

    所有这些都已注释掉。  您可能不需要.cdecls 或.retain。  您确实需要.text。

    您还应该添加...

    全局 time_Waste _asm 

    以"."开头的单词。 是汇编器的指令。  MSP430汇编工具手册中介绍了所有这些工具

    您似乎打算从 C 代码调用此例程。  相关详细信息、请参阅 MSP430编译器手册中标题为将 C 和 C++与汇编语言相连接的部分

    谢谢、此致、

    乔治

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

    谢谢、

    我仔细阅读 了 cdecls 的 工作原理、是的、我同意我在这里不需要它。

    我删除了提及 asm 文件作为 include_path 的内容、并按照您的建议进行编译。

    我遇到的最大问题是使用 非20位助记符、忘记保留寄存器。

    最终结果是这样、它工作正常:

    cdecls C、list、"msp430fr5739.h";此器件的头文件
    
    全局_time_Waste _asm
    .text
    .retain
    
    ;注意:使用20位运算!
    _TIME_Waste _asm:
    图钉 A R15 ;保存 R15 (调用保存)
    sub.w #2、sp ;扩展 SP
    MOV R12、R15 ;将第一个参数“count”加载到 R15
    L1:
    NOP ;无操作
    十进制 R15. ;降低 R15
    Jnz L1 ;如果 R15不为零,则跳转至标签 L1 (nop)
    NOP ;两次 nops 使该例程的开销的总时钟数为40
    NOP ;它是 L1循环和 jnz 的倍数
    add.w #2、sp ;缩小 SP
    提升器 A R15 ;恢复保存的寄存器
    返回 ;从子例程返回
    
    .end