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

📄 cfg.c

📁 AVR IAR 环境下任务调度器,有优先级
💻 C
字号:
#include "INCLUDE\config.h"

__flash stask OS_TASK_G[OS_MAX_TASK]={
                                      task_1,
#if    OS_MAX_TASK>1
                                      task_2,
#endif                                      
#if    OS_MAX_TASK>2
                                      task_3,
#endif                                      
#if    OS_MAX_TASK>3
                                      task_4,
#endif                                      
#if    OS_MAX_TASK>4
                                      task_5,
#endif                                      
#if    OS_MAX_TASK>5
                                      task_6,
#endif                                      
#if    OS_MAX_TASK>6
                                      task_7,
#endif                                      
#if    OS_MAX_TASK>7
                                      task_8,
#endif                                      
#if    OS_MAX_TASK>8
                                      task_9,
#endif                                      
#if    OS_MAX_TASK>9
                                      task_10,
#endif                                      
#if    OS_MAX_TASK>10
                                      task_11,
#endif                                      
#if    OS_MAX_TASK>11
                                      task_12,
#endif                                      
                                     };
								   
__flash int8u OS_TMB1[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00}; //数值表

int8u OS_task_run[OS_MAX_TASK/8+1];



void task_tesrt(void)       //复位时任务全部就绪
  {
  int8u index;
  index=OS_MAX_TASK/8+1;
  for(;index>0;index--)
    {
	OS_task_run[index-1]=0xff;
    }
  }

void OS_task_ready(int8u OS_task_ID)   //任务就绪
  {
  if(OS_task_ID<OS_MAX_TASK)
    {
	OS_task_run[OS_task_ID/8]|=OS_TMB1[OS_task_ID%8];
    }
  }

  
void OS_task_hung(int8u OS_task_ID)  //任务挂起
  {
  if(OS_task_ID<OS_MAX_TASK)
    {
	  OS_task_run[OS_task_ID/8]&=~OS_TMB1[OS_task_ID%8];
    }
  } 								   
  

void OS_GO_TO_Sleep(void)      //无任务休眠
  {
   _WDR();    
  MCUCR|=(1<<SE);
  _SLEEP();
  }  


void OS_Dispatch_Tasks(void)       //任务运行
 {
 int8u index;
 for(index=0;index<OS_MAX_TASK;index++)
   {
   if(OS_task_run[index>>3]&OS_TMB1[index&0x07])
   {
     (*OS_TASK_G[index].Ptask)();
	OS_task_hung(index);
	index=0;
    }
   }
  OS_GO_TO_Sleep();   
 }

⌨️ 快捷键说明

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