48 SAMPLE_FUNCTION_BEGIN(36)
50 g_kcb.KCB_NUMBER_OF_TCBs++;
52 void *mem = malloc(
sizeof(
GS_TCB) + 15);
53 GS_TCB *ptcb = (
GS_TCB *) (((uintptr_t)mem+15) & ~ (uintptr_t)0x0F);
57 ptcb->malloc_address = mem;
59 ptcb->TCB_NextTCBAEL = (
struct gs_ecb *) 0;
60 ptcb->TCB_NextTCBASL = (
struct gs_scb *) 0;
61 ptcb->TCB_NextTCBPSL = (
struct gs_scb *) 0;
62 ptcb->TCBType = G_TCBType_UNDEFINED;
63 ptcb->TCBReadyPriority = G_LOWEST_PRIORITY -1;
64 ptcb->TCBInherPriority = G_LOWEST_PRIORITY -1;
65 ptcb->TCBRunPriority = G_LOWEST_PRIORITY -1;
66 ptcb->TCBCurrentPriority = G_LOWEST_PRIORITY -1;
67 ptcb->TCBPeriod = 0x7FFFFFFFFFFFFFFFLL -1;
68 ptcb->TCBDeadline = 0x7FFFFFFFFFFFFFFFLL -1;
69 ptcb->TCB_StackPointer = (
GS_STK *) 0;
70 ptcb->TCB_StackBottom = (
GS_STK *) 0;
71 ptcb->TCB_StackTop = (
GS_STK *) 0;
72 ptcb->TCB_TaskCode = (
void *) 0;
73 ptcb->TCB_TaskArg = (
void *) 0;
74 ptcb->TCB_NextTCB = (
struct gs_tcb *) 0;
75 ptcb->TCB_PrevTCB = (
struct gs_tcb *) 0;
76 ptcb->TCB_AssocPCB = 0;
77 ptcb->TCB_INTNumber = -1;
79 ptcb->TCB_Abort_w_Deadline = G_FALSE;
80 ptcb->TCBState = G_TCBState_UNLINKED;
81 ptcb->TCB_NextISRTCB = (
struct gs_tcb *) 0;
82 ptcb->TCB_PrevISRTCB = (
struct gs_tcb *) 0;
86 ptcb->TCB_NEXT_TCBs =
g_kcb.KCB_ROOT_TCBs;
87 if (
g_kcb.KCB_ROOT_TCBs != (
struct gs_tcb *) 0)
g_kcb.KCB_ROOT_TCBs->TCB_PREV_TCBs = ptcb;
88 ptcb->TCB_PREV_TCBs = (
struct gs_tcb *) 0;
92 #if G_DEBUG_WHILEFOREVER_ENABLE == 1
93 if (
TCB_IsValid(ptcb) != G_TRUE) G_DEBUG_WHILEFOREVER;
96 SAMPLE_FUNCTION_END(36)
109 SAMPLE_FUNCTION_BEGIN(1)
111 g_kcb.KCB_NUMBER_OF_ECBs++;;
113 void *mem = malloc(
sizeof(
GS_ECB) + 15);
114 GS_ECB *pecb = (
GS_ECB *) (((uintptr_t)mem+15) & ~ (uintptr_t)0x0F);
117 pecb->malloc_address = mem;
119 pecb->ECB_NextECBAEL = (
struct gs_ecb *) 0;
120 pecb->ECB_NextECBASL = (
struct gs_scb *) 0;
121 pecb->ECBType = G_ECBType_NOT_SPECIFIED;
123 pecb->ECB_NextECB = (
struct gs_ecb *) 0;
124 pecb->ECB_PrevECB = (
struct gs_ecb *) 0;
125 pecb->ECB_AssocTCB = (
struct gs_tcb *) 0;
126 pecb->ECB_AssocRCB = (
struct g_rcb *) 0;
127 pecb->ECB_NextTCBAEL = (
struct gs_ecb *) 0;
128 pecb->ECB_PrevTCBAEL = (
struct gs_ecb *) 0;
129 pecb->ECB_RRDS = (
struct gs_rrds *) 0;
130 pecb->ECBValue.i64 = G_LOWEST_PRIORITY;
131 pecb->ECBState = GS_ECBState_UNLINKED;
134 pecb->ECB_NEXT_ECBs =
g_kcb.KCB_ROOT_ECBs;
135 if (
g_kcb.KCB_ROOT_ECBs != (
struct gs_ecb *) 0)
g_kcb.KCB_ROOT_ECBs->ECB_PREV_ECBs = pecb;
136 pecb->ECB_PREV_ECBs = (
struct gs_ecb *) 0;
139 SAMPLE_FUNCTION_END(1)
141 #if G_DEBUG_WHILEFOREVER_ENABLE == 1
142 if (pecb == (
struct gs_ecb *) 0) G_DEBUG_WHILEFOREVER;
157 SAMPLE_FUNCTION_BEGIN(19)
159 g_kcb.KCB_NUMBER_OF_RCBs++;;
160 void *mem = malloc(
sizeof(
G_RCB) + 15);
161 G_RCB *prcb = (
G_RCB *) (((uintptr_t)mem+15) & ~ (uintptr_t)0x0F);
165 prcb->malloc_address = mem;
167 prcb->RCBState = GK_RCBState_UNDEFINED;
168 prcb->RCBCount = (
INT32) 0;
169 prcb->RCB_NextRCBASL = (
struct gs_scb *) 0;
170 prcb->RCB_NextRCBGEL = (
struct gs_ecb *) 0;
171 prcb->RCB_NextRCBWEL = (
struct gs_ecb *) 0;
172 prcb->RCBType = GK_RCBType_UNUSED;
175 prcb->RCB_NEXT_RCBs = (
G_RCB *)
g_kcb.KCB_ROOT_RCBs;
176 if (
g_kcb.KCB_ROOT_RCBs != (
struct g_rcb *) 0) {
178 presource->RCB_PREV_RCBs = (
G_RCB *) prcb;
180 prcb->RCB_PREV_RCBs = (
G_RCB *) 0;
181 g_kcb.KCB_ROOT_RCBs = (
struct g_rcb *) prcb;
183 SAMPLE_FUNCTION_END(19)
196 SAMPLE_FUNCTION_BEGIN(26)
197 g_kcb.KCB_NUMBER_OF_SCBs++;
199 void *mem = malloc(
sizeof(
GS_SCB) + 15);
200 GS_SCB *pscb = (
GS_SCB *) (((uintptr_t)mem+15) & ~ (uintptr_t)0x0F);
203 pscb->malloc_address = mem;
204 pscb->SCBState = G_SCBState_FREE;
205 pscb->SCBState = G_SCBState_UNLINKED;
208 pscb->SCB_NEXT_SCBs =
g_kcb.KCB_ROOT_SCBs;
209 if (
g_kcb.KCB_ROOT_SCBs != (
struct gs_scb *) 0)
g_kcb.KCB_ROOT_SCBs->SCB_PREV_SCBs = pscb;
210 pscb->SCB_PREV_SCBs = (
struct gs_scb *) 0;
214 SAMPLE_FUNCTION_END(26)
216 #if G_DEBUG_WHILEFOREVER_ENABLE == 1
217 if (pscb == (
struct gs_scb *) 0) G_DEBUG_WHILEFOREVER;
232 SAMPLE_FUNCTION_BEGIN(48)
233 g_kcb.KCB_NUMBER_OF_RRDSs++;
234 void *mem = malloc(
sizeof(
GS_RRDS) + 15);
235 GS_RRDS *prrds = (
GS_RRDS *) (((uintptr_t)mem+15) & ~ (uintptr_t)0x0F);
238 prrds->malloc_address = mem;
240 prrds->RRDS_State = 0;
241 prrds->RRDS_Type = 0;
242 prrds->RRDS_NextRRDS = (
struct gs_rrds *) 0;
243 prrds->RRDS_NextSCB = (
struct gs_scb *) 0;
244 prrds->RRDS_AsocECB = (
struct gs_ecb *) 0;
247 prrds->RRDS_NEXT_RRDSs =
g_kcb.KCB_ROOT_RRDSs;
248 if (
g_kcb.KCB_ROOT_RRDSs != (
struct gs_rrds *) 0)
g_kcb.KCB_ROOT_RRDSs->RRDS_PREV_RRDSs = prrds;
249 prrds->RRDS_PREV_RRDSs = (
struct gs_rrds *) 0;
252 SAMPLE_FUNCTION_END(48)
266 g_kcb.KCB_NUMBER_OF_LCBs++;
267 void *mem = malloc(
sizeof(
GS_LCB) + 15);
268 GS_LCB *plcb = (
GS_LCB *) (((uintptr_t)mem+15) & ~ (uintptr_t)0x0F);
271 plcb->malloc_address = mem;
273 plcb->LCB_NextTCBRUNL = (
struct gs_tcb *) 0;
274 plcb->LCBRunPriority = (
INT64) G_LOWEST_PRIORITY;
275 plcb->LCB_NextTCBRDYL = (
struct gs_tcb *) 0;
276 plcb->LCB_NextLCBFPL = (
struct gs_pcb *) 0;
277 plcb->LCBState = GS_LCBState_UNLINKED;
278 plcb->LCBType = GS_LCBType_UNSPECIFIED;
281 plcb->LCB_NEXT_LCBs =
g_kcb.KCB_ROOT_LCBs;
282 if (
g_kcb.KCB_ROOT_LCBs != (
struct gs_lcb *) 0)
g_kcb.KCB_ROOT_LCBs->LCB_PREV_LCBs = plcb;
283 plcb->LCB_PREV_LCBs = (
struct gs_lcb *) 0;
304 g_kcb.KCB_NUMBER_OF_PCBs = Nmbr_PCB;
306 void *mem = malloc((Nmbr_PCB) *
sizeof(
GS_PCB) + 15);
307 g_kcb.G_PCBTbl = (
GS_PCB *) (((uintptr_t)mem+15) & ~ (uintptr_t)0x0F);
308 #if G_DEBUG_WHILEFOREVER_ENABLE == 1
309 fprintf(stderr,
"[ MESSAGE ] mem = %p, g_kcb.G_PCBTbl = %p, size = %d\n", (
void *) mem, (
void *)
g_kcb.G_PCBTbl, (
int) G_NUMBER_OF_PCB *
sizeof(
GS_PCB));
337 unsigned int StkSize,
338 unsigned int TCBType,
339 INT64 TCBReadyPriority,
340 INT64 TCBRunPriority,
343 GS_LCB *TCB_RDY_LCB_Index,
344 int TCB_Abort_w_Deadline,
345 INT64 TCBInherPriority,
352 if (ptcb != (
struct gs_tcb *) 0) {
353 ptcb->TCB_StackBottom = (
GS_STK *) ((((
INT32) StkBotton)-8)& ~0x3);
354 ptcb->TCB_StackTop = (
GS_STK *)((
INT32) ptcb->TCB_StackBottom - ((
INT32)(StkSize)& ~0x3));
355 ptcb->TCB_TaskCode = TaskCode;
356 ptcb->TCB_TaskArg = p_arg;
358 ptcb->TCBType = TCBType;
359 ptcb->TCBReadyPriority = TCBReadyPriority;
360 ptcb->TCBRunPriority = TCBRunPriority;
361 ptcb->TCBDeadline = TCBDeadline;
362 ptcb->TCBPeriod = TCBPeriod;
363 ptcb->TCB_RDY_LCB_Index = TCB_RDY_LCB_Index;
364 ptcb->TCB_Abort_w_Deadline = TCB_Abort_w_Deadline;
365 ptcb->TCBInherPriority = TCBInherPriority;
372 ptcb->TCB_INTNumber = TCB_INTNumber;
373 ptcb->TCB_PrevISRTCB = (
struct gs_tcb *) 0;
374 if (
TCBType == G_TCBType_ISR) {
381 ptcb->TCB_NextISRTCB = (
struct gs_tcb *) 0;
401 int i; PRINT_DEBUG_LINE
402 G_DEBUG_VERBOSE; PRINT_DEBUG_LINE
403 for (i=0 ; i<ALT_NIRQ ; i++)
409 (
void *) alt_irq[i].context,
411 (
void *)
g_kcb.G_ISR_STACK + (i * G_ISR_STACKSIZE) + G_ISR_STACKSIZE-4,
412 (
unsigned int) G_ISR_STACKSIZE,
413 (
unsigned int) G_TCBType_ISR,
414 (
INT64) G_ISR_PRIORITY,
415 (
INT64) G_ISR_PRIORITY,
420 (
INT64) G_ISR_PRIORITY,
427 GRTOS_CMD_IRQ_ENB_CLR(i);
428 g_kcb.KCB_ExtISR[i].G_EXT_INT_Count++;
433 GRTOS_CMD_IRQ_ENB_SET(i);
449 int irq_nbr = ptcb->TCB_INTNumber;
451 #if G_DEBUG_WHILEFOREVER_ENABLE == 1
452 if (
g_kcb.KCB_ExtISR[irq_nbr].G_EXT_INT_Count == (
int) 0) G_DEBUG_WHILEFOREVER; PRINT_DEBUG_LINE
455 if (ptcb->TCBType == G_TCBType_ISR)
g_kcb.KCB_ExtISR[irq_nbr].G_EXT_INT_Count--;
456 if (
g_kcb.KCB_ExtISR[irq_nbr].G_EXT_INT_Count == (
INT32) 0) {
457 GRTOS_CMD_IRQ_ENB_SET(irq_nbr);
472 GS_TCB *ptcb =
g_kcb.KCB_ExtISR[irq_nbr].G_TCB_ISR;
474 GRTOS_CMD_IRQ_ENB_CLR(irq_nbr); PRINT_DEBUG_LINE
476 while (ptcb != (
GS_TCB *) 0) {
479 if (ptcb->TCBType == G_TCBType_ISR) {
480 if (ptcb->TCBState == G_TCBState_WAITING_COMPLETED) {
486 g_kcb.KCB_ExtISR[irq_nbr].G_EXT_INT_Count++;
489 ptcb = (
GS_TCB *) ptcb->TCB_NextISRTCB;
506 if (
G_Running == G_TRUE) GRTOS_USER_CRITICAL_SECTION_GET;
508 if (
G_Running == G_TRUE) GRTOS_USER_CRITICAL_SECTION_RELEASE;
530 if (
g_kcb.KCB_ExtISR[irq_nbr].G_TCB_ISR != (
struct gs_tcb *) 0) {
531 g_kcb.KCB_ExtISR[irq_nbr].G_TCB_ISR->TCB_PrevISRTCB = (
struct gs_tcb *) ptcb;
533 g_kcb.KCB_ExtISR[irq_nbr].G_TCB_ISR = (
struct gs_tcb *) ptcb;
535 if (ptcb->
TCBState != G_TCBState_WAITING_COMPLETED) {
536 g_kcb.KCB_ExtISR[irq_nbr].G_EXT_INT_Count++;