【深入实践ucos-ii】第一个示例程序代码

本篇博客演示了ucos-ii的第一个示例程序代码,代码简单易懂,意在带领读者快速实战ucos-ii编程。

很多同学玩过单片机,单片机在裸机环境下,一般是一个main函数,里面有个大while循环,然后程序就在这个大while中循环执行。在这个代码中你将会看到,两个大while循环“同时”执行。这种运行已经不同于我们单片机下程序简单的裸跑了。

且看如下代码:

/**************************************** project:ucos-ii demo author:arvik csdn:http://blog.csdn.net/u012819339 email:[email protected] *****************************************/
#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

你可能感兴趣的:(操作系统,嵌入式,ucos-II)