Ho un PIC18F46K22 e lo programma con il compilatore XC8. Alla fine, avrò un sistema come un pc con stdin
e stdout
. Quindi nel loop principale ci sarà una funzione che sta verificando se ci sono nuovi input. Se c'è input, una funzione verrà chiamata di conseguenza. Quindi, ad esempio, quando inserisco una A stdin
, il PIC eseguirà una funzione simile function_A
invece della function_B
quale viene chiamata quando inserisco una B.
Quando il PIC ha terminato la funzione, voglio che il nuovo input venga inviato alla funzione. Quindi quando si preme A si apre il trasmettitore RS232, da quel momento ogni ingresso verrà inviato su RS232. Alla fine il progetto è un editor di testo autonomo. Quindi quando si preme A si apre il file system, da quel momento non si modifica più il testo ma si guarda attraverso un elenco di file. Ciò significa che premendo Su e Giù si intende qualcosa di diverso rispetto all'ambiente di modifica del testo.
Ho riflettuto molto su come programmare questo in C. L'ho pensato ieri sera e vorrei sapere se è possibile e se sì, come. Quello che voglio fare è:
- La
main
funzione chiama una funzione comefunction_A
function_A
cambia una variabile globalefunction_addr
nel puntatore di indirizzo della funzionein_function_A
- Da quel momento,
main
chiama la funzionefunction_addr
quando c'è un nuovo input.
Quindi quello di cui ho bisogno è una main
funzione che controlla se function_addr
è zero. Se lo è, una funzione 'normale' dovrebbe essere chiamata, come function_A
. In caso contrario, è function_addr
necessario chiamare la funzione at . Ho anche bisogno di un function_A
che cambi function_addr
in un puntatore a in_function_A
.
Nota: quando la funzione del filesystem dovrebbe essere chiusa, is_function_A
dovrebbe passare function_addr
a 0.
Quindi in sostanza la mia domanda è come posso
- Ottieni l'indirizzo di una funzione (e memorizzalo in una variabile)
- Chiama una funzione a un indirizzo specificato