📄 main.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 + -