AutosarOS
App.c
Go to the documentation of this file.
1 
14 #include "assert.h"
15 
16 #include "OS_API.h"
17 
18 #include <avr/io.h>
19 #include <util/delay.h>
20 
21 #if defined (OS_CONFIG_SIM) && OS_CONFIG_SIM == true
22 #define DELAY_MS(ms)
23 #else
24 #define DELAY_MS(ms) _delay_ms(ms)
25 #endif /* defined (OS_CONFIG_SIM) && OS_CONFIG_SIM == true */
26 
27 volatile bool isrFlag = false;
28 
29 TASK(Idle)
30 {
31  while (1);
32 }
33 
34 TASK(Task1)
35 {
36  StatusType stat = ActivateTask(Task2);
37  assert(stat == E_OK);
38 
39  stat = ActivateTask(Task3);
40  assert(stat == E_OK);
41 
42  stat = ActivateTask(Task4);
43  assert(stat == E_OK);
44 
45  stat = ActivateTask(Task5);
46  assert(stat == E_OK);
47 
48  stat = ActivateTask(Task6);
49  assert(stat == E_OK);
50 
51  stat = ActivateTask(Task7);
52  assert(stat == E_OK);
53 
54  stat = ActivateTask(Task8);
55  assert(stat == E_OK);
56 
57  stat = ActivateTask(Task9);
58  assert(stat == E_OK);
59 
60  stat = ActivateTask(Task10);
61  assert(stat == E_OK);
62 
63  stat = ActivateTask(Task11);
64  assert(stat == E_OK);
65 
66  stat = ActivateTask(Task12);
67  assert(stat == E_OK);
68 
69  stat = ActivateTask(Task13);
70  assert(stat == E_OK);
71 
72  stat = ActivateTask(Task14);
73  assert(stat == E_OK);
74 
75  stat = ActivateTask(Task15);
76  assert(stat == E_OK);
77 
78  stat = ActivateTask(Task16);
79  assert(stat == E_OK);
80 
81  for (uint8_t i = 0; i < 8; i++) {
82  EventMaskType mask = 1 << i;
83  stat = ClearEvent(mask);
84  assert(stat == E_OK);
85  }
86 
87  stat = TerminateTask();
88  assert(stat == E_OK);
89 }
90 
91 TASK(Task2)
92 {
93  for (uint8_t i = 0; i < 8; i++) {
94  EventMaskType mask = 1 << i;
95  StatusType stat = ClearEvent(mask);
96  assert(stat == E_OK);
97  }
98 
99  StatusType stat = TerminateTask();
100  assert(stat == E_OK);
101 }
102 
103 TASK(Task3)
104 {
105  for (uint8_t i = 0; i < 8; i++) {
106  EventMaskType mask = 1 << i;
107  StatusType stat = ClearEvent(mask);
108  assert(stat == E_OK);
109  }
110 
111  StatusType stat = TerminateTask();
112  assert(stat == E_OK);
113 }
114 
115 TASK(Task4)
116 {
117  for (uint8_t i = 0; i < 8; i++) {
118  EventMaskType mask = 1 << i;
119  StatusType stat = ClearEvent(mask);
120  assert(stat == E_OK);
121  }
122 
123  StatusType stat = TerminateTask();
124  assert(stat == E_OK);
125 }
126 
127 TASK(Task5)
128 {
129  for (uint8_t i = 0; i < 8; i++) {
130  EventMaskType mask = 1 << i;
131  StatusType stat = ClearEvent(mask);
132  assert(stat == E_OK);
133  }
134 
135  StatusType stat = TerminateTask();
136  assert(stat == E_OK);
137 }
138 
139 TASK(Task6)
140 {
141  for (uint8_t i = 0; i < 8; i++) {
142  EventMaskType mask = 1 << i;
143  StatusType stat = ClearEvent(mask);
144  assert(stat == E_OK);
145  }
146 
147  StatusType stat = TerminateTask();
148  assert(stat == E_OK);
149 }
150 
151 TASK(Task7)
152 {
153  for (uint8_t i = 0; i < 8; i++) {
154  EventMaskType mask = 1 << i;
155  StatusType stat = ClearEvent(mask);
156  assert(stat == E_OK);
157  }
158 
159  StatusType stat = TerminateTask();
160  assert(stat == E_OK);
161 }
162 
163 TASK(Task8)
164 {
165  for (uint8_t i = 0; i < 8; i++) {
166  EventMaskType mask = 1 << i;
167  StatusType stat = ClearEvent(mask);
168  assert(stat == E_OK);
169  }
170 
171  StatusType stat = TerminateTask();
172  assert(stat == E_OK);
173 }
174 
175 TASK(Task9)
176 {
177  for (uint8_t i = 0; i < 8; i++) {
178  EventMaskType mask = 1 << i;
179  StatusType stat = ClearEvent(mask);
180  assert(stat == E_OK);
181  }
182 
183  StatusType stat = TerminateTask();
184  assert(stat == E_OK);
185 }
186 
187 TASK(Task10)
188 {
189  for (uint8_t i = 0; i < 8; i++) {
190  EventMaskType mask = 1 << i;
191  StatusType stat = ClearEvent(mask);
192  assert(stat == E_OK);
193  }
194 
195  StatusType stat = TerminateTask();
196  assert(stat == E_OK);
197 }
198 
199 TASK(Task11)
200 {
201  for (uint8_t i = 0; i < 8; i++) {
202  EventMaskType mask = 1 << i;
203  StatusType stat = ClearEvent(mask);
204  assert(stat == E_OK);
205  }
206 
207  StatusType stat = TerminateTask();
208  assert(stat == E_OK);
209 }
210 
211 TASK(Task12)
212 {
213  for (uint8_t i = 0; i < 8; i++) {
214  EventMaskType mask = 1 << i;
215  StatusType stat = ClearEvent(mask);
216  assert(stat == E_OK);
217  }
218 
219  StatusType stat = TerminateTask();
220  assert(stat == E_OK);
221 }
222 
223 TASK(Task13)
224 {
225  for (uint8_t i = 0; i < 8; i++) {
226  EventMaskType mask = 1 << i;
227  StatusType stat = ClearEvent(mask);
228  assert(stat == E_OK);
229  }
230 
231  StatusType stat = TerminateTask();
232  assert(stat == E_OK);
233 }
234 
235 TASK(Task14)
236 {
237  for (uint8_t i = 0; i < 8; i++) {
238  EventMaskType mask = 1 << i;
239  StatusType stat = ClearEvent(mask);
240  assert(stat == E_OK);
241  }
242 
243  StatusType stat = TerminateTask();
244  assert(stat == E_OK);
245 }
246 
247 TASK(Task15)
248 {
249  for (uint8_t i = 0; i < 8; i++) {
250  EventMaskType mask = 1 << i;
251  StatusType stat = ClearEvent(mask);
252  assert(stat == E_OK);
253  }
254 
255  StatusType stat = TerminateTask();
256  assert(stat == E_OK);
257 }
258 
259 TASK(Task16)
260 {
261  for (uint8_t i = 0; i < 8; i++) {
262  EventMaskType mask = 1 << i;
263  StatusType stat = ClearEvent(mask);
264  assert(stat == E_OK);
265  }
266 
267  StatusType stat = TerminateTask();
268  assert(stat == E_OK);
269 }
270 
271 extern void StartupHook(void)
272 {
273  DDRB = 0xFF; // PB as output
274  PORTB = 0xFF; // keep all LEDs off
275 
276  DDRD = 0x00; // PD as input
277  PORTD = 0xFF; // enable PU on PD
278 
279 #if defined (__AVR_ATmega32__)
280 
281 #elif defined (__AVR_ATmega128__) || defined (__AVR_ATmega1284__)
282  /* Timer 2 */
283 #if defined (OS_CONFIG_SIM) && OS_CONFIG_SIM == true
284 #if defined (__AVR_ATmega128__)
285  TCCR2 = (1 << CS20); // Enable Timer2 with Prescaler 1
286  TIMSK |= 1 << TOIE2; // Enable Overflow Interrupt (Timer2)
287 #else /* defined (__AVR_ATmega128__) */
288  TCCR2B = (1 << CS20); // Enable Timer2 with Prescaler 1
289  TIMSK2 |= 1 << TOIE2; // Enable Overflow Interrupt (Timer2)
290 #endif /* defined (__AVR_ATmega128__) */
291 #endif /* defined (OS_CONFIG_SIM) && OS_CONFIG_SIM == true */
292 #else /* defined (__AVR_ATmega32__) */
293 #error Unknown CPU defined!
294 #endif /* defined (__AVR_ATmega32__) */
295 
296  uint8_t t = 0;
297 
298  while (t < 6) {
299  uint8_t r = PORTB;
300  r ^= (1 << 7);
301  PORTB = r;
302  DELAY_MS(50);
303  t++;
304  }
305 }
306 
307 extern void ShutdownHook(StatusType error)
308 {
309  DDRB = 0xFF; // PB as output
310  PORTB = 0xFF; // keep all LEDs off
311 
312  for (uint8_t i = 0; i < 11; i++) {
313  PORTB ^= 0xFF;
314  DELAY_MS(1000);
315  }
316 }
317 
318 extern void PreTaskHook(void)
319 {
320  TaskType task;
321  GetTaskID(&task);
322  TaskStateType state = SUSPENDED;
323  GetTaskState(task, &state);
324 }
325 
326 extern void PostTaskHook(void)
327 {
328  TaskType task;
329  GetTaskID(&task);
330  TaskStateType state = SUSPENDED;
331  GetTaskState(task, &state);
332 }
333 
334 extern void ErrorHook(StatusType error)
335 {
336 
337 }
338 
339 ISR(TIMER2_OVF_vect)
340 {
341 
342 }
TaskType
enum tasks_e TaskType
Type for task reference.
Definition: TaskTypes.h:29
EventMaskType
uint8_t EventMaskType
Data type of the event mask.
Definition: EventTypes.h:21
StatusType
enum StatusType_e StatusType
Type for status.
ErrorHook
void ErrorHook(StatusType error)
PostTask hook function.
Definition: App.c:784
StartupHook
void StartupHook(void)
Definition: App.c:702
ClearEvent
#define ClearEvent
Definition: OS_API.h:46
GetTaskState
#define GetTaskState
Definition: OS_API.h:83
assert.h
Assert macros and functions.
TASK
TASK(Idle)
Definition: App.c:33
E_OK
@ E_OK
Definition: Types.h:40
DELAY_MS
#define DELAY_MS(ms)
Definition: App.c:24
ISR
ISR(INT0_vect)
Definition: App.c:806
PreTaskHook
void PreTaskHook(void)
PreTask hook function.
Definition: App.c:768
ActivateTask
#define ActivateTask
Definition: OS_API.h:78
assert
#define assert(expression)
Definition: assert.h:37
SUSPENDED
@ SUSPENDED
The task is suspended and will not be scheduled.
Definition: TaskTypes.h:58
TerminateTask
#define TerminateTask
Definition: OS_API.h:80
OS_API.h
Operating System API.
GetTaskID
#define GetTaskID
Definition: OS_API.h:82
isrFlag
volatile bool isrFlag
Definition: App.c:27
PostTaskHook
void PostTaskHook(void)
PostTask hook function.
Definition: App.c:776
ShutdownHook
void ShutdownHook(StatusType error)
Definition: App.c:757
TaskStateType
enum OsTaskState_e TaskStateType
Task state.