J'ai un PIC18F46K22 et je le programme avec le compilateur XC8. Au final, j'aurai un système comme un pc avec stdin
et stdout
. Donc, dans la boucle principale, il y aura une fonction qui vérifie s'il y a une nouvelle entrée. S'il y a une entrée, une fonction sera appelée en conséquence. Ainsi, par exemple, lorsque j'entre un A stdin
, le PIC exécute une fonction similaire function_A
à celle function_B
qui est appelée lorsque j'entre un B.
Lorsque le PIC est terminé avec la fonction, je veux que la nouvelle entrée soit envoyée à la fonction. Donc, lorsque vous appuyez sur A ouvre l'émetteur RS232, à partir de ce moment, chaque entrée sera envoyée via RS232. Au final, le projet est un éditeur de texte autonome. Ainsi, lorsque vous appuyez sur A pour ouvrir le système de fichiers, à partir de ce moment, vous ne modifiez plus de texte mais vous parcourez une liste de fichiers. Cela signifie qu'appuyer sur Haut et Bas signifie quelque chose de différent que dans l'environnement d'édition de texte.
J'ai beaucoup réfléchi à la façon de programmer cela en C. J'ai pensé cela hier soir et j'aimerais savoir si c'est possible et si oui, comment. Ce que je veux faire c'est:
- La
main
fonction appelle une fonction commefunction_A
function_A
change une variable globalefunction_addr
en pointeur d'adresse de la fonctionin_function_A
- À partir de ce moment,
main
appelle la fonctionfunction_addr
lorsqu'il y a une nouvelle entrée.
Donc, ce dont j'ai besoin, c'est d'une main
fonction qui vérifie si elle function_addr
est nulle. Si c'est le cas, une fonction «normale» devrait être appelée, comme function_A
. Si ce n'est pas le cas, la fonction at function_addr
doit être appelée. J'ai également besoin d'un function_A
qui change le function_addr
en un pointeur in_function_A
.
Remarque: lorsque la fonction de système de fichiers doit être fermée, elle is_function_A
doit simplement passer function_addr
à 0.
Donc, fondamentalement, ma question est de savoir comment puis-je
- Récupère l'adresse d'une fonction (et la stocke dans une variable)
- Appeler une fonction à une adresse spécifiée