[AVR单片机] AVR 在atmel studio 6.1中,C语言如何插入asm

[复制链接]
 楼主| Cheky 发表于 2013-8-2 10:41 | 显示全部楼层 |阅读模式
在C语言中,能用#asm,,,#End asm吗?Asm中,如何调用C中的变量.
john_lee 发表于 2013-8-2 11:14 | 显示全部楼层
看gcc document
airwill 发表于 2013-8-2 15:10 | 显示全部楼层
atmel studio 6.1 只是个集成环境, 不包含编译器的.
用不同的编译器, 就要使用各个编译器规定的 asm 内嵌编写规则.
john_lee 发表于 2013-8-2 15:27 | 显示全部楼层
airwill 发表于 2013-8-2 15:10
atmel studio 6.1 只是个集成环境, 不包含编译器的.
用不同的编译器, 就要使用各个编译器规定的 asm 内嵌编 ...

以前的AVR Studio才不包括编译器,而Atmel Studio都是内置了GCC的:
“Atmel Studio 6 includes a powerful editor with visual assist, a GNU C/C++ Compiler and a New Project Wizard to jump-start as well as ease your application code development. ”
airwill 发表于 2013-8-2 15:31 | 显示全部楼层
john_lee 发表于 2013-8-2 15:27
以前的AVR Studio才不包括编译器,而Atmel Studio都是内置了GCC的:
“Atmel Studio 6 includes a powerf ...

谢谢指正.
看来好久没有用这个开发环境, 现在这么大的改进都不知道了.
又一次说瞎话了, 同时向楼主道歉, 不好意思.
huangxz 发表于 2013-8-2 15:53 | 显示全部楼层
airwill 发表于 2013-8-2 15:31
谢谢指正.
看来好久没有用这个开发环境, 现在这么大的改进都不知道了.
又一次说瞎话了, 同时向楼主道歉,  ...

这个开发环境大如牛,我们都还在用最后一个小的4.19,有点伤感啊。
airwill 发表于 2013-8-2 16:03 | 显示全部楼层
gcc 的嵌入汇编, 可以参考库里的例子.
上一个计算 CRC16 的例程, 来自 include\util\crc16.h

static __inline__ uint16_t
_crc16_update(uint16_t __crc, uint8_t __data)
{
        uint8_t __tmp;
        uint16_t __ret;

        __asm__ __volatile__ (
                "eor %A0,%2" "\n\t"
                "mov %1,%A0" "\n\t"
                "swap %1" "\n\t"
                "eor %1,%A0" "\n\t"
                "mov __tmp_reg__,%1" "\n\t"
                "lsr %1" "\n\t"
                "lsr %1" "\n\t"
                "eor %1,__tmp_reg__" "\n\t"
                "mov __tmp_reg__,%1" "\n\t"
                "lsr %1" "\n\t"
                "eor %1,__tmp_reg__" "\n\t"
                "andi %1,0x07" "\n\t"
                "mov __tmp_reg__,%A0" "\n\t"
                "mov %A0,%B0" "\n\t"
                "lsr %1" "\n\t"
                "ror __tmp_reg__" "\n\t"
                "ror %1" "\n\t"
                "mov %B0,__tmp_reg__" "\n\t"
                "eor %A0,%1" "\n\t"
                "lsr __tmp_reg__" "\n\t"
                "ror %1" "\n\t"
                "eor %B0,__tmp_reg__" "\n\t"
                "eor %A0,%1"
                : "=r" (__ret), "=d" (__tmp)
                : "r" (__data), "0" (__crc)
                : "r0"
        );
        return __ret;
}
efen 发表于 2013-8-2 18:50 | 显示全部楼层
同问,想找编绎器的参考资料
qin552011373 发表于 2013-8-2 20:43 | 显示全部楼层
看GCC的文档说明   不过要英文好才可以看明白
worldsing 发表于 2013-8-2 22:19 来自手机 | 显示全部楼层
不用studio
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

33

帖子

0

粉丝
快速回复 返回顶部 返回列表