BarryServer : Git

All the code for all my projects
// BarryServer : Git / Nucleus / blob / 315b2be8cb3ea85432c91eeb42667993e139cd78 / task / time.c

// Related

Nucleus

Barry Multi-core scheduling ca4f3ab (3 years, 3 months ago)
/*
 * This file controls the system clock and contains the functions related to
 * getting and setting the time from various sources.  It keeps a monotonic
 * clock internally, but can also make use of the tasks' clocks, and the RTC.
 */

#include <stdint.h>
#include <nucleus/cpu.h>
#include <nucleus/task.h>

uint32_t monotonic = 0;
uint8_t slice[MAX_CPUS] = {0};

/* Timer interrupt */
void
timer_handler(struct InterruptFrame *frame)
{
	if (CPUID == 0)
		monotonic++;

	if (!current)
		return;
	slice[CPUID]++;

	/* Call scheduler */
	if (slice[CPUID] < (current->priority * 10))
		return;
	slice[CPUID] = 0;
	schedule();
}