Newer
Older
#include <syscall.h>
#include <context-switch.h>
#include <bwio.h>
register int RetVal asm("r0");
int Return = RetVal;
return Return;
}
int MyTid() {
int Address = (int )(&MyTid);
//bwprintf(COM2,"MyTid Address: %d\n\r",Address);
asm volatile ("swi 1\n\t");
register int RetVal asm("r0");
int R = RetVal;
//bwprintf(COM2,"Back to MyTid, my tid is %d, My Address is %d\n\r",R);
}
int MyParentTid() {
register int RetVal asm("r0");
return RetVal;
}
void Pass() {
}
void Exit() {
int ActualSend(AP* Args){
asm volatile ("swi 5\n\t");
register int RetVal asm("r0");
int R = RetVal;
return R;
}
// tid is that of the one its sending to
int Send (int TaskID, void* Msg, int MsgLen, void* Reply, int ReplyLen) {
AP Args;
Args.arg0 = (void *)(TaskID);
Args.arg1 = Msg;
bwprintf(COM2,"Send_USR: Msg: %d\n\r",Msg);
Args.arg2 = (void *)(MsgLen);
Args.arg4 = (void *)(ReplyLen);
int MyID = MyTid();
bwprintf(COM2,"Send: Task %d send MsgLen %d\n\r",TaskID,MsgLen);
int Return = ActualSend(&Args);
return Return;
}
int ActualReceive(AP* Args){
asm volatile ("swi 6\n\t");
register int RetVal asm("r0");
int Return = RetVal;
return Return;
int Receive (int TaskID, void* Msg, int MsgLen) {
AP Args;
Args.arg0 = (void *)(TaskID);
Args.arg1 = (void *)(Msg);
Args.arg2 = (void *)(MsgLen);
bwprintf(COM2,"Receive_USR: TaskID%d, Msglen%d\n\r",TaskID,MsgLen);
int Return = ActualReceive(&Args);
return Return;
}
int ActualReplay(AP* Args){
asm volatile ("swi 7\n\t");
register int RetVal asm("r0");
int Return = RetVal;
return Return;
/*
The calling task and the sender return at the same logical time. If they are of the same priority the sender runs first.
*/
AP Args;
Args.arg0 = (void *)(TaskID);
Args.arg1 = (void *)(Reply);
Args.arg2 = (void *)(ReplyLen);
int Return = ActualReplay(&Args);
int RecordNameServer(AP* Args){
asm volatile("swi 8\n\t");
register int RetVal asm("r0");
int Return = RetVal;
return Return;
}