Difference between revisions of "Events.c"

From Nutwiki
Jump to: navigation, search
m
 
m (1 revision imported)
 
(No difference)

Latest revision as of 17:02, 27 October 2016

Das Beispiel events.c ist ein guter Test, um zu prüfen, ob die erzeugten Programme überhaupt laufen. Zum Testen schließen Sie das Board an ihren PC an. Falls Sie mehrere serielle Schnittstellen auf dem Board haben, müssen Sie ausprobieren, welche die richtige ist. Auf dem AT91SAM7X-EK ist es beispielsweise der Debug-Port. Auf Ihrem PC starten Sie ein Terminal-Programm. Falls Sie noch kein Terminal-Programm haben (Hyperterm ist icht unbedingt die beste Wahl) bietet sich unter Windows TerraTerm an. Die Einstellungen der seriellen Schnittstelle lauten 115200 Baud, 8N1.

File:Com 115200.PNG


Events.c gibt auf dem Terminal-Programm folgende Ausgabe aus:

File:Events.png

<source lang="c">

  1. include <cfg/os.h>
  1. include <stdio.h>
  2. include <io.h>
  1. include <dev/board.h>
  1. include <sys/thread.h>
  2. include <sys/timer.h>
  3. include <sys/event.h>

/*

* A global event queue, used as a mutex semaphore.
*/

static HANDLE mutex;

/*

* High priority background thread. 
*/

THREAD(High, arg) {

   NutThreadSetPriority(32);
   for(;;) {
       puts("Request");
       if (NutEventWait(&mutex, 2000)) {
           puts("Timeout");
       }
       else {
           puts("Acquired");
           NutSleep(2500);
           puts("Release");
           NutEventPost(&mutex);
       }
       NutSleep(1000);
   }

}

/*

* Low priority background thread. 
*/

THREAD(Low, arg) {

   NutThreadSetPriority(96);
   for(;;) {
       puts("                  Request");
       if (NutEventWait(&mutex, 3000)) {
           puts("                  Timeout");
       }
       else {
           puts("                  Acquired");
           NutSleep(3500);
           puts("                  Release");
           NutEventPost(&mutex);
       }
   }

}

/*

* Main application routine. 
*/

int main(void) {

   u_long baud = 115200;
   /*
    * Register the UART device, open it, assign stdout to it and set 
    * the baudrate.
    */
   NutRegisterDevice(&DEV_DEBUG, 0, 0);
   freopen(DEV_DEBUG_NAME, "w", stdout);
   _ioctl(_fileno(stdout), UART_SETSPEED, &baud);
   /*
    * Print title.
    */
   puts("\nNut/OS Event Queue Demo");
   puts("High     Main     Low      ");
   /*
    * Post an initial event. This will put the queue into signaled 
    * state and immediately grant the next call to NutEventWait().
    */
   NutEventPost(&mutex);
   /*
    * Start two background threads.
    */
   NutThreadCreate("high", High, 0, 256);
   NutThreadCreate("low", Low, 0, 256);
   for(;;) {
       puts("         Request");
       if (NutEventWait(&mutex, 1000)) {
           puts("         Timeout");
       }
       else {
           puts("         Acquired");
           NutSleep(1500);
           puts("         Release");
           NutEventPost(&mutex);
       }
       NutSleep(1000);
   }

} </source> events.c Copyright by egnite Software GmbH