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  TickType value = 0;
35  TickType tick = 0;
36  StatusType stat = GetCounterValue(INVALID_COUNTER, &value);
37  assert(stat == E_OS_ID);
38 
39  stat = GetCounterValue(Counter1, NULL);
40  assert(stat == E_OS_PARAM_POINTER);
41 
42  stat = GetCounterValue(Counter1, &value);
43  assert(stat == E_OK && value == 0);
44 
45  stat = IncrementCounter(INVALID_COUNTER);
46  assert(stat == E_OS_ID);
47 
48  stat = IncrementCounter(SYSTEM_COUNTER);
49  assert(stat == E_OS_ID);
50 
51  stat = IncrementCounter(Counter1);
52  assert(stat == E_OK);
53 
54  stat = GetElapsedValue(Counter1, NULL, &value);
55  assert(stat == E_OS_PARAM_POINTER);
56 
57  stat = GetElapsedValue(Counter1, &value, NULL);
58  assert(stat == E_OS_PARAM_POINTER);
59 
60  stat = GetElapsedValue(INVALID_COUNTER, &value, &tick);
61  assert(stat == E_OS_ID);
62 
63  value = Counter_Cfg[Counter1]->maxallowedvalue + 1;
64  stat = GetElapsedValue(Counter1, &value, &tick);
65  assert(stat == E_OS_VALUE);
66 
67  stat = GetCounterValue(Counter1, &value);
68  assert(stat == E_OK && value == 1);
69 
70  stat = IncrementCounter(Counter1);
71  assert(stat == E_OK);
72 
73  stat = GetElapsedValue(Counter1, &value, &tick);
74  assert(stat == E_OK && value == 2 && tick == 1);
75 
76  stat = GetCounterValue(SYSTEM_COUNTER, &value);
77  assert(stat == E_OK);
78 
79  stat = GetElapsedValue(SYSTEM_COUNTER, &value, &tick);
80  assert(stat == E_OK);
81 
82  stat = TerminateTask();
83  assert(stat == E_OK);
84 }
85 
86 extern void StartupHook(void)
87 {
88  DDRB = 0xFF; // PB as output
89  PORTB = 0xFF; // keep all LEDs off
90 
91  DDRD = 0x00; // PD as input
92  PORTD = 0xFF; // enable PU on PD
93 
94 #if defined (__AVR_ATmega32__)
95 
96 #elif defined (__AVR_ATmega128__) || defined (__AVR_ATmega1284__)
97  /* Timer 2 */
98 #if defined (OS_CONFIG_SIM) && OS_CONFIG_SIM == true
99 #if defined (__AVR_ATmega128__)
100  TCCR2 = (1 << CS20); // Enable Timer2 with Prescaler 1
101  TIMSK |= 1 << TOIE2; // Enable Overflow Interrupt (Timer2)
102 #else /* defined (__AVR_ATmega128__) */
103  TCCR2B = (1 << CS20); // Enable Timer2 with Prescaler 1
104  TIMSK2 |= 1 << TOIE2; // Enable Overflow Interrupt (Timer2)
105 #endif /* defined (__AVR_ATmega128__) */
106 #endif /* defined (OS_CONFIG_SIM) && OS_CONFIG_SIM == true */
107 #else /* defined (__AVR_ATmega32__) */
108 #error Unknown CPU defined!
109 #endif /* defined (__AVR_ATmega32__) */
110 
111  uint8_t t = 0;
112 
113  while (t < 6) {
114  uint8_t r = PORTB;
115  r ^= (1 << 7);
116  PORTB = r;
117  DELAY_MS(50);
118  t++;
119  }
120 }
121 
122 extern void ShutdownHook(StatusType error)
123 {
124  DDRB = 0xFF; // PB as output
125  PORTB = 0xFF; // keep all LEDs off
126 
127  for (uint8_t i = 0; i < 11; i++) {
128  PORTB ^= 0xFF;
129  DELAY_MS(1000);
130  }
131 }
132 
133 extern void PreTaskHook(void)
134 {
135  TaskType task;
136  GetTaskID(&task);
137  TaskStateType state = SUSPENDED;
138  GetTaskState(task, &state);
139 }
140 
141 extern void PostTaskHook(void)
142 {
143  TaskType task;
144  GetTaskID(&task);
145  TaskStateType state = SUSPENDED;
146  GetTaskState(task, &state);
147 }
148 
149 extern void ErrorHook(StatusType error)
150 {
151 
152 }
153 
154 ISR(TIMER2_OVF_vect)
155 {
156 
157 }
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
TickType
uint64_t TickType
Data type of counter values.
Definition: CounterTypes.h:21
StartupHook
void StartupHook(void)
Definition: App.c:702
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
DELAY_MS
#define DELAY_MS(ms)
Definition: App.c:24
counter_s::maxallowedvalue
const TickType maxallowedvalue
Maximum allowed value of counter.
Definition: CounterTypes.h:47
PreTaskHook
void PreTaskHook(void)
PreTask hook function.
Definition: App.c:768
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
GetCounterValue
#define GetCounterValue
Definition: OS_API.h:37
OS_API.h
Operating System API.
GetTaskID
#define GetTaskID
Definition: OS_API.h:82
GetElapsedValue
#define GetElapsedValue
Definition: OS_API.h:38
E_OS_ID
@ E_OS_ID
Definition: Types.h:43
PostTaskHook
void PostTaskHook(void)
PostTask hook function.
Definition: App.c:776
ShutdownHook
void ShutdownHook(StatusType error)
Definition: App.c:757
Counter_Cfg
volatile struct counter_s * Counter_Cfg[]
Current counter control blocks.
TaskStateType
enum OsTaskState_e TaskStateType
Task state.
E_OS_PARAM_POINTER
@ E_OS_PARAM_POINTER
Definition: Types.h:50
E_OS_VALUE
@ E_OS_VALUE
Definition: Types.h:48