Name | Modified | Size | Downloads / Week |
---|---|---|---|
example | 2012-09-09 | ||
README | 2012-09-09 | 1.9 kB | |
avark.zip | 2012-09-09 | 6.6 kB | |
README.txt | 2012-04-11 | 1.8 kB | |
Totals: 4 Items | 10.3 kB | 0 |
AVARK is a round robin kernel curently for the AVR platform. The kernel consists of four header files. 1 avark.h 2 semaphore.h 3 terminal.h 4 time.h avark.h has the main kernel. (the context switcher and scheduler and other important variable declarations) semaphore.h has code to implement semaphores terminal.h has code to implement command line interface; commands being passed down the USART. time.h has code to keep track of time (system clock); also needed for delays. AVARK is being developed on the ATmega640 right now. It is using the TIMER2 of ATmega640 to schedule the processs. It can schedule upto 8 processes. To use AVARK (minimalistic), follow the instructions: 1. Include avark.h 2. Define the macro MAX_PROCESSES to the number of processes between which you want to do multitasking. eg: #define MAX_PROCESSES 2 3. Declare the stack for each processes. Stack will be array of type K_STACK. Its length will be your desired stack memory. eg: K_STACK task1_stack[64]; K_STACK task2_stack[80]; 4. Define all the processes you want to execute simultaneously as normal functions. It is important that the functions neither return nor accept any arguments. eg: void task1() { .... .... .... } void task2() { .... .... .... } 3. Do everything else that you need to do that is declare other variables, initialise peripherals etc.... 4. Initialise the kernel using the K_init() function. K_init takes arguments in the following pattern K_init(name of first process, address of last element of first process stack, ....same for otherprocesses); eg: K_init(task1, &task1_stack[63], task2, task2_stack[79]); 5. call K_start() function. The kernel will now multitask between the two processes. Compile the main c file (from which you include avark.h) using avr-gcc compiler in the usual way.