An dieser Stelle wird die 
			Funktionsweise des Programms zur Messung der 3 Bibliotheken 
			beschrieben.
 
  Das Programm muss folgende leisten: 1. 
			Ansteuerung des LED-Rings. 2. Abfragen der Zeit und 
			Prozessorauslastung (in Prozent) von den laufenden Aufgaben.
  
			1.  Ansterung des LED-Rings. 
			Beim ESP32 wird jede Millisekunde eine zusätzliche Verzögerung von 
			etwa 5 Mikrosekunden in den Signalausgang eingefügt. Dies liegt weit 
			außerhalb der Neopixel-Timing-Toleranz von 150 ns, sodass es in 
			einigen Pixeln zu falschen Werten kommt. Damit der LED_Ring die 
			gewünschte Farbe korrekt anzeigt, es gibt eine Sache die wir ändern 
			müssen und zwar wir sollen in jeder Bibliothek als GRBW schicken. 
			 Der Quellcode wurde so geschrieben, dass er lessbar ist und wenn 
			möglich die eingebauten Bibliothekensfunktionen verwenden. In diesem 
			Versuch haben wir 2 LEDs-Rings zwar 16 LEDs und 12 LEDs angesteuert. 
			Die Funktion zur Ansteuerung wurde es direkt mit einer for-Schleife 
			und selbst geschriebene Funktion gemacht, hier verglichen wir die 
			Zeit, wenn direkt alle LEDs angemacht werden und wenn einzelne LED 
			bis alle LEDs angemacht wird. Unten steht das Beispiel mit dem 
			Bibliothek Adafruit_Neopixel. void TurnOn( void ) { 
			    // For a set of 
			NeoPixels the first NeoPixel is 0, second is 1, all the way up to 
			the count of pixels minus one. 
			    // pixels.Color takes 
			RGB values, from 0,0,0 up to 255,255,255     
			for(i=0; i<NUMPIXELS; i++){         
			pixels.setPixelColor(i, Blue);          
			pixels.show();      }     
			delay(1000); } 
  Der Unterschied liegt an der Position der 
			Delay-Function, das obige Beispiel macht alle LEDs an.
 
  
			2. Abfragen der Ausführungszeit 
			und Prozessorauslastung (in Prozent) von den laufenden 
			Tasks/Threads. Die Messung lassen wir in einem 
			anderem Thread laufen, sodass jede Task seine eigene Aufgabe hat. 
			 char buffer[1024];   //ein 
			Buffer für die Rückgabe von Funktion "vTaskGetRunTime" 
			 unsigned int delayTime;   
			// Variable für die Intervall der Ausgabe 
			von Prozessorauslast(runtimestats) void time_stats(void* 
			pvparam){     int j = 1;     
			while(1)     {         
			printf("\nMessung :%d\n", j);          
			vTaskGetRunTimeStats(buffer);         
			printf("| Task | Run Time | Percentage\n");         
			printf("\n%s",buffer);         
			j++;         
			//printf("pvparam: %d",(*(int*)pvparam));         
			vTaskDelay((*(int*)pvparam)/portTICK_PERIOD_MS);  
			//delay mit eingegebene Parameter(in ms)     
			}     vTaskDelete(NULL); }
  void 
			get_CPU(int pms){     delayTime = pms;     
			//printf("delay:%d",delay);     
			xTaskCreatePinnedToCore(time_stats,"get_CPU",4096,(void*)&delayTime,3,NULL,0); 
			//Neue Task für runtimestats erstellen 
			}
  
			 Die Interval für die Ausgabe der Prozessorauslast ist 
			einstellbar("get_CPU(delay_in_ms)"). 
			
 
 
 
  |