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

📄 main.c

📁 ucOS-II在SPCE061A上的移植
💻 C
字号:
#include "includes.h"

#define MAX_STK_SIZE  50

//**************************************
void TaskA(void* data);
OS_STK TaskA_Stk[MAX_STK_SIZE+1];
#define TaskA_Prio 4

void TaskB(void* data);
OS_STK TaskB_Stk[MAX_STK_SIZE+1];
#define TaskB_Prio 8
//**************************************
void InitSystem(void);

OS_EVENT *sem;

int main(void)
{
	OSInit();
	sem=OSSemCreate(1);//创建一个信号量   (注:由任务或启动代码操作)
	OSTaskCreate(TaskA, (void *)0, &TaskA_Stk[MAX_STK_SIZE], TaskA_Prio);
	OSTaskCreate(TaskB, (void *)0, &TaskB_Stk[MAX_STK_SIZE], TaskB_Prio);
	OSStart();
	return 0;
}

void TaskA(void *data)
{
	INT8U erra;
	data=data;
 
	InitSystem();
	for(;;)
	{
		OSSemPend(sem,0,&erra);//等待一个信号量 (注:只能由任务操作)
//如果任务Task_A调用OSSemPend(),且信号量的值有效(非0),那么OSSemPend()递减信号量计数器(.OSEventCnt),并返回该值。
//换句话说,Task_A获取到共享资源的使用权了,之后就执行该资源。
//如果如果任务Task_A调用OSSemPend(),信号量无效(为0),那么OSSemPend()调用OS_EventTaskWait()函数,把Task_A放入等待列表中。
//(等待到什么时候呢?要看OSSemPost()(或者等待超时情况),由它释放信号量并检查任务执行权,见下资料)
		*P_IOA_Data=0xff0f;
		OSTimeDly(64);
		OSSemPost(sem);//发出(释放)一个信号量 (注:由任务或中断操作)
//本函数其中调用OS_EventTaskRdy()函数,把优先级最高的任务Task_A(在这假如是Task_A,

//另外假设当前调用OSSemPost()的任务是Task_B)从等待任务列表中去除,并使它进入就绪态。
//然后调用OSSched()进行任务调度。如果Task_A是当前就绪态中优先级最高的任务,则内核执行Task_A;
//否则,OSSched()直接返回,Task_B继续执行.
	} 
}

void TaskB(void *data)
{
	INT8U errb;
	data=data;
	for(;;)
	{
		OSSemPend(sem,0,&errb);
		*P_IOA_Data=0xfff0;
		OSTimeDly(64);
		OSSemPost(sem);
	}
}


void InitSystem(void)
{
	*P_IOA_Dir = 0xffff;			//设置IOA口为同相低电平输出
	*P_IOA_Attrib = 0xffff;
	*P_IOA_Data = 0xffff;
	
	*P_TimeBase_Setup = C_TMB1_64Hz;
	*P_INT_Ctrl = C_IRQ6_TMB1;
}

⌨️ 快捷键说明

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