?? test_ucos.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 + -