Mam PIC18F46K22 i programuję go za pomocą kompilatora XC8. Na koniec będę mieć system podobny do komputera z stdin
i stdout
. Tak więc w głównej pętli pojawi się funkcja sprawdzająca, czy jest nowe wejście. Jeśli jest wejście, funkcja zostanie odpowiednio wywołana. Na przykład, kiedy wprowadzę A stdin
, PIC uruchomi funkcję podobną function_A
do tej, function_B
która jest wywoływana, gdy wprowadzę B.
Kiedy PIC jest wykonywany z funkcją, chcę, aby nowe wejście zostało wysłane do funkcji. Tak więc po naciśnięciu A otwiera się nadajnik RS232, od tego momentu każde wejście będzie wysyłane przez RS232. Ostatecznie projekt jest samodzielnym edytorem tekstu. Kiedy więc naciśniesz A, otwiera system plików, od tej chwili nie edytujesz już tekstu, ale przeglądasz listę plików. Oznacza to, że naciśnięcie przycisku w górę lub w dół oznacza coś innego niż w środowisku do edycji tekstu.
Dużo zastanawiałem się, jak zaprogramować to w C. Myślałem o tym wczoraj i chciałbym wiedzieć, czy to możliwe, a jeśli tak, to w jaki sposób. Chcę zrobić:
main
Funkcja wywołuje funkcję jakfunction_A
function_A
zmienia zmienną globalnąfunction_addr
na wskaźnik adresu funkcjiin_function_A
- Od tego momentu
main
wywołuje funkcję wfunction_addr
momencie pojawienia się nowego wejścia.
Potrzebuję więc main
funkcji sprawdzającej, czy function_addr
wynosi zero. Jeśli tak, należy wywołać funkcję „normalną”, np function_A
. Jeśli nie jest, function_addr
należy wywołać funkcję at . Potrzebuję również, function_A
który zmienia function_addr
wskaźnik na in_function_A
.
Uwaga: kiedy funkcja systemu plików powinna być zamknięta, is_function_A
powinna zmienić się function_addr
na 0.
Więc w zasadzie moje pytanie brzmi: jak mogę
- Uzyskaj adres funkcji (i zapisz go w zmiennej)
- Wywołaj funkcję pod określonym adresem