コード例 #1
0
ファイル: posixino.cpp プロジェクト: ern0/posixino
void Posixino::timerThread() {

    while (true) {

        usleep(1000);

        for (int n = 0; n < 3; n++) {
            if (interruptCounter[n] < 0) continue;

            interruptCounter[n] += 1000;
            if (interruptCounter[n] < interruptTiming[n]) continue;
            interruptCounter[n] -= interruptTiming[n];

            if (n == 0) {
# ifdef TIMER0
                TIMER0_COMPA_vect();
# endif
            }
            if (n == 1) {
# ifdef TIMER1
                TIMER1_COMPA_vect();
# endif
            }
            if (n == 2) {
# ifdef TIMER2
                TIMER2_COMPA_vect();
# endif
            }

        } // for interrupts
    } // forever

} // timerThread()
コード例 #2
0
ファイル: progs.c プロジェクト: pseudoblau/PSP-Versuch3
void performTest(SchedulingStrategy strategy)
{
	uint8_t strategyIndex = 0;
	lcd_clear();

	// Change scheduling strategy
	switch (strategy)
	{
		case OS_SS_EVEN:
		strategyIndex = 0;
		lcd_writeProgString(PSTR("Even"));
		os_setSchedulingStrategy(OS_SS_EVEN);
		break;

		case OS_SS_RANDOM:
		strategyIndex = 4;
		lcd_writeProgString(PSTR("Random"));
		os_setSchedulingStrategy(OS_SS_RANDOM);
		break;

		case OS_SS_ROUND_ROBIN:
		strategyIndex = 1;
		lcd_writeProgString(PSTR("RoundRobin"));
		os_setSchedulingStrategy(OS_SS_ROUND_ROBIN);
		break;

		case OS_SS_INACTIVE_AGING:
		strategyIndex = 2;
		lcd_writeProgString(PSTR("InactiveAging"));
		os_setSchedulingStrategy(OS_SS_INACTIVE_AGING);
		break;

		case OS_SS_RUN_TO_COMPLETION:
		strategyIndex = 3;
		lcd_writeProgString(PSTR("RunToCompletion"));
		os_setSchedulingStrategy(OS_SS_RUN_TO_COMPLETION);
		break;

		default:
		break;
	}
	_delay_ms(2000);

	// Perform scheduling test.
	// Save the id of the running process and call the scheduler.
	i = 0;
	while(i < 32)
	{
		capture[i++] = 1;
		TIMER2_COMPA_vect();
	}

	// Print captured schedule
	lcd_clear();
	for (i = 0; i < 32; i++)
	{
		lcd_writeDec(capture[i]);
		_delay_ms(2 * DEFAULT_OUTPUT_DELAY);
	}
	
	// Check captured schedule
	if (strategyIndex < 4)
	{
		_delay_ms(2000);
		lcd_clear();

		for (i = 0; i < 32; i++)
		{
			if (capture[i] != pgm_read_byte(&scheduling[strategyIndex][i]))
			{
				lcd_writeProgString(PSTR("Error at step "));
				lcd_writeDec(i);
				while (1) {}
			}
			if (i == 31)
			{
				lcd_writeProgString(PSTR("OK"));
			}
		}
	}
	
	_delay_ms(2000);
}