// **************************************** // User Parameters // **************************************** // Debugging #define DEBUG 1 // Queue Sizes #define MAX_QUEUE_HP 20 #define MAX_QUEUE_HA 4 #define MAX_QUEUE_SP 4 #define MAX_QUEUE_SA 4 #define MAX_JOBS 20 // Optional Features #define NUM_LOCKS 0 // Number of Locks; Size(N) = N // Stack Sizes #define DSTACK_HP 450 // Hard Periodic Data Stack Size; Size(N)=N #asm(".equ DSTACK_HP=450"); #define HSTACK_HP 400 // Hard Periodic Hardware Stack Size; Size(N)=N #asm(".equ HSTACK_HP=400"); #define DSTACK_HA 450 // Hard APeriodic Data Stack Size; Size(N)=N #asm(".equ DSTACK_HA=450"); #define HSTACK_HA 400 // Hard APeriodic Hardware Stack Size; Size(N)=N #asm(".equ HSTACK_HA=400"); #define DSTACK_SP 450 // Soft Periodic Data Stack Size; Size(N)=N #asm(".equ DSTACK_SP=450"); #define HSTACK_SP 400 // Soft Periodic Hardware Stack Size; Size(N)=N #asm(".equ HSTACK_SP=400"); #define DSTACK_SA 450 // Soft APeriodic Data Stack Size; Size(N)=N #asm(".equ DSTACK_SA=450"); #define HSTACK_SA 400 // Soft APeriodic Hardware Stack Size; Size(N)=N #asm(".equ HSTACK_SA=400"); // Context Switching #define REMOVE_MISSED_D 1 // Remove tasks from queue if deadline missed #define RESCHED_SP 0 // Will Reschedule SP Task, even if already in Queue #define SAVE_REGS 0 // Save user regs on context switch (ie asm) #define REG_ALLOC 0 // Compiler Allocates Registers // Operating System Call Protection #define CALL_OS #asm("cli") #define RETURN_OS #asm("sei") // **************************************** // Internal Parameters // **************************************** // Initialization #define INIT_SREG 0b00000000 // Initial SREG Register Value #asm(".equ INIT_SREG=0b00000000"); #define INIT_TIMSK 0b00000010 // Initial TIMSK Register Value #define INIT_MCUCR 0b10000000 // Initial MCUCR Register Value #define INIT_TCCR0 0b00000010 // Initial TCCR0 Register Value // Job Types #define TYPE_HP 0 #define TYPE_HA 1 #define TYPE_SP 2 #define TYPE_SA 3 // Job Parameters #define NO_DEADLINE 0 #define NO_PERIOD 0 #define NO_AFTER_TASK 0 void NO_TASK (void); // Context Size #if ((SAVE_REGS == 1) && (REG_ALLOC == 0)) #define CONTEXT_SIZE 23 #asm(".equ CONTEXT_SIZE=25"); #elif ((SAVE_REGS == 1) || (REG_ALLOC == 1)) #define CONTEXT_SIZE 21 #asm(".equ CONTEXT_SIZE=22"); #else #define CONTEXT_SIZE 15 #asm(".equ CONTEXT_SIZE=16"); #endif // Other #ifndef NULL #define NULL 0 #endif #define SCHEDULE_TIME 0 #define MAX_SPACE 65535 // **************************************** // Other // **************************************** // Check using valid memory model #ifdef _MODEL_TINY_ #error Please compile using small memory model #endif // Set compiler register allocation #if (REG_ALLOC == 1) #pragma regalloc+ #else #pragma regalloc- #endif // Include proper libraries for debugging #if (DEBUG == 1) #include #endif