You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
873 B
C
45 lines
873 B
C
3 years ago
|
#include "kernel.h"
|
||
|
#include "ecall.h"
|
||
|
#include "sched.h"
|
||
|
#include "mutex.h"
|
||
|
|
||
|
void thread_1();
|
||
|
|
||
|
extern ProcessControlBlock processes[PROCESS_COUNT];
|
||
|
|
||
|
extern void init()
|
||
|
{
|
||
|
// set up processes
|
||
|
processes[0].pid = 1;
|
||
|
processes[0].pc = (int) thread_1;
|
||
|
processes[0].regs[2] = 128;
|
||
|
processes[0].status = PROC_RDY;
|
||
|
processes[0].requested_lock = 0;
|
||
|
|
||
|
processes[1].pid = 2;
|
||
|
processes[1].pc = (int) thread_1;
|
||
|
processes[1].regs[2] = 256;
|
||
|
processes[1].status = PROC_RDY;
|
||
|
processes[1].requested_lock = 0;
|
||
|
|
||
|
scheduler_run_next();
|
||
|
}
|
||
|
|
||
|
void thread_1() {
|
||
|
int a = 0; // a4
|
||
|
int b = 0; // a5
|
||
|
|
||
|
while (true) {
|
||
|
a++;
|
||
|
if (a > 1000000) {
|
||
|
__asm__ __volatile__ (
|
||
|
"ebreak"
|
||
|
);
|
||
|
b++;
|
||
|
a = 0;
|
||
|
}
|
||
|
if (b > 1000000) {
|
||
|
b = 0;
|
||
|
}
|
||
|
}
|
||
|
}
|