我想用winAVR作为编译器在ATmega8中制作一个关于准确延迟库的代码,你有什么想法将下面的代码转换成汇编吗?我不知道转换代码,因为我不了解汇编。
这是代码。
static __inline__ void __variable_delay_cycles(unsigned long __count)
{
if (__count>65535)
{
__count=(__count-13)/6;
DelayCyclesUL(__count);
}
else
{
if (!__count)
return;
if (__count<10)
__count=1;
else
__count=(__count-6)/4;
DelayCyclesUI(__count);
}
}
DelayCyclesUI和DelayCyclesUL是用汇编代码编写的。 感谢。
答案 0 :(得分:0)
将您的代码编译成可执行文件并在avr-studio中进行调试。切换到装配视图,您可以将已编译的代码复制并粘贴到您自己的asm文件中。 根据延迟的长度,您可能更好地考虑使用其中一个硬件计时器。
答案 1 :(得分:0)
编译器已将代码转换为机器级指令。它-S
compiler option也会以汇编程序的形式输出生成的代码。
然而,ATmega8有三个硬件定时器,可以产生与代码无关的周期精确定时,以及具有不同选项的编译器转换的任何可变性。您应该使用硬件计时器而不是&#34;指令循环&#34;实施延误。