Moin,
Und bei solchen Faxen auch nicht den guten, alten Bjarne Stroustrup
vergessen, der da meint, man sollte die passende Programmiersprache zum
Problem waehlen.
Bei einer Vorgabe von: Darf hoechstens <=128 Takte dauern, wird das
nicht unbedingt C sein.
Ich zitier' mal aus meinem LED-"Spektrumsanalyzer" aufm atmega16:
1 | adc_irq:
|
2 | in r6,0x3f ; save flag register
|
3 | ldi r25,0x08 ;
|
4 | out 0x38,r25 ; int ack
|
5 | in r25,0x05 ; read adc
|
6 | subi r25,128 ; convert to signed 8 bit
|
7 | st z,r25 ; store in buffer
|
8 | inc r30 ; increment buffer write pointer
|
9 | mov r25,r30
|
10 | andi r25,0x0f; every 16th time do not branch to nodisplay
|
11 | brne nodisplay
|
12 | ...
|
13 | nodisplay:
|
14 | out 0x3f,r6 ; restore flag register
|
15 | reti
|
Dabei liegt der 256 byte grosse Puffer genau an einer 256-Byte
Seitengrenze im RAM, weswegen man immer nur die unteren 8 bit vom
z-Register incrementieren muss und durch den Ueberlauf von R30 auch der
Puffer wieder von Anfang an beschrieben wird.
Gruss
WK