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