-2

我想用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 是用汇编代码编写的。谢谢。

4

2 回答 2

0

将您的代码编译成可执行文件并在 avr-studio 中对其进行调试。切换到程序集视图,您将能够将编译后的代码从其中一个复制并粘贴到您自己的 asm 文件中。根据延迟的长度,您可能会更好地考虑使用硬件计时器之一。

于 2014-05-11T10:41:18.087 回答
0

编译器已经将代码翻译成机器级指令。-S编译器选项也会以汇编器形式输出生成的代码。

然而,ATmega8 具有三个硬件定时器,它们可以产生独立于代码的周期精确定时,以及编译器转换中的任何可变性以及不同的选项。您应该使用硬件计时器而不是“指令循环”来实现延迟。

于 2014-05-11T11:50:31.327 回答