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 TASK(Idle)
28 {
29  while (1);
30 }
31 
32 TASK(Task1)
33 {
34  TaskStateType state = SUSPENDED;
35  EventMaskType mask = 0;
36  StatusType stat = SetEvent(Task2, 0b10);
37  assert(stat == E_OK);
38 
39  stat = GetTaskState(Task2, &state);
40  assert(stat == E_OK && state == WAITING);
41 
42  stat = GetEvent(Task2, &mask);
43  assert(stat == E_OK && mask == 0b10);
44 
45  stat = ActivateTask(Task3);
46  assert(stat == E_OK);
47 
48  stat = GetTaskState(Task3, &state);
49  assert(stat == E_OK && state == READY);
50 
51  stat = SetEvent(Task3, 0b100);
52  assert(stat == E_OK);
53 
54  stat = GetEvent(Task3, &mask);
55  assert(stat == E_OK && mask == 0b100);
56 
57  stat = SetEvent(Task2, 0b1);
58  assert(stat == E_OK);
59 
60  stat = ActivateTask(Task4);
61  assert(stat == E_OK);
62 
63  stat = TerminateTask();
64  assert(stat == E_OK);
65 }
66 
67 TASK(Task2)
68 {
69  StatusType stat = WaitEvent(0b1);
70  assert(stat == E_OK);
71 
72  stat = ClearEvent(0b1);
73  assert(stat == E_OK);
74 
75  stat = WaitEvent(0b1);
76  assert(stat == E_OK);
77 
78  stat = TerminateTask();
79  assert(stat == E_OK);
80 }
81 
82 TASK(Task3)
83 {
84  StatusType stat = TerminateTask();
85  assert(stat == E_OK);
86 }
87 
88 TASK(Task4)
89 {
90  StatusType stat = SetEvent(Task2, 0b1);
91  assert(stat == E_OK);
92 
93  TaskStateType state = SUSPENDED;
94  stat = GetTaskState(Task2, &state);
95  assert(stat == E_OK && state == READY);
96 
97  stat = TerminateTask();
98  assert(stat == E_OK);
99 }
100 
101 extern void StartupHook(void)
102 {
103  DDRB = 0xFF; // PB as output
104  PORTB = 0xFF; // keep all LEDs off
105 
106  DDRD = 0x00; // PD as input
107  PORTD = 0xFF; // enable PU on PD
108 
109 #if defined (__AVR_ATmega32__)
110 
111 #elif defined (__AVR_ATmega128__) || defined (__AVR_ATmega1284__)
112  /* Timer 2 */
113 #if defined (OS_CONFIG_SIM) && OS_CONFIG_SIM == true
114 #if defined (__AVR_ATmega128__)
115  TCCR2 = (1 << CS20); // Enable Timer2 with Prescaler 1
116  TIMSK |= 1 << TOIE2; // Enable Overflow Interrupt (Timer2)
117 #else /* defined (__AVR_ATmega128__) */
118  TCCR2B = (1 << CS20); // Enable Timer2 with Prescaler 1
119  TIMSK2 |= 1 << TOIE2; // Enable Overflow Interrupt (Timer2)
120 #endif /* defined (__AVR_ATmega128__) */
121 #endif /* defined (OS_CONFIG_SIM) && OS_CONFIG_SIM == true */
122 #else /* defined (__AVR_ATmega32__) */
123 #error Unknown CPU defined!
124 #endif /* defined (__AVR_ATmega32__) */
125 
126  uint8_t t = 0;
127 
128  while (t < 6) {
129  uint8_t r = PORTB;
130  r ^= (1 << 7);
131  PORTB = r;
132  DELAY_MS(50);
133  t++;
134  }
135 }
136 
137 extern void ShutdownHook(StatusType error)
138 {
139  DDRB = 0xFF; // PB as output
140  PORTB = 0xFF; // keep all LEDs off
141 
142  for (uint8_t i = 0; i < 11; i++) {
143  PORTB ^= 0xFF;
144  DELAY_MS(1000);
145  }
146 }
147 
148 extern void PreTaskHook(void)
149 {
150  TaskType task;
151  GetTaskID(&task);
152  TaskStateType state = SUSPENDED;
153  GetTaskState(task, &state);
154 }
155 
156 extern void PostTaskHook(void)
157 {
158  TaskType task;
159  GetTaskID(&task);
160  TaskStateType state = SUSPENDED;
161  GetTaskState(task, &state);
162 }
163 
164 extern void ErrorHook(StatusType error)
165 {
166 
167 }
168 
169 ISR(TIMER2_OVF_vect)
170 {
171 
172 }
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
WaitEvent
#define WaitEvent
Definition: OS_API.h:48
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
SetEvent
#define SetEvent
Definition: OS_API.h:45
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
READY
@ READY
The task is ready to be scheduled.
Definition: TaskTypes.h:60
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.
WAITING
@ WAITING
The task is waiting for an event.
Definition: TaskTypes.h:62
GetTaskID
#define GetTaskID
Definition: OS_API.h:82
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.
GetEvent
#define GetEvent
Definition: OS_API.h:47
DELAY_MS
#define DELAY_MS(ms)
Definition: App.c:24