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  StatusType stat = StartScheduleTableAbs(ST1, 1);
35  assert(stat == E_OK);
36 
37  stat = IncrementCounter(Counter1);
38  assert(stat == E_OK);
39 
41  stat = GetScheduleTableStatus(ST1, &status);
42  assert(stat == E_OK && status == SCHEDULETABLE_RUNNING);
43 
44  stat = IncrementCounter(Counter1);
45  assert(stat == E_OK);
46 
47  stat = IncrementCounter(Counter1);
48  assert(stat == E_OK);
49 
50  stat = GetScheduleTableStatus(ST1, &status);
51  assert(stat == E_OK && status == SCHEDULETABLE_STOPPED);
52 
53  stat = StartScheduleTableRel(ST1, 1);
54  assert(stat == E_OK);
55 
56  stat = IncrementCounter(Counter1);
57  assert(stat == E_OK);
58 
59  stat = NextScheduleTable(ST1, ST2);
60  assert(stat == E_OK);
61 
62  stat = GetScheduleTableStatus(ST2, &status);
63  assert(stat == E_OK && status == SCHEDULETABLE_NEXT);
64 
65  stat = IncrementCounter(Counter1);
66  assert(stat == E_OK);
67 
68  stat = IncrementCounter(Counter1);
69  assert(stat == E_OK);
70 
71  stat = GetScheduleTableStatus(ST1, &status);
72  assert(stat == E_OK && status == SCHEDULETABLE_STOPPED);
73 
74  stat = GetScheduleTableStatus(ST2, &status);
75  assert(stat == E_OK && status == SCHEDULETABLE_STOPPED);
76 
77  stat = TerminateTask();
78  assert(stat == E_OK);
79 }
80 
81 TASK(Task2)
82 {
83  StatusType stat = WaitEvent(0b01);
84  assert(stat == E_OK);
85 
86  stat = ClearEvent(0b01);
87  assert(stat == E_OK);
88 
89  stat = IncrementCounter(Counter1);
90  assert(stat == E_OK);
91 
92  stat = TerminateTask();
93  assert(stat == E_OK);
94 }
95 
96 TASK(Task3)
97 {
98  StatusType stat = WaitEvent(0b10);
99  assert(stat == E_OK);
100 
101  stat = ClearEvent(0b10);
102  assert(stat == E_OK);
103 
104  stat = IncrementCounter(Counter1);
105  assert(stat == E_OK);
106 
107  stat = TerminateTask();
108  assert(stat == E_OK);
109 }
110 
111 extern void StartupHook(void)
112 {
113  DDRB = 0xFF; // PB as output
114  PORTB = 0xFF; // keep all LEDs off
115 
116  DDRD = 0x00; // PD as input
117  PORTD = 0xFF; // enable PU on PD
118 
119 #if defined (__AVR_ATmega32__)
120 
121 #elif defined (__AVR_ATmega128__) || defined (__AVR_ATmega1284__)
122  /* Timer 2 */
123 #if defined (OS_CONFIG_SIM) && OS_CONFIG_SIM == true
124 #if defined (__AVR_ATmega128__)
125  TCCR2 = (1 << CS20); // Enable Timer2 with Prescaler 1
126  TIMSK |= 1 << TOIE2; // Enable Overflow Interrupt (Timer2)
127 #else /* defined (__AVR_ATmega128__) */
128  TCCR2B = (1 << CS20); // Enable Timer2 with Prescaler 1
129  TIMSK2 |= 1 << TOIE2; // Enable Overflow Interrupt (Timer2)
130 #endif /* defined (__AVR_ATmega128__) */
131 #endif /* defined (OS_CONFIG_SIM) && OS_CONFIG_SIM == true */
132 #else /* defined (__AVR_ATmega32__) */
133 #error Unknown CPU defined!
134 #endif /* defined (__AVR_ATmega32__) */
135 
136  uint8_t t = 0;
137 
138  while (t < 6) {
139  uint8_t r = PORTB;
140  r ^= (1 << 7);
141  PORTB = r;
142  DELAY_MS(50);
143  t++;
144  }
145 }
146 
147 extern void ShutdownHook(StatusType error)
148 {
149  DDRB = 0xFF; // PB as output
150  PORTB = 0xFF; // keep all LEDs off
151 
152  for (uint8_t i = 0; i < 11; i++) {
153  PORTB ^= 0xFF;
154  DELAY_MS(1000);
155  }
156 }
157 
158 extern void PreTaskHook(void)
159 {
160  TaskType task;
161  GetTaskID(&task);
162  TaskStateType state = SUSPENDED;
163  GetTaskState(task, &state);
164 }
165 
166 extern void PostTaskHook(void)
167 {
168  TaskType task;
169  GetTaskID(&task);
170  TaskStateType state = SUSPENDED;
171  GetTaskState(task, &state);
172 }
173 
174 extern void ErrorHook(StatusType error)
175 {
176 
177 }
178 
179 ISR(TIMER2_OVF_vect)
180 {
181 
182 }
TaskType
enum tasks_e TaskType
Type for task reference.
Definition: TaskTypes.h:29
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.
IncrementCounter
#define IncrementCounter
Definition: OS_API.h:36
TASK
TASK(Idle)
Definition: App.c:33
E_OK
@ E_OK
Definition: Types.h:40
ISR
ISR(INT0_vect)
Definition: App.c:806
SCHEDULETABLE_STOPPED
@ SCHEDULETABLE_STOPPED
Schedule table is stopped.
Definition: ScheduleTableTypes.h:31
PreTaskHook
void PreTaskHook(void)
PreTask hook function.
Definition: App.c:768
SCHEDULETABLE_NEXT
@ SCHEDULETABLE_NEXT
Schedule table is queued after another table.
Definition: ScheduleTableTypes.h:32
StartScheduleTableRel
#define StartScheduleTableRel
Definition: OS_API.h:90
StartScheduleTableAbs
#define StartScheduleTableAbs
Definition: OS_API.h:91
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
NextScheduleTable
#define NextScheduleTable
Definition: OS_API.h:93
PostTaskHook
void PostTaskHook(void)
PostTask hook function.
Definition: App.c:776
ScheduleTableStatusType
enum scheduleTableState_e ScheduleTableStatusType
State of schedule table.
ShutdownHook
void ShutdownHook(StatusType error)
Definition: App.c:757
DELAY_MS
#define DELAY_MS(ms)
Definition: App.c:24
TaskStateType
enum OsTaskState_e TaskStateType
Task state.
GetScheduleTableStatus
#define GetScheduleTableStatus
Definition: OS_API.h:94
SCHEDULETABLE_RUNNING
@ SCHEDULETABLE_RUNNING
Schedule table is running.
Definition: ScheduleTableTypes.h:34