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