Nikolaj (03.05.2005 15:08, просмотров: 1) ответил _TMX_ на Как объявить функцию, возвращающую указатель на саму себя?
Ответ: Если на Си, то что-нибудь в этом роде // #############################################################################
typedef void( *FUNCTION )( void );
void Lab_1( void ){....}
void Lab_2( void ){....}
void Lab_3( void ){....}
void Lab_4( void ){....}
void Lab_5( void ){....}
void Lab_6( void ){....}
void Lab_7( void ){....}
void Lab_8( void ){....}
const FUNCTION func[] = { Lab_1, Lab_2, Lab_3, Lab_4, Lab_5, Lab_6, Lab_7, Lab_8 };
void InterruptRoutine( void ){
static int a;
func[a++ & 0x07]();
}
// #############################################################################
/*Да забыл добавить __C_task отбивает у финкции желание сохранять регистры(+)
Поэтому надо поосторожней, если не выходите за рабочие регистры r0-r3; r16-r23; r30-r31 то все ОК.А если ... то прийдется в "void InterruptRoutine(void)" сохранять доп. регистры вручную.
*/
unsigned int address;
void InterruptRoutine(void)
{
(void(*)())address;
}
__root __C_task void vLab_1(void)
{
.......
address = (unsigned int)vLab_2
}
// #############################################################################