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

📄 app.c

📁 非剥夺型占先式minOS_iccavr avr单片机 icc编译环境
💻 C
字号:
#include "OS_Includes.h"

//PORTB bit4-bit7 for to drive LED1-LED4.
#define LED1_ON() (PORTB |= (0x1<<4))
#define LED1_OFF() (PORTB &= ~(0x1<<4))
#define LED2_ON() (PORTB |= (0x1<<5))
#define LED2_OFF() (PORTB &= ~(0x1<<5))
#define LED3_ON() (PORTB |= (0x1<<6))
#define LED3_OFF() (PORTB &= ~(0x1<<6))
#define LED4_ON() (PORTB |= (0x1<<7))
#define LED4_OFF() (PORTB &= ~(0x1<<7))

#define INIT_LED_Drv() (DDRB |= 0xf0)   //PORTB bit4-bit7 used to LED1-LED4

void TaskA(void);
#define TaskAPrio	 1                        //声明任务TaskA(void)的优先级。
OS_STK TaskAStk[MAX_STK_SIZE];   //声明任务TaskA(void)的堆栈空间。
void TaskB(void);
#define TaskBPrio	 2                        //声明任务TaskB(void)的优先级。
OS_STK TaskBStk[MAX_STK_SIZE];   //声明任务TaskB(void)的堆栈空间。
void TaskC(void);
#define TaskCPrio	 3                        //声明任务TaskC(void)的优先级。
OS_STK TaskCStk[MAX_STK_SIZE];   //声明任务TaskC(void)的堆栈空间。

void main(void)
{
    OSInitSP();
	OSInit();               //初始化OS任务控制块(initialization OSTCB)。
	OSTaskCreate(TaskA,&TaskAStk[MAX_STK_SIZE],TaskAPrio); //建立任务TaskA(void)。
	OSTaskCreate(TaskB,&TaskBStk[MAX_STK_SIZE],TaskBPrio); //建立任务TaskB(void)。
	OSTaskCreate(TaskC,&TaskCStk[MAX_STK_SIZE],TaskCPrio); //建立任务TaskC(void)。

	INIT_LED_Drv();
	
	OSStart();                              //起动OS。
	
	while (1)
	{
		LED1_ON();
		OSTaskResume(TaskAPrio);	
		OSTaskSuspend(OS_TASK_Me);
		OSTimeDly(1);
		LED1_OFF();	
		OSTimeDly(1);
	}
}

void TaskA(void)
{
	while (1)
	{
		OSTaskResume(Task_main_Prio);	
//		OSTaskSuspend(OS_TASK_Me);
		LED2_ON();	
		OSTimeDly(2);
		LED2_OFF();	
		OSTimeDly(2);
	}
}

void TaskB(void)
{
	while (1)
	{
		LED3_ON();	
		OSTimeDly(3);
		LED3_OFF();	
		OSTimeDly(3);
	}
}

void TaskC(void)
{
	while (1)
	{
		LED4_ON();	
		OSTimeDly(5);
		LED4_OFF();	
		OSTimeDly(5);
	}
}

//hook function for user App --- 时钟节拍回掉函数
void AppTickHook()
{
}

⌨️ 快捷键说明

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