本篇博客演示了ucos-ii的第一个示例程序代码,代码简单易懂,意在带领读者快速实战ucos-ii编程。
很多同学玩过单片机,单片机在裸机环境下,一般是一个main函数,里面有个大while循环,然后程序就在这个大while中循环执行。在这个代码中你将会看到,两个大while循环“同时”执行。这种运行已经不同于我们单片机下程序简单的裸跑了。
且看如下代码:
/****************************************
project:ucos-ii demo
author:arvik
csdn:http://blog.csdn.net/u012819339
email:1216601195@qq.com
*****************************************/
#include "SystemConfig.h"
/* 定义任务堆栈*/
OS_STK App1Task_Stk[App1Task_StkSize];
OS_STK App2Task_Stk[App2Task_StkSize];
int main(void)
{
OSInit(); // 系统初始化
OSTaskCreate(App1Task, (void *)0, &App1Task_Stk[App1Task_StkSize-1], App1Task_Prio);//创建其他任务App1Task
OSTaskCreate(App2Task, (void *)0, &App2Task_Stk[App2Task_StkSize-1], App2Task_Prio);//创建其他任务App2Task
OSStart(); // 启动ucos-ii
return 0;
}
/* App1Task */
void App1Task(void *p_arg)
{
p_arg = p_arg;
while(1)
{
printf("this is App1task!\n");
OSTimeDlyHMSM(0, 0, 3, 0); /* 任务调度*/
}
}
/* App2Task */
void App2Task(void *p_arg)
{
p_arg = p_arg;
while(1)
{
printf("this is App2task!\n");
OSTimeDlyHMSM(0, 0, 2, 0);
}
}
SystemConfig.h内容如下
#ifndef SYSTEM_CONFIG_H
#define SYSTEM_CONFIG_H
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <assert.h>
#include <includes.h>
/****** TASK PRIORITIES ******/
#define App1Task_Prio 14 //App1Task的优先级
#define App2Task_Prio 16 App2Task的优先级
#define OS_TASK_TMR_PRIO 5
/****** TASK STACK SIZES ******/
#define App1Task_StkSize 320
#define App2Task_StkSize 320
extern void App1Task(void *p_arg);
extern void App2Task(void *p_arg);
#endif
我们会发现,“this is App1task!”会按照2秒每次的频率循环打印,“this is App2task!”会按照3秒每次的频率循环打印。这样我们“同时”执行了两个任务。
至此,ucos-ii的第一个示例程序已经跑起来了。
源代码下载地址:
CSDN:http://download.csdn.net/detail/u012819339/9428838
github:https://github.com/arviklinux/ucos-ii