Example #1
0
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;
}