Exemple #1
0
kstat_t krhino_init(void)
{
    g_sys_stat = RHINO_STOPPED;

#if (RHINO_CONFIG_USER_HOOK > 0)
    krhino_init_hook();
#endif

    runqueue_init(&g_ready_queue);

    tick_list_init();

#if (RHINO_CONFIG_SYSTEM_STATS > 0)
    kobj_list_init();
#endif

#if (RHINO_CONFIG_MM_TLF > 0)
    k_mm_init();
#endif

#if (RHINO_CONFIG_KOBJ_DYN_ALLOC > 0)
    klist_init(&g_res_list);
    krhino_sem_create(&g_res_sem, "res_sem", 0);
    dyn_mem_proc_task_start();
#endif

#if (RHINO_CONFIG_CPU_NUM > 1)
    for (uint8_t i = 0; i < RHINO_CONFIG_CPU_NUM; i++) {
        krhino_task_cpu_create(&g_idle_task[i], "idle_task", NULL, RHINO_IDLE_PRI, 0,
                               &g_idle_task_stack[i][0], RHINO_CONFIG_IDLE_TASK_STACK_SIZE,
                               idle_task, i, 1u);
    }
#else
    krhino_task_create(&g_idle_task[0], "idle_task", NULL, RHINO_IDLE_PRI, 0,
                       &g_idle_task_stack[0][0], RHINO_CONFIG_IDLE_TASK_STACK_SIZE,
                       idle_task, 1u);
#endif

#if (RHINO_CONFIG_WORKQUEUE > 0)
    workqueue_init();
#endif

#if (RHINO_CONFIG_TIMER > 0)
    ktimer_init();
#endif

#if (RHINO_CONFIG_CPU_USAGE_STATS > 0)
    cpu_usage_stats_start();
#endif

    rhino_stack_check_init();

    return RHINO_SUCCESS;
}
Exemple #2
0
// set the int 0 timer to trigger a bit more than every ~53ms 
void setup_timer() {

	// 1.193182 MHz input clock
	// divide by 1193 (0x04a9) to get around 1000Hz (~1000.15256 Hz)
	kdebug("setting int0 timer ");	
	pic_mask_interrupt(INT_TIMER);
	outb(0x43, 0x34); // 00110100b - chan 0, freq. divider, set lo/hi byte
	outb(0x40, 0xa9); // Low byte of divider to chan 0 reload value
	outb(0x40, 0x04); // High byte of divider to chan 0 reload value


	kdebug("initialising ktimers");

	/* Say we call it every 1000 useconds, when we really do every 999.847 useconds) */
	ktimer_init(1000); 
	
	add_handler(INTR_BASE + INT_TIMER, &early_timer_isr);
	pic_unmask_interrupt(INT_TIMER);
}
Exemple #3
0
void ktimer_event_init()
{
	ktable_init(&ktimer_event_table);
	ktimer_init();
	softirq_register(KTE_SOFTIRQ, ktimer_event_handler);
}