Line 10... |
Line 10... |
* Plasma Real Time Operating System
|
* Plasma Real Time Operating System
|
*--------------------------------------------------------------------*/
|
*--------------------------------------------------------------------*/
|
#ifndef __RTOS_H__
|
#ifndef __RTOS_H__
|
#define __RTOS_H__
|
#define __RTOS_H__
|
|
|
|
// Symmetric Multi-Processing
|
|
#define OS_CPU_COUNT 1
|
|
|
|
// Standard C library calls
|
#define printf UartPrintf
|
#define printf UartPrintf
|
//#define printf UartPrintfPoll
|
//#define printf UartPrintfPoll
|
#define scanf UartScanf
|
#define scanf UartScanf
|
#ifndef WIN32
|
#ifndef WIN32
|
#define malloc(S) OS_HeapMalloc(NULL, S)
|
#define malloc(S) OS_HeapMalloc(NULL, S)
|
#define free(S) OS_HeapFree(S)
|
#define free(S) OS_HeapFree(S)
|
#endif
|
#endif
|
#define OS_CPU_COUNT 1 //Symmetric Multi-Processing
|
|
|
|
// Typedefs
|
// Typedefs
|
typedef unsigned int uint32;
|
typedef unsigned int uint32;
|
typedef unsigned short uint16;
|
typedef unsigned short uint16;
|
typedef unsigned char uint8;
|
typedef unsigned char uint8;
|
Line 70... |
Line 73... |
int rand(void);
|
int rand(void);
|
void srand(unsigned int seed);
|
void srand(unsigned int seed);
|
long strtol(const char *s, const char **end, int base);
|
long strtol(const char *s, const char **end, int base);
|
int atoi(const char *s);
|
int atoi(const char *s);
|
char *itoa(int num, char *dst, int base);
|
char *itoa(int num, char *dst, int base);
|
void dump(const unsigned char *data, int length);
|
|
#ifndef NO_ELLIPSIS
|
#ifndef NO_ELLIPSIS
|
int sprintf(char *s, const char *format, ...);
|
int sprintf(char *s, const char *format, ...);
|
int sscanf(char *s, const char *format, ...);
|
int sscanf(char *s, const char *format, ...);
|
#endif
|
#endif
|
#define _LIBC
|
#ifdef INCLUDE_DUMP
|
|
void dump(const unsigned char *data, int length);
|
#endif
|
#endif
|
|
#ifdef INCLUDE_QSORT
|
|
void qsort(void *base,
|
|
long n,
|
|
long size,
|
|
int (*cmp)(const void *,const void *));
|
|
void *bsearch(const void *key,
|
|
const void *base,
|
|
long n,
|
|
long size,
|
|
int (*cmp)(const void *,const void *));
|
|
#endif
|
|
#ifdef INCLUDE_TIMELIB
|
|
#define difftime(time2,time1) (time2-time1)
|
|
typedef unsigned long time_t; //start at 1/1/80
|
|
struct tm {
|
|
int tm_sec; //(0,59)
|
|
int tm_min; //(0,59)
|
|
int tm_hour; //(0,23)
|
|
int tm_mday; //(1,31)
|
|
int tm_mon; //(0,11)
|
|
int tm_year; //(0,n) from 1990
|
|
int tm_wday; //(0,6) calculated
|
|
int tm_yday; //(0,365) calculated
|
|
int tm_isdst; // calculated
|
|
};
|
|
time_t mktime(struct tm *tp);
|
|
void gmtime_r(const time_t *tp, struct tm *out);
|
|
#endif
|
|
#define _LIBC
|
|
#endif //_LIBC
|
|
|
/***************** Assembly **************/
|
/***************** Assembly **************/
|
typedef uint32 jmp_buf[20];
|
typedef uint32 jmp_buf[20];
|
extern uint32 OS_AsmInterruptEnable(uint32 state);
|
extern uint32 OS_AsmInterruptEnable(uint32 state);
|
extern void OS_AsmInterruptInit(void);
|
extern void OS_AsmInterruptInit(void);
|
Line 101... |
Line 134... |
void OS_HeapAlternate(OS_Heap_t *Heap, OS_Heap_t *Alternate);
|
void OS_HeapAlternate(OS_Heap_t *Heap, OS_Heap_t *Alternate);
|
void OS_HeapRegister(void *Index, OS_Heap_t *Heap);
|
void OS_HeapRegister(void *Index, OS_Heap_t *Heap);
|
|
|
/***************** Thread *****************/
|
/***************** Thread *****************/
|
#if OS_CPU_COUNT <= 1
|
#if OS_CPU_COUNT <= 1
|
|
// Single CPU
|
#define OS_CpuIndex() 0
|
#define OS_CpuIndex() 0
|
#define OS_CriticalBegin() OS_AsmInterruptEnable(0)
|
#define OS_CriticalBegin() OS_AsmInterruptEnable(0)
|
#define OS_CriticalEnd(S) OS_AsmInterruptEnable(S)
|
#define OS_CriticalEnd(S) OS_AsmInterruptEnable(S)
|
#define OS_SpinLock() 0
|
#define OS_SpinLock() 0
|
#define OS_SpinUnlock(S)
|
#define OS_SpinUnlock(S)
|
#define OS_SpinLockGet() 0
|
#define OS_SpinCountGet() 0
|
#define OS_SpinLockSet(S)
|
#define OS_SpinCountSet(S)
|
#else
|
#else
|
|
// Symmetric multiprocessing
|
uint32 OS_CpuIndex(void);
|
uint32 OS_CpuIndex(void);
|
#define OS_CriticalBegin() OS_SpinLock()
|
#define OS_CriticalBegin() OS_SpinLock()
|
#define OS_CriticalEnd(S) OS_SpinUnlock(S)
|
#define OS_CriticalEnd(S) OS_SpinUnlock(S)
|
uint32 OS_SpinLock(void);
|
uint32 OS_SpinLock(void);
|
void OS_SpinUnlock(uint32 state);
|
void OS_SpinUnlock(uint32 state);
|
uint32 OS_SpinLockGet(void);
|
uint32 OS_SpinCountGet(void);
|
void OS_SpinLockSet(uint32 count);
|
void OS_SpinCountSet(uint32 count);
|
|
void OS_CpuInterrupt(uint32 cpuIndex, uint32 bitfield);
|
#endif
|
#endif
|
|
|
#ifdef WIN32
|
#ifdef WIN32
|
#define STACK_SIZE_MINIMUM (1024*4)
|
#define STACK_SIZE_MINIMUM (1024*4)
|
#else
|
#else
|
Line 143... |
Line 179... |
void OS_ThreadInfoSet(OS_Thread_t *Thread, void *Info);
|
void OS_ThreadInfoSet(OS_Thread_t *Thread, void *Info);
|
void *OS_ThreadInfoGet(OS_Thread_t *Thread);
|
void *OS_ThreadInfoGet(OS_Thread_t *Thread);
|
uint32 OS_ThreadPriorityGet(OS_Thread_t *Thread);
|
uint32 OS_ThreadPriorityGet(OS_Thread_t *Thread);
|
void OS_ThreadPrioritySet(OS_Thread_t *Thread, uint32 Priority);
|
void OS_ThreadPrioritySet(OS_Thread_t *Thread, uint32 Priority);
|
void OS_ThreadTick(void *Arg);
|
void OS_ThreadTick(void *Arg);
|
|
void OS_ThreadCpuLock(OS_Thread_t *Thread, int CpuIndex);
|
|
|
/***************** Semaphore **************/
|
/***************** Semaphore **************/
|
#define OS_SUCCESS 0
|
#define OS_SUCCESS 0
|
#define OS_ERROR -1
|
#define OS_ERROR -1
|
#define OS_WAIT_FOREVER -1
|
#define OS_WAIT_FOREVER -1
|
Line 183... |
Line 220... |
void OS_TimerDelete(OS_Timer_t *Timer);
|
void OS_TimerDelete(OS_Timer_t *Timer);
|
void OS_TimerStart(OS_Timer_t *Timer, uint32 Ticks, uint32 TicksRestart);
|
void OS_TimerStart(OS_Timer_t *Timer, uint32 Ticks, uint32 TicksRestart);
|
void OS_TimerStop(OS_Timer_t *Timer);
|
void OS_TimerStop(OS_Timer_t *Timer);
|
|
|
/***************** ISR ********************/
|
/***************** ISR ********************/
|
void OS_InterruptServiceRoutine(uint32 Status);
|
#define STACK_EPC 88/4
|
|
void OS_InterruptServiceRoutine(uint32 Status, uint32 *Stack);
|
void OS_InterruptRegister(uint32 Mask, OS_FuncPtr_t FuncPtr);
|
void OS_InterruptRegister(uint32 Mask, OS_FuncPtr_t FuncPtr);
|
uint32 OS_InterruptStatus(void);
|
uint32 OS_InterruptStatus(void);
|
uint32 OS_InterruptMaskSet(uint32 Mask);
|
uint32 OS_InterruptMaskSet(uint32 Mask);
|
uint32 OS_InterruptMaskClear(uint32 Mask);
|
uint32 OS_InterruptMaskClear(uint32 Mask);
|
|
|
/***************** Init ******************/
|
/***************** Init ******************/
|
void OS_Init(uint32 *HeapStorage, uint32 Bytes);
|
void OS_Init(uint32 *HeapStorage, uint32 Bytes);
|
void OS_Start(void);
|
void OS_Start(void);
|
void OS_Assert(void);
|
void OS_Assert(void);
|
void MainThread(void *Arg);
|
void MainThread(void *Arg);
|
|
void OS_DebuggerInit(void);
|
|
|
/***************** UART ******************/
|
/***************** UART ******************/
|
typedef uint8* (*PacketGetFunc_t)(void);
|
typedef uint8* (*PacketGetFunc_t)(void);
|
void UartInit(void);
|
void UartInit(void);
|
void UartWrite(int C);
|
void UartWrite(int C);
|