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

📄 test_ucos.c

📁 VC版式的 UCOSII ! 修改前人255任务的那个版本! 已经改为286u版! 可用VC6直接编过!
💻 C
字号:
// Test_ucos.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "ucos_ii.h"

#define  TASK_STK_SIZE                 2048
#define  N_TASKS                        10


BOOLEAN FlagEn = 1;		//中断是否关闭
HANDLE mainhandle;		//主线程句柄
CONTEXT Context;		//主线程切换上下文



OS_STK  TaskStk[N_TASKS][TASK_STK_SIZE];    // Tasks stacks

#pragma   comment(lib,"Winmm.lib.")


void TaskStart(void * pParam) 
{	
	char err;	
	OS_EVENT *sem1;
	
	timeSetEvent(1000/OS_TICKS_PER_SEC, 0, OSTickISR, 0, TIME_PERIODIC);	//开启一个定时器线程,感觉10 ticks/s比较好
	OSStatInit();
	sem1 = OSSemCreate(0);
	while(1)
	{		
		OSSemPend(sem1, 0, &err);   //sleep ,wait for sem1,run shell
	}
}

#define TaskStart_Prio	0
#define Task0_Prio		1
#define Task1_Prio		20
#define Task2_Prio		21


void Task1(void * pParam)
{
	DEBUG("[Task1]   [任务一启动] \n");
	while(1)
	{
		OS_ENTER_CRITICAL();	
		printf( "task1 is running\n");
		OS_EXIT_CRITICAL();
		OSTimeDly(5);
	}
}

void Task2(void * pParam)
{
	DEBUG("[Task2]   [任务二启动] \n");
	while(1)
	{
		OS_ENTER_CRITICAL();	
		printf( "task2 is running\n");
		OS_EXIT_CRITICAL();
		OSTimeDly(10);
	}
}

void VCInit(void)
{
	HANDLE cp,ct;
	Context.ContextFlags = CONTEXT_CONTROL;
	cp = GetCurrentProcess();	//得到当前进程句柄
	ct = GetCurrentThread();	//得到当前线程伪句柄
	DuplicateHandle(cp, ct, cp, &mainhandle, 0, TRUE, 2);	//伪句柄转换,得到线程真句柄
}



int main(int argc, char* argv[])
{
	int i=0;

	VCInit();

	OSInit();
	DEBUG("=========[OSInit][完成]\n\n");

	OSTaskCreate(TaskStart, 0, &TaskStk[0][TASK_STK_SIZE-1], TaskStart_Prio);

	OSTaskCreate(Task1, 0, &TaskStk[2][TASK_STK_SIZE-1], Task1_Prio);

	OSTaskCreate(Task2, 0, &TaskStk[3][TASK_STK_SIZE-1], Task2_Prio);

	OSStart();

	return 0;
}

⌨️ 快捷键说明

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