interface { HotTask_IREG iSystemStart;//0x55aa系统上电测试变量 //任务级别 在HotTaskTick()中用于同级任务循环扫描 HotTask_REG_PriorityReadyQueue PriorityReadyQueue[HotTask_MaxCount];//就绪队列 //................ }HotTask_Interface;
/*------------------------------------------------------------------------------ HotTask51任务优先就绪队列HotTask_BITS_PriorityReadyQueue类型接口定义 HotTask51中所有涉及任务的操作,某任务的挂起、就绪状态,及原始优先级别和遍历计数 等都是通过本定义实现。 其中: #define interface typedef struct//COM接口定义 --------------------------------------------------------------------------------*/ interface {//任务“遍历从低字节到高字节”---任务ID升序遍历,任务1~任务7 HotTask_REG ReadyCount: 3;//0 初值为PrioValue HotTask_REG ReadyBit: 1;//5 该任务就绪位,只要ReadyCount-1=0即被置1 HotTask_REG Priority: 3;//4 初值为(TaskPriority^7)<<3 HotTask_REG Suspend: 1;//7 该任务已被挂起(初始化为1,即无此任务) // 被挂起的任务不参与就绪和切换的处理 }HotTask_BITS_PriorityReadyQueue, *pHotTask_BITS_PriorityReadyQueue;
/*------------------------------------------------------------------------------ HotTask51任务优先就绪队列HotTask_BITS_PriorityReadyQueue类型联合定义 HotTask51中所有位域操作涉及都加入联合以便可以用字节和位分别访问。 --------------------------------------------------------------------------------*/ typedef volatile union {//以数组表示[8] HotTask_REG Regs;//以寄存器字节访问 HotTask_BITS_PriorityReadyQueue Bits;//以寄存器位访问 }HotTask_REG_PriorityReadyQueue, *pHotTask_REG_PriorityReadyQueue;
/*--------------------------------------------------------------------------------- HotTask51任务函数向量表接口IHotTask_TaskVtbl_Interface类型定义 HotTask51中涉及任务函数数组及任务函数指针数组的,都将以类COM接口封装。 采用COM接口技术的最大好处是将C语言通过其类型的定义,即可对接口内的成员(函数、变量) 如同Delphi/C++/C#/Jave/VB.Net等高级语言一样,灵活的访问其所有成员。 -----------------------------------------------------------------------------------*/
interface { void (*Task0)(void);//注意:和真的任务0名称Task0一样对仿真大有好处 void (*Task1)(void);//建议将其和实际名称一致,虽然可以任意取名 }IHotTask_TaskVtbl_Interface, *pIHotTask_TaskVtbl_Interface;
typedef volatile union { /*---------------------------------------- 以函数名检索 ----------------------------------------*/ IHotTask_TaskVtbl_Interface Pointer; /*------------------------------------------------------------------------------------------------ 以函数数组检索。请注意:一定要用计算来得到数组的个数,这样可随意增添任务而不改程序 -------------------------------------------------------------------------------------------------*/ pHotTaskFUNC Array[sizeof(IHotTask_TaskVtbl_Interface) / sizeof(pHotTaskFUNC)]; }IHotTask_Task_Interface;
/*-------------------------------------------------------------------------- HotTask51事件优先就绪位队列HotEvent_BITS_PriorityReadyQueue类型接口定义 HotTask51中的“事件”就是MCU中的硬件中断,它于中断使能寄存器定义完全等同。 只是HotTask51将其总中断使能位作为其 --------------------------------------------------------------------------*/ interface {//事件“遍历从高位到低位”---位左移遍历,若有扩展,增加搜索 HotEvent_REG EX0_ReadyBit: 1;//0外部中断0事件就绪位 HotEvent_REG ET0_ReadyBit: 1;//1定时器0事件就绪位 HotEvent_REG EX1_ReadyBit: 1;//2外部中断1事件就绪位 HotEvent_REG ET1_ReadyBit: 1;//3定时器1事件就绪位 HotEvent_REG ES_ReadyBit: 1;//4串口事件就绪位 HotEvent_REG ET2_ReadyBit: 1;//5定时器2事件就绪位(HotTaskTimer) HotEvent_REG EINT_EnableBit: 1;//6 扩展事件使能位主要为以后扩展事件 HotEvent_REG Wdt_Init_ReadyBit: 1;//7 系统狗任务和用户初始化任务 //(只有此位与51对应的EA定义不同) }HotEvent_BITS_PriorityReadyQueue, *pHotEvent_BITS_PriorityReadyQueue;
/*------------------------------------------------------------------------------ HotTask51事件优先就绪队列HotEvent_REG_PriorityReadyQueue类型定义 HotTask51中所有位域操作涉及都加入联合以便可以用字节和位分别访问。 --------------------------------------------------------------------------------*/ typedef volatile union {//以数组表示[x] HotEvent_REG Regs;//以寄存器字节访问,和51的IE定义相同 HotEvent_BITS_PriorityReadyQueue Bits;//以寄存器位访问 }HotEvent_REG_PriorityReadyQueue, *pHotEvent_REG_PriorityReadyQueue;
/*--------------------------------------- HotTaskLock ----------------------------------------*/ typedef volatile struct { HotTask_REG TaskIdle: 1;//0 HotTask_REG TaskUser1: 1;//1 HotTask_REG TaskUser2: 1;//2 HotTask_REG TaskUser3: 1;//3 HotTask_REG TaskUser4: 1;//4 HotTask_REG TaskUser5: 1;//5 HotTask_REG TaskUser6: 1;//6 HotTask_REG TaskWdt_Init: 1;//7 }HotTask_BITS_Lock, *HotTask_BITS_pLock;
typedef volatile union { HotTask_REG Regs; HotTask_BITS_Lock Bits; }HotTask_REG_Lock, *HotTask_REG_pLock;
/*--------------------------------------- HotTaskId ----------------------------------------*/
typedef volatile struct { HotTask_REG HotTaskForeId: 3;//0 HotTask_REG Reserved1: 1;//3 HotTask_REG HotTaskBackId: 3;//4 HotTask_REG Reserved2: 1;//7 }HotTask_BITS_ID, *HotTask_BITS_pID;
typedef volatile union { HotTask_REG Regs; HotTask_BITS_ID Bits; }HotTask_REG_ID, *HotTask_REG_pID;
|