⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os.c

📁 Counter
💻 C
字号:
#include <inavr.h>
#include "oSdef.h"
 __root unsigned char OSRdyGrp, OSRdyTbl[8],prio;
 
extern void (*TaskList[])(void);
extern void (*TaskArh[])(void);
extern void (*TaskRan)(void);



const unsigned char OSMapTbl[]   = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
__flash unsigned char OSUnMapTbl[] = {
                   0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
                   4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
                   5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
                   4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
                   6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
                   4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
                   5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
                   4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
                   7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
                   4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
                   5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
                   4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
                   6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
                   4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
                   5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
                   4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
                     };

 
void ISR(void)
{
    unsigned char x,y;
  __disable_interrupt();
    
    y=OSUnMapTbl[OSRdyGrp];
    x=OSUnMapTbl[OSRdyTbl[y]];
    prio = (y << 3)+x;
    TaskRan = TaskList[prio];
    
  __enable_interrupt();
}

void TaskOff(unsigned char pr)
{
  __disable_interrupt();
   
   if ((OSRdyTbl[pr>>3] &= ~OSMapTbl[pr & 0x07])== 0)
    OSRdyGrp &= ~OSMapTbl[pr>>3];
  
  __enable_interrupt();
}
void TaskOn(unsigned char pr)
{
  __disable_interrupt();

      OSRdyGrp |= OSMapTbl[pr>>3];
    OSRdyTbl[pr>>3] |= OSMapTbl[pr & 0x07];

  __enable_interrupt();
}

void Reset_diseble_task(void)
{
  TaskOff(prio);
}

void Enable_Task(unsigned char Ntask)
{
  __disable_interrupt();
    
    TaskList[Ntask]=TaskArh[Ntask];

  __enable_interrupt();
}

void Disable_Task(unsigned char Ntask)
{
  __disable_interrupt();
     TaskList[Ntask]=Reset_diseble_task;
  __enable_interrupt();  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -