Code:
typedef void (*function_t) (void);
extern void zeige (void);
extern void zeige2 (void);
function_t feld[] = {zeige, zeige2};
void caller (int addr, function_t zeige3)
{
feld[0]();
feld[1]();
zeige3();
((void(*)(void)) addr) ();
}

Zitat von
izaseba
Könnte mir mal jemand unter die Arme greifen und mir mal sagen wie ich das Miniprogramm in
AVR implementiere?
Gruß Sebastian
Geht genauso.
Obiger Code assemblier avr-gcc so:
Code:
.file "foo.c"
.arch atmega8
__SREG__ = 0x3f
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__tmp_reg__ = 0
__zero_reg__ = 1
.global __do_copy_data
.global __do_clear_bss
.global feld
.data
.type feld, @object
.size feld, 4
feld:
.word pm(zeige)
.word pm(zeige2)
.text
.global caller
.type caller, @function
caller:
/* prologue: frame size=0 */
push r14
push r15
push r16
push r17
/* prologue end (size=4) */
movw r14,r24
movw r16,r22
lds r30,feld
lds r31,(feld)+1
icall
lds r30,feld+2
lds r31,(feld+2)+1
icall
movw r30,r16
icall
movw r30,r14
icall
/* epilogue: frame size=0 */
pop r17
pop r16
pop r15
pop r14
ret
/* epilogue end (size=5) */
/* function caller size 25 (16) */
.size caller, .-caller
/* File "adc.c": code 25 = 0x0019 ( 16), prologues 4, epilogues 5 */
Lesezeichen