Esempio n. 1
0
File: isr.c Progetto: mios16/CPE159
void TX()
{

	//dequeue out_q to write to port
	char ch = '\0';	//Nul, '\0'
	ch = MsgDeQ(&port_data.echo_buffer);			//******************echo_buffer????********
	
	if((&port_data.echo_buffer !=0)//if echo buffer of port data is not empty
	{
		ch = MsgDeQ(&port_data.echo_buffer));	//ch = dequeue from echo buffer
	}
void MsgRcvISR(msg_t *p)
{	
	if(!MsgEmptyQ(&(mboxes[cur_pid].msg_q)))
		MsgDeQ(p, &(mboxes[cur_pid].msg_q));
	else
	{
		EnQ(cur_pid, &(mboxes[cur_pid].wait_q));
		pcbs[cur_pid].state = WAIT;
		cur_pid = -1;
	}
}
Esempio n. 3
0
File: isr.c Progetto: suond/csc159
void MsgRcvISR(int msg_addr) {
	msg_t *receiving_msg_ptr, *queued_msg_ptr;
	int msg_q_id;

	receiving_msg_ptr = (msg_t*)msg_addr;
	msg_q_id = receiving_msg_ptr->recipient;
	if (msg_q[msg_q_id].len > 0) {
		queued_msg_ptr = MsgDeQ(&msg_q[msg_q_id]);
		*receiving_msg_ptr = *queued_msg_ptr;
	
	}else {
		EnQ( running_pid, &msg_q[msg_q_id].wait_q);
		pcb[running_pid].state = WAIT;
		running_pid=-1;
	}
}
Esempio n. 4
0
File: isr.c Progetto: mios16/CPE159
void MsgRcvISR(int msg_addr)
{
	int msg_q_id;
	msg_t *receiving_msg_ptr, *queued_msg_ptr;	

	receiving_msg_ptr = (msg_t *) msg_addr;	//set 1st abot to point to msg space
	msg_q_id = receiving_msg_ptr->recipient; 
	if(msg_q[msg_q_id].len > 0)
	{	 
		queued_msg_ptr = MsgDeQ(&(msg_q[msg_q_id]));
		*receiving_msg_ptr = *queued_msg_ptr;
		return;
	}
	else
	{
		EnQ(running_pid, &msg_q[msg_q_id].wait_q);
		pcb[running_pid].state = WAIT;	
		running_pid = -1;
	}
}	
void MsgRcvISR()
{
   int mid;
   msg_t *dest, *src;

   mid = cur_pid; // private mbox only now
   dest = (msg_t *)pcbs[cur_pid].tf_p->eax; // eax since MsgRcv changed
	
   if(MsgEmptyQ(&mboxes[mid].msg_q))
   {
      EnQ(cur_pid, &mboxes[mid].wait_q);
      pcbs[cur_pid].state = WAIT;
      cur_pid = -1;
   }
   else
   {	
      src = MsgDeQ(&mboxes[mid].msg_q);
      *dest = *src;
   }
}
Esempio n. 6
0
File: isr.c Progetto: mios16/CPE159
void MsgRcvISR(int msg_addr)
{
	int msg_q_id;
	msg_t *receiving_msg_ptr, *queued_msg_ptr;

	receiving_msg_ptr = (msg_t *) msg_addr;	//set 1st abot to point to msg space
	msg_q_id = receiving_msg_ptr->recipient; // *************
	if(msg_q[msg_q_id].len > 0)
	{	 
		queued_msg_ptr = MsgDeQ(&(msg_q[msg_q_id]));
		*receiving_msg_ptr = *queued_msg_ptr;
		return;
	}
	else
	{
		cons_printf("MsgRcvISR: BLOCKING process # %d !\n", running_pid);
		EnQ(running_pid, &msg_q[msg_q_id].wait_q);
		pcb[running_pid].state = WAIT;	
		running_pid = -1;
	}
}