GeMRTOS
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.