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

📄 main.c

📁 atmega单片机用的ucos系统 占用内存适中 是atmega单片机合适的操作系统
💻 C
字号:
#include <avr/io.h>
#include "ucos_ii.h"
#include "lcd.h"

OS_STK Main_TaskStk[OS_USER_TASK_STK_SIZE]={0};
OS_STK Task2Stk[OS_USER_TASK_STK_SIZE]={0};
OS_STK Task3Stk[OS_USER_TASK_STK_SIZE]={0};
OS_STK Task4Stk[OS_USER_TASK_STK_SIZE]={0};
OS_STK Task5Stk[OS_USER_TASK_STK_SIZE]={0};

volatile unsigned char t1=0;
volatile unsigned char t2=0;
volatile unsigned char t3=0;
volatile unsigned char t4=0;
volatile unsigned char t5=0;
volatile unsigned char t6=0;

OS_EVENT *T2sem=(OS_EVENT *)0;
OS_EVENT *Tmbox=(OS_EVENT *)0;

struct msgTask
{
 unsigned char cnt;
 unsigned char *s;
};

struct msgTask T5mbox={1,"Hello"};
struct msgTask *pMsgTsk=&T5mbox;
/*任务声明*/
void Task2(void *pdata);
void Task3(void *pdata);
void Task4(void *pdata);
void Task5(void *pdata);

 
void Main_Task(void *pdata)
{
 pdata=pdata;

 TIMSK&=0xFC;
 
 #if OS_TICKS_PER_SEC <= (F_CPU/1024/256)
 #error "OS_TICKS_PER_SEC <  (F_CPU/1024/256) "
#endif

 OCR0=F_CPU/1024/OS_TICKS_PER_SEC;  //匹配寄存器
 TCNT0=0;//计数初值
 TCCR0=(1<<WGM01)|0x05;//CTC模式1024分频
 TIMSK|=2;//tc0输出匹配中断使能
 
 DDRB|=0x02;
 
 hello();
 OSTaskCreate(Task2,0,&Task2Stk[OS_USER_TASK_STK_SIZE-1],2);
 OSTaskCreate(Task3,0,&Task3Stk[OS_USER_TASK_STK_SIZE-1],3); 
 OSTaskCreate(Task4,0,&Task4Stk[OS_USER_TASK_STK_SIZE-1],5); 
 OSTaskCreate(Task5,0,&Task5Stk[OS_USER_TASK_STK_SIZE-1],4);
 while(1)
    {

	 OSTimeDlyHMSM(0,0,1,0);
	 t1++;
	 PORTB^=0x02;
	 PORTD^=0x10;
	 OS_ENTER_CRITICAL();
	 display_1str(1,0,(char)OSCPUUsage);
	 OS_EXIT_CRITICAL();
	}
}

void Task2(void *pdata)
{
 unsigned char err=0;
 pdata=pdata;

/* MCUCR=0x02;//int0下降沿产生异步中断
 GICR=0x40;//通用中断控制器 使能int0中断

 TCCR2=0x08;      // CTC 模式, TOP=OCR2
 OCR2=72;         // 7372800/1024/72=100
 TCCR2|=0x07;     // 1024分频
 TIMSK|=0x80;     // 比较中断使能
*/
 while(1)
    {        
              OSSemPend(T2sem,0,&err);
              if(err==OS_NO_ERR) 
                        t2++;
              if(err==OS_TIMEOUT)
                        {};
      //        GIFR|=0x40;
	// OSTimeDly(10);	 
	}
}

void Task3(void *pdata)
{


 pdata=pdata;
 
 while(1)
    {
	 t3++;
	 OSTimeDly(100);
     DDRD|=0x20;
	 OSTimeDly(10);
     PORTD^=0x20; 
	}
}

void Task4(void *pdata)
{
 pdata=pdata;
 
 MCUCR|=0x08;
// GICR|=0x80;

 while(1)
    {
	// t4++;
	 OSTimeDly(80);
     DDRD|=0x40;
	 OSTimeDly(80);
     PORTD^=0x40;	 
	}
}

void Task5(void *pdata)
{
 unsigned char err=0; 
 struct msgTask *p=( struct msgTask *)0;
 
pdata=pdata;
 
 while(1)
    {
               p=( struct msgTask *)OSMboxPend(Tmbox,0,&err);
               
	 t5=p->cnt;	 
	}
}

int main(void)
{
 OSInit();
 LCD_Init();	
 DDRD=0XFF;
 OSTaskCreate(Main_Task,0,&Main_TaskStk[OS_USER_TASK_STK_SIZE-1],1); 

 T2sem=OSSemCreate(0);
 Tmbox=OSMboxCreate((void *)0); 

 OSStart();
}

⌨️ 快捷键说明

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