📄 visbykerneldef.h
字号:
#ifndef __VISBY_KERNELDEF_H__
#define __VISBY_KERNELDEF_H__
#include "Visby.h"
#include "..\Target\44blib.h"
#include "..\Target\44b.h"
#define VB_ENCRIT do{Visby_Critical++;}while(false)
#define VB_DECRIT do{if(Visby_Critical > 0)Visby_Critical--;}while(false)
#define VB_TICKINTV 1000 //uint: us
//任务运行的6种优先级
#define PRIO_KERNEL 0x00
#define PRIO_REAL 0x01
#define PRIO_HIGH 0x02
#define PRIO_NORMAL 0x03
#define PRIO_LOW 0x04
#define PRIO_IDLE 0x05 //不分配给用户任务使用
//CPU的6个运行模式
#define MODE_USER 0x10
#define MODE_FIQ 0x11
#define MODE_IRQ 0x12
#define MODE_SUPER 0x13
#define MODE_ABORT 0x17
#define MODE_UNDEF 0x1B
#define MODE_SYSTEM 0x1F
#define INTVEC_BASE 0x0C000000 //程序下载运行的基地址
#define INTVEC_RESER (INTVEC_BASE + 0x00000000)
#define INTVEC_UNDEF (INTVEC_BASE + 0x00000004)
#define INTVEC_SWI (INTVEC_BASE + 0x00000008)
#define INTVEC_IABT (INTVEC_BASE + 0X0000000C)
#define INTVEC_DABT (INTVEC_BASE + 0X00000010)
#define INTVEC_RESERVE (INTVEC_BASE + 0x00000014)
#define INTVEC_IRQ (INTVEC_BASE + 0x00000018)
#define INTVEC_FIQ (INTVEC_BASE + 0x0000001C)
#define INTVEC_EINT0 (INTVEC_BASE + 0x00000020)
#define INTVEC_EINT1 (INTVEC_BASE + 0x00000024)
#define INTVEC_EINT2 (INTVEC_BASE + 0x00000028)
#define INTVEC_EINT3 (INTVEC_BASE + 0x0000002c)
#define INTVEC_EINT4567 (INTVEC_BASE + 0x00000030)
#define INTVEC_TICK (INTVEC_BASE + 0x00000034)
#define INTVEC_ZDMA0 (INTVEC_BASE + 0x00000040)
#define INTVEC_ZDMA1 (INTVEC_BASE + 0x00000044)
#define INTVEC_BDMA0 (INTVEC_BASE + 0x00000048)
#define INTVEC_BDMA1 (INTVEC_BASE + 0x0000004c)
#define INTVEC_WDT (INTVEC_BASE + 0x00000050)
#define INTVEC_UERR01 (INTVEC_BASE + 0x00000054)
#define INTVEC_TIMER0 (INTVEC_BASE + 0x00000060)
#define INTVEC_TIMER1 (INTVEC_BASE + 0x00000064)
#define INTVEC_TIMER2 (INTVEC_BASE + 0x00000068)
#define INTVEC_TIMER3 (INTVEC_BASE + 0x0000006c)
#define INTVEC_TIMER4 (INTVEC_BASE + 0x00000070)
#define INTVEC_TIMER5 (INTVEC_BASE + 0x00000074)
#define INTVEC_URXD0 (INTVEC_BASE + 0x00000080)
#define INTVEC_URXD1 (INTVEC_BASE + 0x00000084)
#define INTVEC_IIC (INTVEC_BASE + 0x00000088)
#define INTVEC_SIO (INTVEC_BASE + 0x0000008c)
#define INTVEC_UTXD0 (INTVEC_BASE + 0x00000090)
#define INTVEC_UTXD1 (INTVEC_BASE + 0x00000094)
#define INTVEC_RTC (INTVEC_BASE + 0x000000a0)
#define INTVEC_ADC (INTVEC_BASE + 0x000000c0)
/////////////////CPU上电后系统加载过程////////////////////
// 中断源初始化
// CPU配置初始化
// CPU端口初始化
// 操作系统内核初始化
// 设备初始化
// 任务初始化
// 转入任务运行
//////////////////////////////////////////////////////////*/
//*S3C44B0X的30个中断源的处理函数指针
typedef void (*LPFUNC)(void);
#define VB_ISR_RESERVE 0
#define VB_ISR_EINT0 8
#define VB_ISR_EINT1 9
#define VB_ISR_EINT2 10
#define VB_ISR_EINT3 11
#define VB_ISR_EINT4567 12
#define VB_ISR_INTTICK VB_ISR_RESERVE
#define VB_ISR_Reserve1 VB_ISR_RESERVE
#define VB_ISR_Reserve2 VB_ISR_RESERVE
#define VB_ISR_INTZDMA0 16
#define VB_ISR_INTZDMA1 17
#define VB_ISR_INTBDMA0 18
#define VB_ISR_INTBDMA1 19
#define VB_ISR_WDT 20
#define VB_ISR_USER01 21
#define VB_ISR_Reserve3 VB_ISR_RESERVE
#define VB_ISR_Reserve4 VB_ISR_RESERVE
#define VB_ISR_TIMER0 24
#define VB_ISR_TIMER1 25
#define VB_ISR_TIMER2 VB_ISR_RESERVE
#define VB_ISR_TIMER3 27
#define VB_ISR_TIMER4 28
#define VB_ISR_TIMER5 29
#define VB_ISR_Reserve5 VB_ISR_RESERVE
#define VB_ISR_Reserve6 VB_ISR_RESERVE
#define VB_ISR_URXD0 32
#define VB_ISR_URXD1 33
#define VB_ISR_IIC 34
#define VB_ISR_SIO 35
#define VB_ISR_UTXD0 36
#define VB_ISR_UTXD1 37
#define VB_ISR_Reserve7 VB_ISR_RESERVE
#define VB_ISR_Reserve8 VB_ISR_RESERVE
#define VB_ISR_RTC 40
#define VB_ISR_Reserve9 VB_ISR_RESERVE
#define VB_ISR_Reserve10 VB_ISR_RESERVE
#define VB_ISR_Reserve11 VB_ISR_RESERVE
#define VB_ISR_Reserve12 VB_ISR_RESERVE
#define VB_ISR_Reserve13 VB_ISR_RESERVE
#define VB_ISR_Reserve14 VB_ISR_RESERVE
#define VB_ISR_Reserve15 VB_ISR_RESERVE
#define VB_ISR_ADC 48
#define VB_ISR_NUM (VB_ISR_ADC - VB_ISR_EINT0 + 1)
//////////////////////////////////////////////
// List
//////////////////////////////////////////////
typedef struct _Visby_List
{
void *pData;
struct _Visby_List *pNext;
} Visby_List;
/////////系统软中断定义 SWI中断///////////////
//////SWI定义为请求系统服务中断。用户的应用///
//程序通过API函数,使用SWI进行系统调用,并通//
//过R1~R12寄存器组传递调用参数。/////////////
//////SWI系统请求定义如下。///////////////////
//////////////////////////////////////////////
//中断请求号
#define VB_SWI_NULL 0x0000
#define VB_SWI_POW 0x0100 //电源管理
#define VB_SWI_TASK 0x0200 //任务请求
#define VB_SWI_MSG 0x0300 //消息管理
#define VB_SWI_DEV 0x0400 //设备操作
#define VB_SWI_INT 0x0500 //中断请求
#define SWI_POW_NORM 0x0000
#define SWI_POW_SLOW 0x0001
#define SWI_POW_IDLE 0x0002
#define SWI_POW_STOP 0x0003
#define SWI_POW_SLIDLE 0x0004
#define SWI_TASK_NEW 0x0001
#define SWI_TASK_DEL 0x0002
#define SWI_TASK_SUS 0x0003
#define SWI_TASK_SLP 0x0004
#define SWI_TASK_RSM 0x0005
#define SWI_TASK_WAI 0x0006
#define SWI_TASK_CPR 0x0007
#define SWI_MSG_GLBL 0x0001
#define SWI_MSG_SEND 0x0002
#define SWI_MSG_URGT 0x0003
#define SWI_DEV_REQ 0x0001
#define SWI_DEV_FREE 0x0002
/////////////////////CPU寄存器组////////////////////////
////////////////////////////////////////////////////////
typedef struct _Visby_CPURegs
{
uint R0; //0
uint R1; //4
uint R2; //8
uint R3; //12
uint R4; //16
uint R5; //20
uint R6; //24
uint R7; //28
uint R8; //32
uint R9; //36
uint R10; //40
uint R11; //44
uint R12; //48
uint SP; //52
uint LR; //54
uint PC; //60
uint CPSR; //64
} Visby_CPURegs;
/////////////////////////消息///////////////////////////
////////////////////////////////////////////////////////
#define VB_MSG_MIN 0x00000000
#define VB_MSG_NULL 0x00000000
#define VB_MSG_KERNEL 0x000F0000
#define VB_MSG_SYSRTN 0x00F00000
#define VB_MSG_SYSTEM 0x0F000000
#define VB_MSG_USER 0xF0000000
#define VB_MSG_MAX 0xFFFFFFFF
#define MSG_WAIT_DEV 0x00100000
#define MSG_WAIT_RES 0x00200000
#define VB_MSG(type,detail) ((type&0xFFFF0000)|(detail&0x0000FFFF))
#define VB_LPARAM(uintd) ((ushort)(uintd&0x0000FFFF))
#define VB_HPARAM(uintd) ((ushort)((uintd&0xFFFF0000)>>16))
typedef struct _Visby_Msg
{
uint Type;
void *pDetail;
struct _Visby_Msg *pNext;
} Visby_Msg;
/////////////////////任务控制块/////////////////////////
// 任务控制块中需要指明任务种类,包括内核任务,即
//统服务,和普通用户任务。
////////////////////////////////////////////////////////
#define VB_TS_ACTIVE 0x00
#define VB_TS_SLEEPING 0x10
#define VB_TS_SUSPEND 0x20
#define VB_TS_WAITMSG 0x30
typedef struct _Visby_Task
{
Visby_CPURegs Regs;
uchar Priority;
uchar State;
uint StackEnd;
Visby_Msg *pHeadMsg;
Visby_Msg *pTailMsg;
ullong ResumeTick;
uint WaitMsg;
Visby_List *pUsedDev; //new 使用的设备链
struct _Visby_Task *pNext;
} Visby_Task;
//////////////////////设备描述符////////////////////////
// 设备区别与资源在于,设备是独立与CPU的外部设备。
//分为共享型设备和独占型设备两种,在设备描述符中记
//设备的使用状况。共享型设备可以被操作系统同时分给
//个任务,但是只有当使用该设备的任务完成一次操作,
//动将设备标志为空闲,其它任务才可以使用。
/////////////////////////////////////////////////////////
#define VB_DEV_OPRT_NUM 8 //设备操作方式
#define VB_DEV_OPEN 0 //打开
#define VB_DEV_CLOSE 1 //关闭
#define VB_DEV_WRITE 2 //写入
#define VB_DEV_READ 3 //读出
#define VB_DEV_TEST 4 //测试
#define VB_DEV_RESERVE 5 //保留操作
#define VB_DEV_TYPE UCHAR
#define VB_DEV_SHARE 0x80
#define VB_DEV_ONE 0x00
typedef struct _Visby_Device
{
VB_DEV_TYPE Type; //设备类型
ULONG Desc; //具体描述
Visby_Task *pUser; //当前使用者
Visby_List *pWaitTask; //等待该设备的任务队列
} Visby_Device;
///////////////functions in Core.c//////////////////////
void *heapalloc(uint nbyte);
void heapfree(void *ptr);
//uint Visby_KInstallHandler(void (*routine)(void), uint vector);
Visby_Task *Visby_KCreateTask(void (*pentry)(void), byte priority, uint stackSize, uint mode);
void Visby_KAddTask(Visby_Task *pTheTask);
//void Visby_KDestroyTask(Visby_Task *pTheTask);
//void Visby_KRemoveTask(Visby_Task *pTheTask);
void Visby_KStart(void);
BOOL Visby_KAuthDevice(Visby_Task *pTask, Visby_Device *pDev);
/*/////////////////////////系统软中断调用///////////////////////////
*******************************************************************/
__swi(VB_SWI_NULL) void Visby_KReqNULL(void);
//任务相关的操作
__swi(VB_SWI_TASK|SWI_TASK_NEW) void Visby_KReqNewTask(void (*pentry)(void), byte priority, uint stackSize, uint mode);
__swi(VB_SWI_TASK|SWI_TASK_DEL) void Visby_KReqDelTask(Visby_Task *ptask);
__swi(VB_SWI_TASK|SWI_TASK_SUS) void Visby_KReqSusTask(Visby_Task *ptask);
__swi(VB_SWI_TASK|SWI_TASK_SLP) void Visby_KReqSlpTask(Visby_Task *ptask, uint tick);
__swi(VB_SWI_TASK|SWI_TASK_RSM) void Visby_KReqRsmTask(Visby_Task *ptask);
__swi(VB_SWI_TASK|SWI_TASK_WAI) void Visby_KReqWaiTask(Visby_Task *ptask, uint msgType);
__swi(VB_SWI_TASK|SWI_TASK_CPR) void Visby_KReqChgPrio(Visby_Task *ptask, byte newPrio);
//消息相关的操作
__swi(VB_SWI_MSG|SWI_MSG_GLBL) void Visby_KReqGlblMsg(Visby_Msg *pmsg);
__swi(VB_SWI_MSG|SWI_MSG_SEND) void Visby_KReqSendMsg(Visby_Task *ptask, Visby_Msg *pmsg);
__swi(VB_SWI_MSG|SWI_MSG_URGT) void Visby_KReqUrgtMsg(Visby_Task *ptask, Visby_Msg *pmsg);
//设备相关的操作
//__swi(VB_SWI_DEV|SWI_DEV_REQ) void Visby_KReqGetDev(Visby_Task *ptask, Visby_Device *pdev);
//__swi(VB_SWI_DEV|SWI_DEV_FREE) void Visby_KReqFreeDev(Visby_Device *pdev);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -