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

📄 main.c

📁 一个简单易用的可裁减的小型实时操作系统 移植非常简单
💻 C
字号:

#include "..\include\MicroROS.h"

#if SEMAPHORE_EN > 0
SEM sem1;
#endif
#if MUTEX_EN > 0
MUTEX mutex1;
#endif
#if MAILBOX_EN > 0
MAILBOX mailbox1;
#endif

TASK_DEF(led,20,5);
#if MAILBOX_EN > 0
TASK_DEF(mail1,20,7);
#endif
TASK_DEF(led2,20,3);

void delay(WORD dd) 
{
	while (dd--);
    PORTD ^= BV(3);
}


void led2(void)
{
	WORD dd = 0x3;
    DDRE |= BV(1);
	while (1){
#if MUTEX_EN > 0
        OS_MutexLock(&mutex1,LIMITLESS);
#endif
		PORTE ^= BV(1);
		OS_TaskSleep(30);
		if (dd < 50)
			dd ++;
		else 
			dd = 0;
#if MUTEX_EN > 0
		OS_MutexUnLock(&mutex1);
#endif

#if SEMAPHORE_EN > 0
		OS_SemaphorePost(&sem1,1);
#endif
        OS_TaskSleep(30);
#if MAILBOX_EN > 0
		OS_MailBoxPost(&mailbox1,&dd);
#endif
	}
}

#if MAILBOX_EN > 0
void mail1(void)
{
	WORD * ptr;
	while (1) {		
		OS_MailBoxPend(&mailbox1,(void **)&ptr,LIMITLESS);
		delay(*ptr);
	}
}
#endif

void led(void)
{
    DDRB |= 0x80;    
    OS_TaskCreate(GetTaskPid(led2));
#if MAILBOX_EN > 0    
    OS_TaskCreate(GetTaskPid(mail1));
#endif    
	while (1){
#if MUTEX_EN > 0
		OS_MutexLock(&mutex1,LIMITLESS);
#endif
		PORTB ^= 0x80;
		OS_TaskSleep(20);
#if MUTEX_EN > 0		
		OS_MutexUnLock(&mutex1);
#endif

#if SEMAPHORE_EN > 0
		OS_SemaphorePend(&sem1,1,LIMITLESS);
#endif
        OS_TaskSleep(20);
	}
}

void OS_TimeHook(void)
{
}

void main(void)
{    
	OS_KernelInit();
#if SEMAPHORE_EN > 0
	OS_SemaphoreCreate(&sem1,0);
#endif

#if MUTEX_EN > 0
	OS_MutexCreate(&mutex1,2);
#endif

#if MAILBOX_EN > 0
	OS_MailBoxCreate(&mailbox1);
#endif
    MCUCR |= BV(SE);
	OS_TaskCreate(GetTaskPid(led));
    OS_Start();
}

⌨️ 快捷键说明

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