Ejemplo n.º 1
0
static void ioAlarmFunc(s32 id, u16 time, void *arg) {
        if (!gIOTerminate && !stopIOTimer) {
		iWakeupThread ( gDispatcherThreadID ); 
		iRotateThreadReadyQueue ( 30 ); 
		alarmID = iSetAlarm ( 625, &ioAlarmFunc, NULL ); 
	}
} 
Ejemplo n.º 2
0
// Con este ya va, pero estamos limitados 
// a cambiar solo entre 2 hilos, que son los que usa
// la abadia en Vigasoco
static int ms_handler(int ca)
{
	static int cambiar_a_main;

	if (_gCAMBIAR)
	{
		if (_gthread_async_id!=-1)
		{
			if (cambiar_a_main==1)
			{
				/* Estos 2 se pueden poner por
				 * seguridad para evitar que las llamadas
				 * RPC de por medio la lien */
				iSuspendThread(_gthread_async_id);
				iResumeThread(_gthread_main_id);

				// salir de los SleepThread de SDL_Delay
				iWakeupThread(_gthread_main_id);

				cambiar_a_main=0;

				iChangeThreadPriority(_gthread_async_id,65); 
				iChangeThreadPriority(_gthread_main_id,64); 
			}
			else
			{
				/* Estos 2 se pueden poner por
				 * seguridad para evitar que las llamadas
				 * RPC de por medio la lien  */
				iSuspendThread(_gthread_main_id);
				iResumeThread(_gthread_async_id);

				// salir de los SleepThread de SDL_Delay
				iWakeupThread(_gthread_async_id);

				cambiar_a_main=1;
				//cambiar_a_main++;

				iChangeThreadPriority(_gthread_main_id,65); 
				iChangeThreadPriority(_gthread_async_id,64); 
			}
			iRotateThreadReadyQueue(64);
		}
	}

	/* reset counter */
	T0_COUNT = 0;
	/* reset interrupt */
	T0_MODE |= (1 << 10);
	__asm__ volatile("sync.l; ei");

	return ca;
}