MUTEX_Display

Dependencies:   C12832

Committer:
corsa1600
Date:
Thu Mar 21 16:53:36 2019 +0000
Revision:
0:ac644277eadb
Child:
1:98ffcc251be8
LCD-Anzeige

Who changed what in which revision?

UserRevisionLine numberNew contents of line
corsa1600 0:ac644277eadb 1 // see: [[RTOS: Demonstration Setup]]
corsa1600 0:ac644277eadb 2 // Trace ab 15:00
corsa1600 0:ac644277eadb 3
corsa1600 0:ac644277eadb 4 #include "mbed.h"
corsa1600 0:ac644277eadb 5 #include "C12832.h"
corsa1600 0:ac644277eadb 6
corsa1600 0:ac644277eadb 7 C12832 lcd (p5, p7, p6, p8, p11);
corsa1600 0:ac644277eadb 8
corsa1600 0:ac644277eadb 9 class Rgb
corsa1600 0:ac644277eadb 10 {
corsa1600 0:ac644277eadb 11 private:
corsa1600 0:ac644277eadb 12 DigitalOut _led;
corsa1600 0:ac644277eadb 13
corsa1600 0:ac644277eadb 14 public:
corsa1600 0:ac644277eadb 15 Rgb(PinName ld) : _led(ld) { _led = 1;}; // Constructor
corsa1600 0:ac644277eadb 16
corsa1600 0:ac644277eadb 17 void LedOn() {
corsa1600 0:ac644277eadb 18 _led = 0;
corsa1600 0:ac644277eadb 19 }
corsa1600 0:ac644277eadb 20 void LedOff(){
corsa1600 0:ac644277eadb 21 _led.write(1);
corsa1600 0:ac644277eadb 22 }
corsa1600 0:ac644277eadb 23 };
corsa1600 0:ac644277eadb 24
corsa1600 0:ac644277eadb 25 class HasA
corsa1600 0:ac644277eadb 26 {
corsa1600 0:ac644277eadb 27 private:
corsa1600 0:ac644277eadb 28 DigitalOut _led;
corsa1600 0:ac644277eadb 29
corsa1600 0:ac644277eadb 30 public:
corsa1600 0:ac644277eadb 31 HasA(PinName ld) : _led(ld) {}; // Constructor
corsa1600 0:ac644277eadb 32
corsa1600 0:ac644277eadb 33 void LedOn() {
corsa1600 0:ac644277eadb 34 _led = 1;
corsa1600 0:ac644277eadb 35 }
corsa1600 0:ac644277eadb 36 void LedOff(){
corsa1600 0:ac644277eadb 37 _led.write(0);
corsa1600 0:ac644277eadb 38 }
corsa1600 0:ac644277eadb 39 };
corsa1600 0:ac644277eadb 40
corsa1600 0:ac644277eadb 41 void Delay_Nonsense(uint32_t * DelayCounter, uint32_t const * TargetCount)
corsa1600 0:ac644277eadb 42 {
corsa1600 0:ac644277eadb 43 while(*DelayCounter <= *TargetCount)
corsa1600 0:ac644277eadb 44 {
corsa1600 0:ac644277eadb 45 *DelayCounter = *DelayCounter + 1;
corsa1600 0:ac644277eadb 46 }
corsa1600 0:ac644277eadb 47
corsa1600 0:ac644277eadb 48 *DelayCounter = 0;
corsa1600 0:ac644277eadb 49 }
corsa1600 0:ac644277eadb 50
corsa1600 0:ac644277eadb 51 //M3 r (p23); g (p24); b (p25);
corsa1600 0:ac644277eadb 52 /*
corsa1600 0:ac644277eadb 53 HasA Led1(LED1);
corsa1600 0:ac644277eadb 54 HasA Led2(LED2);
corsa1600 0:ac644277eadb 55 HasA Led3(LED3);
corsa1600 0:ac644277eadb 56 */
corsa1600 0:ac644277eadb 57 Rgb Led1(p23);
corsa1600 0:ac644277eadb 58 Rgb Led2(p24);
corsa1600 0:ac644277eadb 59 Rgb Led3(p25);
corsa1600 0:ac644277eadb 60
corsa1600 0:ac644277eadb 61 //void Led1_Blink(void *pvParameters)
corsa1600 0:ac644277eadb 62 void Led1_Blink() // red long
corsa1600 0:ac644277eadb 63 {
corsa1600 0:ac644277eadb 64 const int xDelay = 500;
corsa1600 0:ac644277eadb 65 uint32_t BlueDelay = 0;
corsa1600 0:ac644277eadb 66 const uint32_t TargetCount = 16000;
corsa1600 0:ac644277eadb 67
corsa1600 0:ac644277eadb 68 for(;;) {
corsa1600 0:ac644277eadb 69 for(int i = 0; i < 10; i++) { // randomnes
corsa1600 0:ac644277eadb 70 wait_ms(xDelay);
corsa1600 0:ac644277eadb 71 }
corsa1600 0:ac644277eadb 72
corsa1600 0:ac644277eadb 73 {
corsa1600 0:ac644277eadb 74 lcd.cls();
corsa1600 0:ac644277eadb 75 lcd.locate(0,3);
corsa1600 0:ac644277eadb 76 lcd.printf("Thread 1 RED LED blinks \r\nxxxxxxxx!");
corsa1600 0:ac644277eadb 77
corsa1600 0:ac644277eadb 78 Led1.LedOn();
corsa1600 0:ac644277eadb 79 Delay_Nonsense(&BlueDelay, &TargetCount);
corsa1600 0:ac644277eadb 80 wait_ms(xDelay);
corsa1600 0:ac644277eadb 81 Led1.LedOff();
corsa1600 0:ac644277eadb 82 Delay_Nonsense(&BlueDelay, &TargetCount);
corsa1600 0:ac644277eadb 83 wait_ms(xDelay);
corsa1600 0:ac644277eadb 84 }
corsa1600 0:ac644277eadb 85 }
corsa1600 0:ac644277eadb 86 }
corsa1600 0:ac644277eadb 87
corsa1600 0:ac644277eadb 88 void Led2_Blink() // green
corsa1600 0:ac644277eadb 89 {
corsa1600 0:ac644277eadb 90 const int xDelay = 250;
corsa1600 0:ac644277eadb 91 uint32_t BlueDelay = 0;
corsa1600 0:ac644277eadb 92 const uint32_t TargetCount = 16000;
corsa1600 0:ac644277eadb 93
corsa1600 0:ac644277eadb 94 for(;;) {
corsa1600 0:ac644277eadb 95 for(int i = 0; i < 10; i++) { // randomnes
corsa1600 0:ac644277eadb 96 wait_ms(xDelay);
corsa1600 0:ac644277eadb 97 }
corsa1600 0:ac644277eadb 98 {
corsa1600 0:ac644277eadb 99 lcd.cls();
corsa1600 0:ac644277eadb 100 lcd.locate(0,3);
corsa1600 0:ac644277eadb 101 lcd.printf("Thread 2 GREEN LED blinks \r\nxxxxxxxx!");
corsa1600 0:ac644277eadb 102
corsa1600 0:ac644277eadb 103 Led2.LedOn();
corsa1600 0:ac644277eadb 104 Delay_Nonsense(&BlueDelay, &TargetCount);
corsa1600 0:ac644277eadb 105 wait_ms(xDelay);
corsa1600 0:ac644277eadb 106 Led2.LedOff();
corsa1600 0:ac644277eadb 107 Delay_Nonsense(&BlueDelay, &TargetCount);
corsa1600 0:ac644277eadb 108 wait_ms(xDelay);
corsa1600 0:ac644277eadb 109 }
corsa1600 0:ac644277eadb 110 }
corsa1600 0:ac644277eadb 111 }
corsa1600 0:ac644277eadb 112
corsa1600 0:ac644277eadb 113 void Led3_Blink() // blue very short
corsa1600 0:ac644277eadb 114 {
corsa1600 0:ac644277eadb 115 const int xDelay = 100;
corsa1600 0:ac644277eadb 116 uint32_t BlueDelay = 0;
corsa1600 0:ac644277eadb 117 const uint32_t TargetCount = 16000;
corsa1600 0:ac644277eadb 118
corsa1600 0:ac644277eadb 119 for(;;) {
corsa1600 0:ac644277eadb 120 for(int i = 0; i < 10; i++) { // randomnes
corsa1600 0:ac644277eadb 121 wait_ms(xDelay);
corsa1600 0:ac644277eadb 122 }
corsa1600 0:ac644277eadb 123 {
corsa1600 0:ac644277eadb 124 lcd.cls();
corsa1600 0:ac644277eadb 125 lcd.locate(0,3);
corsa1600 0:ac644277eadb 126 lcd.printf("Thread 3 BLUE LED blinks \r\nxxxxxxxx!");
corsa1600 0:ac644277eadb 127
corsa1600 0:ac644277eadb 128
corsa1600 0:ac644277eadb 129 Led3.LedOn();
corsa1600 0:ac644277eadb 130 Delay_Nonsense(&BlueDelay, &TargetCount);
corsa1600 0:ac644277eadb 131 wait_ms(xDelay);
corsa1600 0:ac644277eadb 132 Led3.LedOff();
corsa1600 0:ac644277eadb 133 Delay_Nonsense(&BlueDelay, &TargetCount);
corsa1600 0:ac644277eadb 134 wait_ms(xDelay);
corsa1600 0:ac644277eadb 135 }
corsa1600 0:ac644277eadb 136 }
corsa1600 0:ac644277eadb 137 }
corsa1600 0:ac644277eadb 138
corsa1600 0:ac644277eadb 139 DigitalOut Led4(LED4);
corsa1600 0:ac644277eadb 140 volatile bool running = true;
corsa1600 0:ac644277eadb 141
corsa1600 0:ac644277eadb 142 // Callback function to pass arguments to params
corsa1600 0:ac644277eadb 143 void blink(DigitalOut *led) {
corsa1600 0:ac644277eadb 144 osThreadSetPriority(osThreadGetId(), osPriorityIdle);
corsa1600 0:ac644277eadb 145 while (running) {
corsa1600 0:ac644277eadb 146 *led = !*led;
corsa1600 0:ac644277eadb 147 wait(1);
corsa1600 0:ac644277eadb 148 }
corsa1600 0:ac644277eadb 149 }
corsa1600 0:ac644277eadb 150
corsa1600 0:ac644277eadb 151 // https://docs.mbed.com/docs/mbed-os-api-reference/en/latest/APIs/tasks/rtos/#thread
corsa1600 0:ac644277eadb 152
corsa1600 0:ac644277eadb 153 Thread thread1;//(osPriorityNormal, 400, NULL); //DEFAULT_STACK_SIZE, NULL); die default stack size funktioniert manchmal nicht laut Hr. Pucher
corsa1600 0:ac644277eadb 154 // Thread thread1;
corsa1600 0:ac644277eadb 155 Thread thread2;
corsa1600 0:ac644277eadb 156 Thread thread3;
corsa1600 0:ac644277eadb 157 // parametrisierter Thread
corsa1600 0:ac644277eadb 158 Thread pthread; //(osPriorityHigh, 400, NULL);//DEFAULT_STACK_SIZE, NULL);
corsa1600 0:ac644277eadb 159
corsa1600 0:ac644277eadb 160 int main() {
corsa1600 0:ac644277eadb 161 thread1.start(Led1_Blink);
corsa1600 0:ac644277eadb 162 thread2.start(Led2_Blink);
corsa1600 0:ac644277eadb 163 thread3.start(Led3_Blink);
corsa1600 0:ac644277eadb 164 // Start parametrisierter Thread mit Callback Funktion
corsa1600 0:ac644277eadb 165 pthread.start(callback(blink, &Led4));
corsa1600 0:ac644277eadb 166
corsa1600 0:ac644277eadb 167 osThreadSetPriority(osThreadGetId(), osPriorityIdle); // osPriorityHigh,
corsa1600 0:ac644277eadb 168 // osPriorityIdle
corsa1600 0:ac644277eadb 169 Thread::yield();
corsa1600 0:ac644277eadb 170 printf("Priority is %i\r\n", thread1.get_priority());
corsa1600 0:ac644277eadb 171 Thread::wait(1);
corsa1600 0:ac644277eadb 172
corsa1600 0:ac644277eadb 173 thread1.join();
corsa1600 0:ac644277eadb 174 thread2.join();
corsa1600 0:ac644277eadb 175 thread3.join();
corsa1600 0:ac644277eadb 176
corsa1600 0:ac644277eadb 177 while(1) {
corsa1600 0:ac644277eadb 178 }
corsa1600 0:ac644277eadb 179 thread1.terminate();
corsa1600 0:ac644277eadb 180 }
corsa1600 0:ac644277eadb 181
corsa1600 0:ac644277eadb 182