LinkedIn YouTube Facebook
Szukaj

Wstecz
Artykuły

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.