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 = GetResource(ResA);
37  assert(stat == E_OS_ACCESS);
38 
39  stat = GetResource(INVALID_RESOURCE);
40  assert(stat == E_OS_ID);
41 
42  stat = GetResource(Res1);
43  assert(stat == E_OK);
44 
45  stat = GetResource(Res2);
46  assert(stat == E_OK);
47 
48  stat = GetResource(Res3);
49  assert(stat == E_OK);
50 
51  stat = GetResource(Res4);
52  assert(stat == E_OK);
53 
54  stat = GetResource(Res5);
55  assert(stat == E_OK);
56 
57  stat = GetResource(Res6);
58  assert(stat == E_OK);
59 
60  stat = ReleaseResource(Res6);
61  assert(stat == E_OK);
62 
63  stat = ReleaseResource(Res5);
64  assert(stat == E_OK);
65 
66  stat = ReleaseResource(Res4);
67  assert(stat == E_OK);
68 
69  stat = ReleaseResource(Res3);
70  assert(stat == E_OK);
71 
72  stat = ReleaseResource(Res2);
73  assert(stat == E_OK);
74 
75  stat = ReleaseResource(Res1);
76  assert(stat == E_OK);
77 
78  while (!isrFlag) {
79  ;
80  }
81 
82  stat = ReleaseResource(Res1);
83  assert(stat == E_OS_NOFUNC);
84 
85  stat = ReleaseResource(INVALID_RESOURCE);
86  assert(stat == E_OS_ID);
87 
88  stat = TerminateTask();
89  assert(stat == E_OK);
90 }
91 
92 extern void StartupHook(void)
93 {
94  DDRB = 0xFF; // PB as output
95  PORTB = 0xFF; // keep all LEDs off
96 
97  DDRD = 0x00; // PD as input
98  PORTD = 0xFF; // enable PU on PD
99 
100 #if defined (__AVR_ATmega32__)
101  GICR = 1 << INT0; // Enable INT0 and INT1
102  MCUCR = 1 << ISC01 | 0 << ISC00; // Trigger INT0 and INT1 on falling edge
103 #elif defined (__AVR_ATmega128__) || defined (__AVR_ATmega1284__)
104  EICRA = 1 << ISC01 | 0 << ISC00; // Trigger INT0 and INT1 on falling edge
105  EIMSK |= 1 << INT0; // Enable INT0 and INT1
106 
107  /* Timer 2 */
108 #if defined (OS_CONFIG_SIM) && OS_CONFIG_SIM == true
109 #if defined (__AVR_ATmega128__)
110  TCCR2 = (1 << CS20); // Enable Timer2 with Prescaler 1
111  TIMSK |= 1 << TOIE2; // Enable Overflow Interrupt (Timer2)
112 #else /* defined (__AVR_ATmega128__) */
113  TCCR2B = (1 << CS20); // Enable Timer2 with Prescaler 1
114  TIMSK2 |= 1 << TOIE2; // Enable Overflow Interrupt (Timer2)
115 #endif /* defined (__AVR_ATmega128__) */
116 #endif /* defined (OS_CONFIG_SIM) && OS_CONFIG_SIM == true */
117 #else /* defined (__AVR_ATmega32__) */
118 #error Unknown CPU defined!
119 #endif /* defined (__AVR_ATmega32__) */
120 
121  uint8_t t = 0;
122 
123  while (t < 6) {
124  uint8_t r = PORTB;
125  r ^= (1 << 7);
126  PORTB = r;
127  DELAY_MS(50);
128  t++;
129  }
130 }
131 
132 extern void ShutdownHook(StatusType error)
133 {
134  DDRB = 0xFF; // PB as output
135  PORTB = 0xFF; // keep all LEDs off
136 
137  for (uint8_t i = 0; i < 11; i++) {
138  PORTB ^= 0xFF;
139  DELAY_MS(1000);
140  }
141 }
142 
143 extern void PreTaskHook(void)
144 {
145  TaskType task;
146  GetTaskID(&task);
147  TaskStateType state = SUSPENDED;
148  GetTaskState(task, &state);
149 }
150 
151 extern void PostTaskHook(void)
152 {
153  TaskType task;
154  GetTaskID(&task);
155  TaskStateType state = SUSPENDED;
156  GetTaskState(task, &state);
157 }
158 
159 extern void ErrorHook(StatusType error)
160 {
161 
162 }
163 
164 ISR(INT0_vect)
165 {
166  assert(isISR && isCat2ISR);
167 
168  StatusType stat = GetResource(Res1);
169  assert(stat == E_OK);
170 
171  stat = ReleaseResource(Res1);
172  assert(stat == E_OK);
173 
174  isrFlag = true;
175 }
176 
177 ISR(TIMER2_OVF_vect)
178 {
179 
180 }
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
E_OS_NOFUNC
@ E_OS_NOFUNC
Definition: Types.h:45
StartupHook
void StartupHook(void)
Definition: App.c:702
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
E_OS_ACCESS
@ E_OS_ACCESS
Definition: Types.h:41
ISR
ISR(INT0_vect)
Definition: App.c:806
PreTaskHook
void PreTaskHook(void)
PreTask hook function.
Definition: App.c:768
isCat2ISR
volatile uint8_t isCat2ISR
Priority of current Cat 2 ISR (zero if not in Cat 2 ISR)
Definition: OCB.c:21
isISR
volatile bool isISR
Is currently ISR context?
Definition: OCB.c:20
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
ReleaseResource
#define ReleaseResource
Definition: OS_API.h:71
E_OS_ID
@ E_OS_ID
Definition: Types.h:43
PostTaskHook
void PostTaskHook(void)
PostTask hook function.
Definition: App.c:776
DELAY_MS
#define DELAY_MS(ms)
Definition: App.c:24
ShutdownHook
void ShutdownHook(StatusType error)
Definition: App.c:757
TaskStateType
enum OsTaskState_e TaskStateType
Task state.
GetResource
#define GetResource
Definition: OS_API.h:70