📄 main.c
字号:
#include <iom16.h>
#include "ucos_ii.h"
#define TASK_STK_SIZE 100
extern void IntEnter(void);
extern void IntExit(void);
typedef struct os_icb
{
unsigned int CSTACK;
unsigned int RSTACK;
unsigned int frame;
}OS_ICB;
OS_ICB OSICB;
OS_STK Task1Stk[TASK_STK_SIZE];
OS_STK Task2Stk[TASK_STK_SIZE];
OS_STK Task3Stk[TASK_STK_SIZE];
OS_STK Task4Stk[TASK_STK_SIZE];
void AvrInit(void);
void Task1(void *);
void Task2(void *);
void Task3(void *);
void Task4(void *);
void main (void)
{
AvrInit();
OSInit();
OSTaskCreate(Task1, (void *)0, (void *)&Task1Stk[TASK_STK_SIZE - 1], 0);
OSTaskCreate(Task2, (void *)0, (void *)&Task2Stk[TASK_STK_SIZE - 1], 1);
OSTaskCreate(Task3, (void *)0, (void *)&Task3Stk[TASK_STK_SIZE - 1], 2);
OSTaskCreate(Task4, (void *)0, (void *)&Task4Stk[TASK_STK_SIZE - 1], 3);
OSStart();
}
void AvrInit(void)
{
//以下为全局设定
DDRB=0xFF;
PORTB=0;
DDRD=0xFF;
PORTD=0;
DDRC=0xFF;
PORTC=0;
DDRA=0xFC;
PORTA=0;
//以下为ADC的初始化设定
ADMUX=0;
ADCSRA=0x8E; //使能ADC,ADC预分频因子为64,使能ADC中断
}
void Task1(void * data)
{
data=data;
//WDTCR=1; //enable watchdog and set the time in 32ms
//以下为定时器0的初始化设定,并启动定时器0
TCCR0=0x05; //定时器0设定为普通模式,输入时钟1024分频,正常的端口操作,
//不与OC0相连接,定时器0的周期为32.768ms
TIMSK_TOIE0=1; //使能定时器0的溢出中断
while(1)
{
OSTimeDly(100);
ADCSRA_ADSC=1;
}
}
void Task2(void * data)
{
data=data;
while(1)
{
OSTimeDly(240);
}
}
void Task3(void * data)
{
data=data;
while(1)
{
OSTimeDly(333);
}
}
void Task4(void * data)
{
data=data;
while(1)
{
OSTimeDly(473);
}
}
__C_task __root void timer0_interrupt_routine(void)
{
IntEnter();
__enable_interrupt();
OSTimeTick();
__disable_interrupt();
OSIntExit();
IntExit();
}
__C_task __root void ADC_interrupt_routine(void)
{
IntEnter();
__enable_interrupt();
//DoSomething
__disable_interrupt();
OSIntExit();
IntExit();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -