Thread Beispiel

// Demoprogramm zum Multithreading für Mega und AVR32

// Das Programm ist nicht entprellt, ein kurzes Tasten führt daher zu

// mehrfacher Ausgabe des Strings

#ifdef AVR32

#define PORT_SW1 PORT_T1

#define PORT_SW2 PORT_T2

#endif

 

#thread 0010   // Hauptthread mit Task Wechsel alle 10 * 10ms =100ms
#thread 112810 // Thread 1 mit 128 byte & Task Wechsel 10*10ms =100ms

 

void thread1(void)

{

    while(true)  // Endlosschleife

    {

        if(!Port_ReadBit(PORT_SW2)) Msg_WriteText("Taster 2"); // SW2 gedrückt

    }

}

 

void main(void)

{

#ifdef AVR32

    // Pin jeweils auf Eingang & Pullup

    Port_Attribute(PORT_T1, PORT_ATTR_INPUT | PORT_ATTR_PULL_UP);

    Port_Attribute(PORT_T2, PORT_ATTR_INPUT | PORT_ATTR_PULL_UP);

#else

    Port_DataDirBit(PORT_SW1, PORT_IN);  // Pin auf Eingang

    Port_DataDirBit(PORT_SW2, PORT_IN);  // Pin auf Eingang

    Port_WriteBit(PORT_SW1, 1);  // Pullup setzen    

    Port_WriteBit(PORT_SW1, 1);  // Pullup setzen    

#endif

    Thread_Start(1,thread1); // Thread 1 starten

 

    while(true)     // Endlosschleife

    {

        if(!Port_ReadBit(PORT_SW1)) Msg_WriteText("Taster 1"); // SW1 gedrückt

    }

}