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.
工具/软件: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