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