Und wozu das alles? Für PID-Regler oder so? Oder sin/cos?
Nette Spielwiese übrigens, hier der logarithmus dualis:
Code:
static inline uint8_t log_2 (uint8_t);
// log(x) / log(2) mit 1 <= x < 2
uint8_t log_2 (uint8_t x)
{
uint8_t log, cnt;
asm volatile ("; %[log] = log_2 (%[x]) " "\n\t"
"ldi %[cnt], 7" "\n\t"
"clr %[log]" "\n"
"0:" "\t"
"lsl %[log]" "\n\t"
"fmul %[x], %[x]" "\n\t"
"brcc 1f" "\n\t"
"ror r1" "\n\t"
"inc %[log]" "\n"
"1:" "\t"
"mov %[x], r1" "\n\t"
"dec %[cnt]" "\n\t"
"brne 0b" "\n\t"
"clr __zero_reg__"
: [log] "=r" (log), [x] "=a" (x), [cnt] "=d" (cnt)
: "1" (x)
);
return log;
}
Lesezeichen