Example #1
0
File: task.c Project: dns/ArdOS
void procEnq(int pid, tTCB *tasklist, tQueue *q)
{
	#if OSSCHED_TYPE==OS_PRIORITY
		prioEnq(pid, tasklist, q);
	#elif OSSCHED_TYPE==OS_RR
		enq(pid,  q);
	#endif
				
}
Example #2
0
void OSTakeSema(TOSSema *sema)
{
	unsigned char sreg;
	
	OSMakeAtomic(&sreg);
	if(sema->semaval>0)
		sema->semaval--;
	else
	{
		// Block current process
		_tasks[_running].status |= _OS_BLOCKED;
		
		// Enqueue this task
		prioEnq(_running, _tasks, &sema->taskQ);
		OSExitAtomic(sreg);

		// Call scheduler.
		OSSwap();
	}
	OSExitAtomic(sreg);
}