ISIX-RTOS – przykład 4 – wątkowa obsługa portu szeregowego RS232
Podobnie jak poprzednio klasa przechowuje referencje do obiektu portu szeregowego, a realizacja wątku dokonywana jest przez metodę wirtualną main() – list. 13.
List. 13. Implementacja metody main klasy key_transmitter
//Main task - read joy key and sent it to RS232 void key_transmitter::main() { //Previous key variable static short p_key = -1; serial.puts("Key A - enable LED1\r\n"); serial.puts("Key B - disable LED1\r\n"); serial.puts("Key C - enable LED2\r\n"); serial.puts("Key D - disable LED2\r\n"); serial.puts("Press joy on the stm32 butterfly\r\n"); for(;;) { //Get key short key = get_key(); //Check if any key is pressed if(key!=0 && p_key==0) { switch(key) { case KEY_OK: serial.puts("Key OK pressed\r\n"); break; case KEY_LEFT: serial.puts("Key LEFT pressed\r\n"); break; case KEY_RIGHT: serial.puts("Key RIGHT pressed\r\n"); break; case KEY_UP: serial.puts("Key UP pressed\r\n"); break; case KEY_DOWN: serial.puts("Key DOWN pressed\r\n"); break; } } //Previous key assignement p_key = key; //Wait short time isix::isix_wait( isix::isix_ms2tick(DELAY_TIME) ); } }
Na początku za pomocą metody puts() sterownika portu szeregowego są wysyłane teksty powitalne do portu szeregowego, a następnie program wchodzi do pętli głównej. Pętla główna wykonywana jest cyklicznie z czasem DELAY_TIME (25 ms), co umożliwia sprawdzenie stany joysticka eliminując drgania zestyków. W przypadku wykrycia zmiany stanu portów sprawdzany jest numer klawisza, a następnie za pomocą metody puts sterownika portu szeregowego, wypisywane są komunikaty, informujące o pozycji joysticka.