GeMRTOS
misc
gemrtos_ips
GRTOS
HAL
inc
grtosdefinitions.h
Go to the documentation of this file.
1
18
19
20
/******************************************************************************
21
* *
22
* License Agreement *
23
* *
24
* Copyright (c) Ricardo L. Cayssials *
25
* All rights reserved. *
26
* *
27
******************************************************************************/
28
29
#ifndef GRTOSDEFINITIONS_H_
30
#define GRTOSDEFINITIONS_H_
31
32
// Fijarse aca para separar el codigo del switch
33
// https://stackoverflow.com/questions/4550075/can-i-append-to-a-preprocessor-macro
34
// https://gcc.gnu.org/onlinedocs/cpp/Concatenation.html
35
// https://gcc.gnu.org/onlinedocs/cpp/Directives-Within-Macro-Arguments.html#Directives-Within-Macro-Arguments
36
37
// Check https://stackoverflow.com/questions/1154709/how-can-i-hide-the-declaration-of-a-struct-in-c
38
39
40
// #pragma GCC optimize('mbypass-cache')
41
// #pragma GCC optimize('mno-cache-volatile')
42
43
#include <system.h>
44
#include <stdio.h>
45
#include "sys/alt_irq.h"
46
#include "priv/alt_irq_table.h"
47
#include <sys/alt_cache.h>
48
#include <inttypes.h>
49
#include <assert.h>
50
#include <
grtos_regs.h
>
51
52
#include "../runtime/rts_gemrtos.h"
53
54
55
56
/****************************************************************************************
57
* GRTOS SYSTEM GENERAL DEFINITIONS
58
***************************************************************************************/
59
#define G_ISR_STACKSIZE 4096
60
#define G_ISR_PRIORITY 0
61
#define G_IDLE_STACKSIZE 4096
62
#define G_NUMBER_OF_LCBs_FOR_PCB 2u
63
64
65
/************************************************************************************
66
* COMPILATION OPTIONS
67
************************************************************************************/
68
69
// from https://stackoverflow.com/questions/2219829/how-to-prevent-gcc-optimizing-some-statements-in-c
70
// #pragma GCC push_options
71
// #pragma GCC optimize ("O3")
72
73
// from https://stackoverflow.com/questions/64026719/gcc-cli-option-o0-surprisingly-discards-code-after-pragma-gcc-optimize-in-macr
74
#define _STRING(S) #S
75
#define STRING(S) _STRING(S)
76
#define OPTIMEZE_CODE(OLEVEL) \
77
_Pragma("GCC push_options") \
78
_Pragma(STRING(GCC optimize ("O3")))
79
80
// _Pragma(STRING(GCC optimize ("O" #OLEVEL)))
81
82
#define OPTIMEZE_RESTORE \
83
_Pragma("GCC pop_options")
84
85
// from https://stackoverflow.com/questions/58477537/labels-redefined-in-macro-in-c
86
#define RTSZ(i) RTSZ1(i, __LINE__, __FUNCTION__)
87
#define RTSZ1(i, l, f) RTSZ2(i, l, f)
88
#define RTSZ2(i, l, f) RTSZ_##i##_##l##_##f
89
90
// if (G_Running == G_TRUE) {
91
// fprintf(fpuart[GRTOS_CMD_PRC_ID-1],"Proc %d in func %s, file %s, %d \n",GRTOS_CMD_PRC_ID , __FUNCTION__,__FILE__,__LINE__);
92
// }
93
94
#define SAMPLE_FUNCTION_BEGIN(number) \
95
if ((G_DEBUG_SAMPLE_BEGIN_ENABLE == 0xFFFFFFFF) || (G_DEBUG_SAMPLE_BEGIN_ENABLE == number)){ \
96
RTSZ(0): \
97
IOWR(GRTOS_DRIVER_GRTOS_MONITOR_BASE, 0, (unsigned int) &&RTSZ(0) | 0x80000000); \
98
}
99
100
// if (G_Running == G_TRUE) {
101
// if ((g_kcb.G_PCBTbl[GRTOS_CMD_PRC_ID -1].PCB_EXECTCB->TCB_StackPointer < g_kcb.G_PCBTbl[GRTOS_CMD_PRC_ID -1].PCB_EXECTCB->TCB_StackTop - 300) || (g_kcb.G_PCBTbl[GRTOS_CMD_PRC_ID -1].PCB_EXECTCB->TCB_StackPointer > g_kcb.G_PCBTbl[GRTOS_CMD_PRC_ID -1].PCB_EXECTCB->TCB_StackBottom)) {
102
// PRINT_TO_DEBUG("ERROR TCB= %p, TCB_StackBottom = %p, TCB_StackPointer = %p, TCB_StackTop = %p\n",g_kcb.G_PCBTbl[GRTOS_CMD_PRC_ID -1].PCB_EXECTCB, (void *) g_kcb.G_PCBTbl[GRTOS_CMD_PRC_ID -1].PCB_EXECTCB->TCB_StackBottom, (void *) g_kcb.G_PCBTbl[GRTOS_CMD_PRC_ID -1].PCB_EXECTCB->TCB_StackPointer, (void *) g_kcb.G_PCBTbl[GRTOS_CMD_PRC_ID -1].PCB_EXECTCB->TCB_StackTop);
103
// PRINT_TO_DEBUG("ERROR TCB_IDLE= %p\n", (void *) g_kcb.G_PCBTbl[GRTOS_CMD_PRC_ID -1].PCB_EXECTCB );
104
// G_DEBUG_WHILEFOREVER; }
105
// }
106
107
#define SAMPLE_FUNCTION_END(number) \
108
if (Check_list_TCBAEL_IsValid((int) 10000) != G_TRUE) { \
109
G_DEBUG_WHILEFOREVER; \
110
} \
111
if ((G_DEBUG_SAMPLE_END_ENABLE == 0xFFFFFFFF) || (G_DEBUG_SAMPLE_END_ENABLE == number)){ \
112
RTSZ(0): \
113
IOWR(GRTOS_DRIVER_GRTOS_MONITOR_BASE, 0, (unsigned int) &&RTSZ(0) | 0xC0000000); \
114
}
115
116
117
/************************************************************************************
118
* GRTOS INTERNAL DEFINITIONS
119
************************************************************************************/
122
#define G_NUMBER_OF_PCB GRTOS_DRIVER_NPROCESSORS
124
#define G_NUMBER_OF_IRQ_TCB ALT_NIRQ
127
130
#define G_TICKS_PER_SECOND (int)(GRTOS_DRIVER_GRTOSFREQUENCY/(GRTOS_DRIVER_PRESCALE))
131
134
#define G_TICKS_PER_MSECOND (G_TICKS_PER_SECOND/1000)
135
136
138
#define EVN_CODE_TIMED 0x21
139
#define EVN_CODE_FROZEN 0x22
140
/************************************************************************************
141
* COMPILATION OPTIONS
142
************************************************************************************/
148
#define G_GRTOS_PRESERVE_HAL_ISR 0
149
156
#define G_DEBUG_PRINT_WHEN_PROCESSOR_GOES_IDLE 1
157
164
#define G_DEBUG_WHILEFOREVER_ENABLE 1
165
166
171
#define G_DEBUG_WHILEFOREVER \
172
do{int dest; \
173
fprintf(fpuart[GRTOS_CMD_PRC_ID-1],"ERROR in for Proc %d in function %s, file = %s, line = %d \n",GRTOS_CMD_PRC_ID , __FUNCTION__,__FILE__,__LINE__); \
174
while(1){dest++;\
175
}}while(0)
176
177
179
#define G_DEBUG_RUN_MONITOR_ROUTINE \
180
do{ \
181
GRTOS_CMD_DEBUG_HOLD_ENB; \
182
fprintf(fpuart[GRTOS_CMD_PRC_ID-1], "In %s, %d, proc %x, mtx %x \n",__FUNCTION__,__LINE__, GRTOS_CMD_PRC_ID,GRTOS_MTX_PRC_GRANTED); \
183
GRTOS_CMD_DEBUG_HOLD_DIS; } while(0)
184
189
#define PRINT_TO_DEBUG(...) \
190
fprintf(fpuart[GRTOS_CMD_PRC_ID-1], ##__VA_ARGS__);
191
192
194
#if G_DEBUG_WHILEFOREVER_ENABLE == 1
195
#define G_DEBUG_VERBOSE_RUNTIME \
196
GRTOS_CMD_DEBUG_HOLD_ENB; \
197
G_DEBUG_RUN_MONITOR_ROUTINE; \
198
fprintf(fpuart[GRTOS_CMD_PRC_ID-1],"Proc %d, func %s \n",GRTOS_CMD_PRC_ID , __FUNCTION__); \
199
GRTOS_CMD_DEBUG_HOLD_DIS;
200
#else
201
#define G_DEBUG_VERBOSE_RUNTIME
202
#endif
203
205
//#define G_DEBUG_VERBOSE G_DEBUG_RUN_MONITOR_ROUTINE
206
//#define G_DEBUG_VERBOSE G_DEBUG_VERBOSE_RUNTIME
207
#define G_DEBUG_VERBOSE
208
214
// #define PRINT_DEBUG_LINE fprintf(fpuart[GRTOS_CMD_PRC_ID-1], "%s, %s, %d, proc %x, mtx %x\n",,__FILE__,__LINE__, GRTOS_CMD_PRC_ID, GRTOS_MTX_PRC_GRANTED);
215
// #define PRINT_DEBUG_LINE fprintf(fpuart[GRTOS_CMD_PRC_ID-1], "%s, %d\n",__FUNCTION__,__LINE__);
216
#define PRINT_DEBUG_LINE
217
218
219
220
221
222
223
224
225
226
227
233
#define G_LOWEST_PRIORITY 0x7FFFFFFFFFFFFFFCLL
234
#define G_IDLETASK_PRIORITY 0x7FFFFFFFFFFFFFFDLL
235
#define G_LATEST_TIME 0x7FFFFFFFFFFFFFFFLL
236
237
238
239
240
#endif
/* GRTOSDEFINITIONS_H_ */
grtos_regs.h
GRTOS register mapping functions.
Generated by
1.8.17