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

📄 main.c

📁 本RTOS参考 usOS-II, ARM-RTX
💻 C
字号:
#include "include.h"
/**************************************************************************************
* 函数原型:
* 函数功能:
* 输入参数:
* 输出参数:
* 函数说明:
**************************************************************************************/

OS_TID  TaskA_ID;
OS_TID  TaskB_ID;
OS_TID  TaskC_ID;
OS_TID  TaskD_ID;

/**************************************************************************************
函数名称:InitT0
函数功能:定时器0初始化
输入参数:
输出参数:
函数说明:T0工作于模式1,16位计数器,1ms中断一次
**************************************************************************************/
void InitT0(void)
{  
   TMOD &= 0xF0; // Clear all T0 bits (T1 left unchanged)
   TMOD |= 0x01;              //T0工作于模式1
   TH0=T0H_COUNTER;         //
   TL0=T0L_COUNTER;
   
   Timer0Run();             //TR0=1;T0开始计数
   //PT0=1;                 //T0中断优先级高
   IrqAll_Enable();         //打开总中断
   IrqT0_Enable();          //打开T0中断允许
}

/**************************************************************************************
函数名称:InT0
函数功能:定时器0中断服务程序
输入参数:
输出参数:
函数说明:1ms中断一次
**************************************************************************************/
//void InT0(void) interrupt 1 //using 1
//{ IrqT0_Unable();
  
//  TH0=T0H_COUNTER;
//  TL0=T0L_COUNTER;
    
//  IrqT0_Enable();
//}



void  MainInit(void)
{   
   
   InitT0();
}


void TaskA(void)
{char a;

    while (1)
    {
        //os_evt_set(B0000_0100, TaskB_ID);
        
        a++;
        P1 = P1^B0000_0001;
        
        tsk_lock();
        printf("TaskA is Running!\r\n");
        tsk_unlock();
        
        os_dly_wait(ms(1000));
    } 
}

void TaskB(void)
{char b;
 OS_RESULT result;
 
    
    while (1)
    {
        b++;
        
        result=os_evt_wait_or ( B0000_0111,  ms(8000) );
        if(result==OS_R_TMO)
        {
          tsk_lock();
          printf("result is OS_R_TMO!\r\n");
          tsk_unlock();
        }
        else
        {
          tsk_lock();
          printf("result is OS_R_EVT!\r\n");
          tsk_unlock();
        }
        
        P1 = P1^B0000_0010;
        //os_dly_wait(ms(4000));
        
        tsk_lock();
        printf("TaskB is Running!\r\n");
        tsk_unlock();
    }
}


void TaskC(void)
{char c;
 //char buf[3];
    while (1)
    {
        os_evt_set(B0000_0010, TaskB_ID);
        
        c++;
        P1 = P1^B0000_0100;
        
        tsk_lock();
        printf("TaskC is Running!\r\n");
        tsk_unlock();
        
        os_dly_wait(ms(12000));
    }
}

void TaskD(void)
{char d=0;
 //char buf[3];
    while (1)
    {
        os_evt_set(B0000_0001, TaskB_ID);
        
        d++;
        
//        if(d==5)
//        {
//           OSTaskResume(1);
//           OSTaskSuspend(3);
//        }
        
        P1 = P1^B0000_1000;
        
        tsk_lock();
        printf("TaskD is Running!\r\n");
        tsk_unlock();
        
        os_dly_wait(ms(16000));
    }
}


void InitCom()
{
  PCON = 0x00;//0x80;         //波特率加倍
  SCON |= 0x50;          //设定串行端口工作于模式1,允许接收数据
  TMOD |= 0x20;          //设定计时器1工作于模式2
  TH1 = 0xfd;          //设定波特率为19200BPS
  TL1 = 0Xfd;
  TR1 = 1;          //timer 1 run
  //ES=1,EA=1;
  TI = 1;//使用printf函数时必须设置为1才能发送数据
}

/*
//main~TaskA, main~TaskB, main~TaskC, main~TaskD
//init~TaskA, init~TaskB, init~TaskC, init~TaskD

*/
uint8 xdata taskA_stack[50];
uint8 xdata taskB_stack[50];
uint8 xdata taskC_stack[50];
uint8 xdata taskD_stack[50];


void init (void)
{
    
    //在 os_sys_init 中调用 OSInit(SP);
    
    //OSTaskCreate(TaskA, 0);
    //OSTaskCreate(TaskB, 1);
    //OSTaskCreate(TaskC, 2);
    TaskA_ID=os_tsk_create_user( TaskA, 0, taskA_stack, sizeof(taskA_stack) );
    TaskB_ID=os_tsk_create_user( TaskB, 1, taskB_stack, sizeof(taskB_stack) );
    TaskC_ID=os_tsk_create_user( TaskC, 2, taskC_stack, sizeof(taskC_stack) );
    TaskD_ID=os_tsk_create_user( TaskD, 3, taskD_stack, sizeof(taskD_stack) );
    
    InitCom();
    
    //os_dly_wait(ms(100));
    
    //os_tsk_delete_self ();
    MainInit();
    
    //OSTaskSuspend(TaskB_ID);
    DelayNop(1);
    
}
//44.2368MHz
void main(void)
{//char ie_par;

    DelayNop(1);

    os_sys_init(init);
    
    //MainInit();
    
    
    while(1)
    {
      
      DelayNop(1);
      PCON = PCON | 0x01;   // CPU进入休眠状态
      
      //ie_par=IE;
      DelayNop(1);
    }
      
}

⌨️ 快捷键说明

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