int kmain( void ) { struct pcb_s* process_screen_right_pcb; struct pcb_s* process_screen_top_left_pcb; struct pcb_s* process_screen_bottom_left_pcb; FramebufferInitialize(); sched_init(); process_screen_right_pcb = sys_create_process((func_t*)&process_screen_right, 18); process_screen_top_left_pcb = sys_create_process((func_t*)&process_screen_top_left, 20); process_screen_bottom_left_pcb = sys_create_process((func_t*)&process_screen_bottom_left, 20); // ****************************************** // switch CPU to USER mode // ****************************************** ENABLE_IRQ(); __asm("cps 0x10"); // USER Program // ****************************************** //On attend la terminaison de notre processus. sys_wait(process_screen_right_pcb); sys_wait(process_screen_top_left_pcb); sys_wait(process_screen_bottom_left_pcb); return 0; }
int main(int argc, char const *argv[]) { rpiInit(); FramebufferInitialize(); _init_vector_table(); // disable IRQ *INTERRUPT_DISABLE_BASIC_IRQS = 0xffffffff; *INTERRUPT_DISABLE_IRQS1 = 0xffffffff; *INTERRUPT_DISABLE_IRQS2 = 0xffffffff; *INTERRUPT_FIQ_CTRL = 0; // 20c _disable_IRQ(); // set Timer Interrupt *INTERRUPT_ENABLE_BASIC_IRQS = 0x01; // stop timer *TIMER_CONTROL &= 0xffffff00; // set timer clock -> 1MHz //(0xF9=249: timer clock=250MHz/(249+1)) *TIMER_PREDIVIDER = 0x000000F9; // Timer (100 msec) *TIMER_LOAD = 100000 - 1; *TIMER_RELOAD = 100000 - 1; // clear IRQ flag *TIMER_IRQ_CLR = 0; // start timer *TIMER_CONTROL |= 0x000000A2; // enable interrupts *INTERRUPT_ENABLE_BASIC_IRQS = 0x01; // enable IRQ _enable_IRQ(); while (true) { _disable_IRQ(); if (true == g_interrupt) { g_interrupt = false; _enable_IRQ(); redraw(); } else { _enable_IRQ(); } } return 0; }
void kmain( void ) { FramebufferInitialize(); sched_init(COLLABORATIVE); int p = 5; for(int i=0;i<5000000;i++) { p = (p*p)%27; } create_process((func_t*)&user_process1); create_process((func_t*)&user_process2); create_process((func_t*)&user_process3); __asm("cps 0x10"); // switch CPU to USER mode sys_exit(0); }