ATmega8基本数学运算理解

时间:2017-06-14 20:15:55

标签: math avr atmega

  1. 有人能告诉我ATmega8(或类似的8位proc。)如何实现数学运算,如寄存器逻辑上的减法,加法,除法,乘法?

  2. 我在哪里可以了解此操作的速度? (我知道除法和浮点运算很慢但是需要多少时间(多少微秒)?

2 个答案:

答案 0 :(得分:1)

websitemanual中包含每个汇编指令的周期数。但这些只对字节进行操作并进行整数运算。

各种C类型的实际数学指令在AVR Libc中编码为汇编指令,您可以下载和检查。当avr-gcc编译器遇到某些操作时,无论是整数还是浮点,编译器都会插入这些函数。您需要自己为所有机器指令添加循环。

答案 1 :(得分:0)

如果我的内存很好用 ATMega8 没有 FPU 所以所有浮动操作都是在8位或16位整数上编码的,所以即使是简单的操作也会占用一些说明而不是单一的。例如,添加a,b

  1. 提取add的指数和尾数

    这涉及很少的复制和转移/掩码操作

  2. 将一个尾数移到公共指数

    少数轮班掩码操作

  3. 添加mantissas

    一个adc,几次sin,cos,sqrt,...

  4. 正确的结果指数

    分支和少量转移/掩码操作

  5. 编码结果

    这涉及很少的复制和转移/掩码操作

  6. 正如您所看到的,您有很多简单添加的说明。浮动值的位宽越大,所需的指令就越多。因此花车的速度要慢很多倍......

    现在想象像for(SurveyProperty S_P : survey.getsurveypropertylist){ S_P.setSurvey(survey); } 这样的东西都涉及到一些n次多项式或二分搜索等的近似,其中一些是在浮点值上完成的,速度下降得更多。