int main() { int array[SIZE], i, sum=0; sys_PrintString("Starting physical address of array: "); sys_PrintInt(sys_GetPA((unsigned)array)); sys_PrintChar('\n'); sys_PrintString("Physical address of array[50]: "); sys_PrintInt(sys_GetPA(&array[50])); sys_PrintChar('\n'); sys_PrintString("Current physical address of stack top: "); sys_PrintInt(sys_GetPA(sys_GetReg(29))); sys_PrintChar('\n'); for (i=0; i<SIZE; i++) array[i] = i; sys_PrintString("We are currently at PC: "); sys_PrintIntHex(sys_GetReg(34)); sys_PrintChar('\n'); for (i=0; i<SIZE; i++) sum += array[i]; sys_PrintString("Total sum: "); sys_PrintInt(sum); sys_PrintChar('\n'); sys_Exit(0); return 0; }
void syscall(TD *td_caller, Request *req) { #ifdef TASK_RUNTIME td_caller->runtime += microsecs (0, TC4_stop()); #endif int retval = -5;// int err = 0; switch(req->call_number) { case SYS_Create: retval = sys_Create(td_caller, req); break; case SYS_MyTid: retval = sys_MyTid(td_caller, req); break; case SYS_MyParentTid: retval = sys_MyParentTid(td_caller, req); break; case SYS_Pass: sys_Pass(td_caller, req); break; case SYS_Exit: sys_Exit(td_caller, req); break; case SYS_Send: retval = sys_Send(td_caller, req); break; case SYS_Receive: retval = sys_Receive(td_caller, req); break; case SYS_Reply: retval = sys_Reply(td_caller, req); break; case SYS_AwaitEvent: retval = sys_AwaitEvent(td_caller, req); break; case SYS_SHUTDOWN: sys_SHUTDOWN(td_caller, req); break; case SYS_RunTime: retval = sys_RunTime(td_caller, req); break; case SYS_Output: retval = sys_Output(td_caller, req); break; case SYS_CreateSmall: retval = sys_CreateSmall(td_caller, req); break; case SYS_Destroy: retval = sys_Destroy(td_caller, req); break; case SYS_Receive_nonbl: retval = sys_Receive_nonbl(td_caller, req); break; default: kprintf("Unknown system call\n\r"); break; } *((int *)(td_caller->sp)) = retval; }