如何将ATMEL部件文件正确添加到C项目

如何将ATMEL部件文件正确添加到C项目,c,assembly,atmelstudio,C,Assembly,Atmelstudio,我在ATMEL Studio 7中有一个ATMEL C项目(ATmega328),需要混合一些汇编代码。 我不想使用C内联汇编asm()指令,因为我想将它作为一个纯汇编文件分开 我想在我的项目中加入.asm,但事情是这样的 对于C项目,它允许我创建.s或.s文件。显然,它们使用的汇编程序与.asm文件不同,因为在.s文件中,诸如.inc或.eq>之类的命令无法识别 但是,如果我将.s重命名为.asm,ATMEL Studio将不会调用汇编程序(对于纯汇编项目)。我想我可以通过预构建事件手动为.a

我在ATMEL Studio 7中有一个ATMEL C项目(ATmega328),需要混合一些汇编代码。 我不想使用C内联汇编
asm()
指令,因为我想将它作为一个纯汇编文件分开

我想在我的项目中加入
.asm
,但事情是这样的

对于C项目,它允许我创建
.s
.s
文件。显然,它们使用的汇编程序与
.asm
文件不同,因为在
.s
文件中,诸如
.inc
.eq>之类的命令无法识别

但是,如果我将
.s
重命名为
.asm
,ATMEL Studio将不会调用汇编程序(对于纯汇编项目)。我想我可以通过预构建事件手动为
.asm
文件调用正确的汇编程序来解决这个问题

如果有办法包含所有I/O寄存器定义,我可以坚持使用
.s
(尽管我更喜欢.asm)文件<代码>#include
本身不会生成错误,但也不会定义任何内容

#include <avr/io.h>

.global ReadFlux

ReadFlux:   
            ldi  r24,'#'
            out  TCNT0,r24               
            in   r24,TCNT0
            ret
但是使用avr-gcc.exe,我必须这样写:

out DDRB,r16
out _SFR_IO_ADDR(DDRB),r16

我想这个谜团现在已经解决了,但我还是更喜欢avrasm2.exe。

我很确定文档中会有一些帮助。你读了吗?--*.s或*.s文件可能由C编译器的汇编程序进行汇编,无论是GCC还是其他任何程序*.s和*.s之间的区别通常是,*.s(大写s)由C预处理器进行预处理。您可以在*.S中使用
#include
,但不能在*.S中使用。是的,我以前做过很多装配项目,但这都是纯装配项目。在这种情况下,将使用
.asm
。但在C项目中,似乎使用了另一个装配缺陷。文档不是最新的,有些东西可以用,有些则不行。使用.S和#include(正如我展示的那样)仍然不起作用,“avr/io.h”包含C语言的声明,而不是汇编语言。如果您在汇编中查找声明,可能会有一些声明,然后您可以包含这些声明。avrasm2生成的对象文件是否与avr gcc生成的对象文件兼容,以便您可以链接它们?我相信文档中会有一些帮助。你读了吗?--*.s或*.s文件可能由C编译器的汇编程序进行汇编,无论是GCC还是其他任何程序*.s和*.s之间的区别通常是,*.s(大写s)由C预处理器进行预处理。您可以在*.S中使用
#include
,但不能在*.S中使用。是的,我以前做过很多装配项目,但这都是纯装配项目。在这种情况下,将使用
.asm
。但在C项目中,似乎使用了另一个装配缺陷。文档不是最新的,有些东西可以用,有些则不行。使用.S和#include(正如我展示的那样)仍然不起作用,“avr/io.h”包含C语言的声明,而不是汇编语言。如果您在汇编中查找声明,可能会有一些,然后您可以包含这些声明。avrasm2生成的对象文件是否与avr gcc生成的对象文件兼容,以便您可以链接它们?