Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@6:f9befb0294e9, 2018-07-07 (annotated)
- Committer:
- zeneto
- Date:
- Sat Jul 07 02:17:40 2018 +0000
- Revision:
- 6:f9befb0294e9
- Parent:
- 5:ffba8ba016a7
FINAL DO FINAL
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
zeneto | 0:00e9a2a6f73a | 1 | #include "mbed.h" |
zeneto | 3:81621bb4f009 | 2 | #include "rtos.h" |
zeneto | 5:ffba8ba016a7 | 3 | #include "stdio.h" |
zeneto | 1:e7d2231abccc | 4 | |
zeneto | 6:f9befb0294e9 | 5 | //Projeto Final - Sistemas Operacionais |
zeneto | 6:f9befb0294e9 | 6 | //José de Faria Leite Neto |
zeneto | 6:f9befb0294e9 | 7 | //Wilian Henrique Cavassin |
zeneto | 6:f9befb0294e9 | 8 | //Fernando Levy Silvestre de Assis |
zeneto | 4:2eceeb929edd | 9 | |
zeneto | 5:ffba8ba016a7 | 10 | //Process struct |
zeneto | 5:ffba8ba016a7 | 11 | struct prc |
zeneto | 5:ffba8ba016a7 | 12 | { |
zeneto | 5:ffba8ba016a7 | 13 | int id; |
zeneto | 5:ffba8ba016a7 | 14 | int pri; //Always starts at 0 |
zeneto | 5:ffba8ba016a7 | 15 | int press; //If button is pressed |
zeneto | 5:ffba8ba016a7 | 16 | |
zeneto | 5:ffba8ba016a7 | 17 | }; |
zeneto | 5:ffba8ba016a7 | 18 | |
zeneto | 2:82e0ae145867 | 19 | //Interruptions |
zeneto | 2:82e0ae145867 | 20 | InterruptIn btn1(D7); |
zeneto | 2:82e0ae145867 | 21 | InterruptIn btn2(D6); |
zeneto | 2:82e0ae145867 | 22 | InterruptIn btn3(D5); |
zeneto | 2:82e0ae145867 | 23 | InterruptIn btn4(D4); |
zeneto | 5:ffba8ba016a7 | 24 | InterruptIn msin(D3); |
zeneto | 2:82e0ae145867 | 25 | |
zeneto | 3:81621bb4f009 | 26 | |
zeneto | 3:81621bb4f009 | 27 | |
zeneto | 2:82e0ae145867 | 28 | //Outs |
zeneto | 2:82e0ae145867 | 29 | DigitalOut buzzer(D2); |
zeneto | 5:ffba8ba016a7 | 30 | DigitalOut ledb(LED_BLUE); |
zeneto | 5:ffba8ba016a7 | 31 | DigitalOut ledr(LED_RED); |
zeneto | 5:ffba8ba016a7 | 32 | DigitalOut ledg(LED_GREEN); |
zeneto | 5:ffba8ba016a7 | 33 | |
zeneto | 4:2eceeb929edd | 34 | DigitalOut ground(D0); |
zeneto | 5:ffba8ba016a7 | 35 | DigitalOut MSout(D1); |
zeneto | 3:81621bb4f009 | 36 | |
zeneto | 3:81621bb4f009 | 37 | //Buttons Threads |
zeneto | 5:ffba8ba016a7 | 38 | Thread threadb1, threadb2, threadb3, threadb4, threadms; |
zeneto | 5:ffba8ba016a7 | 39 | |
zeneto | 5:ffba8ba016a7 | 40 | //Input controler thread |
zeneto | 5:ffba8ba016a7 | 41 | Thread inputCT; |
zeneto | 3:81621bb4f009 | 42 | |
zeneto | 4:2eceeb929edd | 43 | //Scheduler Thread |
zeneto | 4:2eceeb929edd | 44 | Thread scdT; |
zeneto | 5:ffba8ba016a7 | 45 | //Scheduler, all priorities starts at 0 |
zeneto | 5:ffba8ba016a7 | 46 | /*prc prca; |
zeneto | 5:ffba8ba016a7 | 47 | prca.pri = 0; |
zeneto | 5:ffba8ba016a7 | 48 | prca.id = -1; |
zeneto | 5:ffba8ba016a7 | 49 | prca.press = -1; */ |
zeneto | 5:ffba8ba016a7 | 50 | prc scd[5] = {NULL, NULL, NULL, NULL, NULL}; |
zeneto | 5:ffba8ba016a7 | 51 | |
zeneto | 5:ffba8ba016a7 | 52 | //Buttons and motion sensor |
zeneto | 5:ffba8ba016a7 | 53 | prc b1, b2, b3, b4, ms; |
zeneto | 5:ffba8ba016a7 | 54 | |
zeneto | 5:ffba8ba016a7 | 55 | |
zeneto | 5:ffba8ba016a7 | 56 | |
zeneto | 5:ffba8ba016a7 | 57 | //Button function |
zeneto | 6:f9befb0294e9 | 58 | //If pressed, put the process on queue |
zeneto | 5:ffba8ba016a7 | 59 | void button1_pressed() { |
zeneto | 5:ffba8ba016a7 | 60 | scd[0].id = b1.id; |
zeneto | 5:ffba8ba016a7 | 61 | scd[0].pri = b1.pri; |
zeneto | 5:ffba8ba016a7 | 62 | //ledb = !ledb; |
zeneto | 5:ffba8ba016a7 | 63 | |
zeneto | 5:ffba8ba016a7 | 64 | } |
zeneto | 5:ffba8ba016a7 | 65 | |
zeneto | 5:ffba8ba016a7 | 66 | void button2_pressed() { |
zeneto | 5:ffba8ba016a7 | 67 | scd[1].id = b2.id; |
zeneto | 5:ffba8ba016a7 | 68 | scd[1].pri = b2.pri; |
zeneto | 5:ffba8ba016a7 | 69 | |
zeneto | 5:ffba8ba016a7 | 70 | } |
zeneto | 5:ffba8ba016a7 | 71 | |
zeneto | 5:ffba8ba016a7 | 72 | void button3_pressed() { |
zeneto | 5:ffba8ba016a7 | 73 | scd[2].id = b3.id; |
zeneto | 5:ffba8ba016a7 | 74 | scd[2].pri = b3.pri; |
zeneto | 5:ffba8ba016a7 | 75 | |
zeneto | 5:ffba8ba016a7 | 76 | } |
zeneto | 5:ffba8ba016a7 | 77 | |
zeneto | 5:ffba8ba016a7 | 78 | void button4_pressed() { |
zeneto | 5:ffba8ba016a7 | 79 | scd[3].id = b4.id; |
zeneto | 5:ffba8ba016a7 | 80 | scd[3].pri = b4.pri; |
zeneto | 5:ffba8ba016a7 | 81 | } |
zeneto | 5:ffba8ba016a7 | 82 | |
zeneto | 5:ffba8ba016a7 | 83 | void button5_pressed() { |
zeneto | 5:ffba8ba016a7 | 84 | scd[4].id = ms.id; |
zeneto | 5:ffba8ba016a7 | 85 | scd[4].pri = ms.pri; |
zeneto | 5:ffba8ba016a7 | 86 | } |
zeneto | 4:2eceeb929edd | 87 | |
zeneto | 5:ffba8ba016a7 | 88 | //Buttons threads |
zeneto | 5:ffba8ba016a7 | 89 | void button1_thread() { |
zeneto | 5:ffba8ba016a7 | 90 | btn1.fall(&button1_pressed); // whenever the button falls, execute button_pressed function |
zeneto | 5:ffba8ba016a7 | 91 | } |
zeneto | 5:ffba8ba016a7 | 92 | |
zeneto | 5:ffba8ba016a7 | 93 | void button2_thread() { |
zeneto | 5:ffba8ba016a7 | 94 | btn2.fall(&button2_pressed); // whenever the button falls, execute button_pressed function |
zeneto | 5:ffba8ba016a7 | 95 | } |
zeneto | 5:ffba8ba016a7 | 96 | |
zeneto | 5:ffba8ba016a7 | 97 | void button3_thread() { |
zeneto | 5:ffba8ba016a7 | 98 | btn3.fall(&button3_pressed); // whenever the button falls, execute button_pressed function |
zeneto | 5:ffba8ba016a7 | 99 | } |
zeneto | 5:ffba8ba016a7 | 100 | |
zeneto | 5:ffba8ba016a7 | 101 | void button4_thread() { |
zeneto | 5:ffba8ba016a7 | 102 | btn4.fall(&button4_pressed); // whenever the button falls, execute button_pressed function |
zeneto | 5:ffba8ba016a7 | 103 | } |
zeneto | 5:ffba8ba016a7 | 104 | |
zeneto | 5:ffba8ba016a7 | 105 | void button5_thread() { |
zeneto | 5:ffba8ba016a7 | 106 | msin.fall(&button5_pressed); // whenever the button falls, execute button_pressed function |
zeneto | 5:ffba8ba016a7 | 107 | } |
zeneto | 5:ffba8ba016a7 | 108 | |
zeneto | 5:ffba8ba016a7 | 109 | //Scheduler thread |
zeneto | 5:ffba8ba016a7 | 110 | void scheduler_thread() { |
zeneto | 5:ffba8ba016a7 | 111 | int i, biggerP = 0, aux = 0; |
zeneto | 5:ffba8ba016a7 | 112 | |
zeneto | 5:ffba8ba016a7 | 113 | |
zeneto | 5:ffba8ba016a7 | 114 | while (1) { |
zeneto | 5:ffba8ba016a7 | 115 | |
zeneto | 5:ffba8ba016a7 | 116 | for(i = 0; i < 5; i++) { |
zeneto | 5:ffba8ba016a7 | 117 | if(scd[i].pri > biggerP) { |
zeneto | 5:ffba8ba016a7 | 118 | biggerP = scd[i].pri; |
zeneto | 5:ffba8ba016a7 | 119 | aux = i; |
zeneto | 5:ffba8ba016a7 | 120 | } |
zeneto | 5:ffba8ba016a7 | 121 | } |
zeneto | 5:ffba8ba016a7 | 122 | |
zeneto | 5:ffba8ba016a7 | 123 | //Is it really a process? Which one? |
zeneto | 5:ffba8ba016a7 | 124 | if(biggerP > 0){ |
zeneto | 5:ffba8ba016a7 | 125 | //It is |
zeneto | 5:ffba8ba016a7 | 126 | |
zeneto | 5:ffba8ba016a7 | 127 | //Button 1 - priority 3 - execute the process and reset priority in priority queue |
zeneto | 5:ffba8ba016a7 | 128 | if(aux == 0) { |
zeneto | 5:ffba8ba016a7 | 129 | ledr = !ledr; |
zeneto | 5:ffba8ba016a7 | 130 | buzzer = !buzzer; |
zeneto | 5:ffba8ba016a7 | 131 | wait(3); |
zeneto | 5:ffba8ba016a7 | 132 | buzzer = !buzzer; |
zeneto | 5:ffba8ba016a7 | 133 | ledr = !ledr; |
zeneto | 5:ffba8ba016a7 | 134 | scd[0].id = -1; |
zeneto | 5:ffba8ba016a7 | 135 | scd[0].pri = -1; |
zeneto | 5:ffba8ba016a7 | 136 | biggerP = 0; |
zeneto | 5:ffba8ba016a7 | 137 | } |
zeneto | 5:ffba8ba016a7 | 138 | |
zeneto | 5:ffba8ba016a7 | 139 | //Button 2 - priority 2 - execute the process and reset priority in priority queue |
zeneto | 5:ffba8ba016a7 | 140 | if(aux == 1) { |
zeneto | 5:ffba8ba016a7 | 141 | ledb = !ledb; |
zeneto | 5:ffba8ba016a7 | 142 | buzzer = !buzzer; |
zeneto | 5:ffba8ba016a7 | 143 | wait(3); |
zeneto | 5:ffba8ba016a7 | 144 | buzzer = !buzzer; |
zeneto | 5:ffba8ba016a7 | 145 | ledb = !ledb; |
zeneto | 5:ffba8ba016a7 | 146 | scd[1].id = -1; |
zeneto | 5:ffba8ba016a7 | 147 | scd[1].pri = -1; |
zeneto | 5:ffba8ba016a7 | 148 | biggerP = 0; |
zeneto | 5:ffba8ba016a7 | 149 | } |
zeneto | 5:ffba8ba016a7 | 150 | |
zeneto | 5:ffba8ba016a7 | 151 | //Button 3 - priority 1 - execute the process and reset priority in priority queue |
zeneto | 5:ffba8ba016a7 | 152 | if(aux == 2) { |
zeneto | 5:ffba8ba016a7 | 153 | ledg = !ledg; |
zeneto | 5:ffba8ba016a7 | 154 | buzzer = !buzzer; |
zeneto | 5:ffba8ba016a7 | 155 | wait(3); |
zeneto | 5:ffba8ba016a7 | 156 | buzzer = !buzzer; |
zeneto | 5:ffba8ba016a7 | 157 | ledg = !ledg; |
zeneto | 5:ffba8ba016a7 | 158 | scd[2].id = -1; |
zeneto | 5:ffba8ba016a7 | 159 | scd[2].pri = -1; |
zeneto | 5:ffba8ba016a7 | 160 | biggerP = 0; |
zeneto | 5:ffba8ba016a7 | 161 | } |
zeneto | 5:ffba8ba016a7 | 162 | |
zeneto | 5:ffba8ba016a7 | 163 | //Button 4 - priority 3 - execute the process and reset priority in priority queue |
zeneto | 5:ffba8ba016a7 | 164 | if(aux == 3) { |
zeneto | 5:ffba8ba016a7 | 165 | ledg = !ledg; |
zeneto | 5:ffba8ba016a7 | 166 | ledb = !ledb; |
zeneto | 5:ffba8ba016a7 | 167 | buzzer = !buzzer; |
zeneto | 5:ffba8ba016a7 | 168 | wait(3); |
zeneto | 5:ffba8ba016a7 | 169 | buzzer = !buzzer; |
zeneto | 5:ffba8ba016a7 | 170 | ledg = !ledg; |
zeneto | 5:ffba8ba016a7 | 171 | ledb = !ledb; |
zeneto | 5:ffba8ba016a7 | 172 | scd[3].id = -1; |
zeneto | 5:ffba8ba016a7 | 173 | scd[3].pri = -1; |
zeneto | 5:ffba8ba016a7 | 174 | biggerP = 0; |
zeneto | 5:ffba8ba016a7 | 175 | } |
zeneto | 5:ffba8ba016a7 | 176 | |
zeneto | 5:ffba8ba016a7 | 177 | //Movement sensor - priority 4 - execute the process and reset priority in priority queue |
zeneto | 5:ffba8ba016a7 | 178 | if(aux == 4) { |
zeneto | 5:ffba8ba016a7 | 179 | ledr = !ledr; |
zeneto | 5:ffba8ba016a7 | 180 | ledb = !ledb; |
zeneto | 5:ffba8ba016a7 | 181 | buzzer = !buzzer; |
zeneto | 5:ffba8ba016a7 | 182 | wait(3); |
zeneto | 5:ffba8ba016a7 | 183 | buzzer = !buzzer; |
zeneto | 5:ffba8ba016a7 | 184 | ledr = !ledr; |
zeneto | 5:ffba8ba016a7 | 185 | ledb = !ledb; |
zeneto | 5:ffba8ba016a7 | 186 | scd[4].id = -1; |
zeneto | 5:ffba8ba016a7 | 187 | scd[4].pri = -1; |
zeneto | 5:ffba8ba016a7 | 188 | biggerP = 0; |
zeneto | 5:ffba8ba016a7 | 189 | } |
zeneto | 5:ffba8ba016a7 | 190 | |
zeneto | 5:ffba8ba016a7 | 191 | } |
zeneto | 5:ffba8ba016a7 | 192 | |
zeneto | 5:ffba8ba016a7 | 193 | |
zeneto | 5:ffba8ba016a7 | 194 | } |
zeneto | 5:ffba8ba016a7 | 195 | |
zeneto | 5:ffba8ba016a7 | 196 | |
zeneto | 5:ffba8ba016a7 | 197 | |
zeneto | 5:ffba8ba016a7 | 198 | } |
zeneto | 5:ffba8ba016a7 | 199 | |
zeneto | 5:ffba8ba016a7 | 200 | |
zeneto | 4:2eceeb929edd | 201 | |
zeneto | 5:ffba8ba016a7 | 202 | int main(int, char**) { |
zeneto | 5:ffba8ba016a7 | 203 | |
zeneto | 5:ffba8ba016a7 | 204 | |
zeneto | 5:ffba8ba016a7 | 205 | //Setting buttons and motion sensor priorities and ids |
zeneto | 5:ffba8ba016a7 | 206 | |
zeneto | 5:ffba8ba016a7 | 207 | b1.id = 1; |
zeneto | 5:ffba8ba016a7 | 208 | b1.pri = 3; |
zeneto | 5:ffba8ba016a7 | 209 | b1.press = 0; |
zeneto | 5:ffba8ba016a7 | 210 | |
zeneto | 5:ffba8ba016a7 | 211 | b2.id = 2; |
zeneto | 5:ffba8ba016a7 | 212 | b2.pri = 2; |
zeneto | 5:ffba8ba016a7 | 213 | b2.press = 0; |
zeneto | 5:ffba8ba016a7 | 214 | |
zeneto | 5:ffba8ba016a7 | 215 | b3.id = 1; |
zeneto | 5:ffba8ba016a7 | 216 | b3.pri = 1; |
zeneto | 5:ffba8ba016a7 | 217 | b3.press = 0; |
zeneto | 5:ffba8ba016a7 | 218 | |
zeneto | 5:ffba8ba016a7 | 219 | b4.id = 4; |
zeneto | 5:ffba8ba016a7 | 220 | b4.pri = 3; |
zeneto | 5:ffba8ba016a7 | 221 | b4.press = 0; |
zeneto | 5:ffba8ba016a7 | 222 | |
zeneto | 5:ffba8ba016a7 | 223 | ms.id = 5; |
zeneto | 5:ffba8ba016a7 | 224 | ms.pri = 4; |
zeneto | 5:ffba8ba016a7 | 225 | ms.press = 0; |
zeneto | 4:2eceeb929edd | 226 | |
zeneto | 4:2eceeb929edd | 227 | |
zeneto | 4:2eceeb929edd | 228 | |
zeneto | 5:ffba8ba016a7 | 229 | prc prca; |
zeneto | 5:ffba8ba016a7 | 230 | prca.pri = 0; |
zeneto | 5:ffba8ba016a7 | 231 | prca.id = -1; |
zeneto | 5:ffba8ba016a7 | 232 | prca.press = -1; |
zeneto | 5:ffba8ba016a7 | 233 | scd[0] = prca; |
zeneto | 5:ffba8ba016a7 | 234 | scd[1] = prca; |
zeneto | 5:ffba8ba016a7 | 235 | scd[2] = prca; |
zeneto | 5:ffba8ba016a7 | 236 | scd[3] = prca; |
zeneto | 5:ffba8ba016a7 | 237 | scd[4] = prca; |
zeneto | 5:ffba8ba016a7 | 238 | |
zeneto | 6:f9befb0294e9 | 239 | //Ground |
zeneto | 4:2eceeb929edd | 240 | ground = 0; |
zeneto | 6:f9befb0294e9 | 241 | //Leds start at 0 |
zeneto | 5:ffba8ba016a7 | 242 | ledr = !ledr; |
zeneto | 5:ffba8ba016a7 | 243 | ledg = !ledg; |
zeneto | 5:ffba8ba016a7 | 244 | ledb = !ledb; |
zeneto | 6:f9befb0294e9 | 245 | |
zeneto | 6:f9befb0294e9 | 246 | //Threads starting |
zeneto | 3:81621bb4f009 | 247 | threadb1.start(button1_thread); |
zeneto | 3:81621bb4f009 | 248 | threadb2.start(button2_thread); |
zeneto | 3:81621bb4f009 | 249 | threadb3.start(button3_thread); |
zeneto | 3:81621bb4f009 | 250 | threadb4.start(button4_thread); |
zeneto | 5:ffba8ba016a7 | 251 | threadms.start(button5_thread); |
zeneto | 5:ffba8ba016a7 | 252 | scdT.start(scheduler_thread); |
zeneto | 4:2eceeb929edd | 253 | |
zeneto | 1:e7d2231abccc | 254 | while (1) {} |
zeneto | 0:00e9a2a6f73a | 255 | } |