关于uCOS-II创建多任务的模板参考

作为一个刚接触uCOS-II的新手,在看了一些代码之后,萌生出写一个创建uCOS-II多任务的参考模版,虽然不是万能,但相信可以节省一点时间,也可以和大家一起交流。

其中如有错误之处,还望各位高手多多保函,还望指正,帮助我进步,谢谢。


/******************************************************************

 Name:              Lambda
 Date:               2013.03.18
 Description:      这是一个基于S3C2440的uCOS-II创建多任务的模板,只包含主程序程序代码                        
*******************************************************************/

#include "config.h"

#define         TASK_STK_SIZE    512                      //定义每个堆栈长度为512

OS_STK        TaskStartStk[TASK_STK_SIZE];          //创建起始任务的堆栈
OS_STK        Task1Stk[TASK_STK_SIZE];               //创建功能任务1的堆栈
OS_STK        Task2Stk[TASK_STK_SIZE];               //创建功能任务2的堆栈
char               TaskData;                                      //定义功能任务传递的参数
OS_EVENT    *MySem;                                        //定义一个信号量

void TaskStart();
static void TaskStartCreateTasks(void);
void Task1(void *pdata);
void Task2(void *pdata);
/******************************************************************
                             main函数
*******************************************************************/
int main(void)
{

    /*
        该部分可添加代码
    */
    
    
    OSInit();                                                            //初始化uCOS,此时系统默认创建两个任务:空闲任务和统计任务,该两个任务优先级最低        
    
    MySem = OSSemCreate(1);                                 //创建一个信号量,并初始化为1,即通知内核某一时刻只允许一个任务访问该函数
    
    OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 2);    //创建起始任务TaskStart
    
    OSStart();                                                         //启动系统,将CPU权限交给uCOS-II

    return 0;
}

/******************************************************************
                         起始任务函数TaskStart
*******************************************************************/

void TaskStart(void *pdata)
{
    #if OS_CRITICAL_METHOD == 3
        OS_CPU_SR cpu_sr;
    #endif

    pdata = pdata;                              //防止编译器报警

    /*
        该部分可添加代码
    */

    TaskStartCreateTasks();                  //调用该函数来创建更多的功能任务

    while(1)                                        //所有的任务都应该是一个无限循环的过程
    {

        /*
            该部分可添加代码
        */

        OSTimeDlyHMSM(0,0,1,0);         //将该任务挂起1秒,uCOS-II开始调度,让下一个就绪的最高优先级的任务运行
    }

}


/******************************************************************
                 创建功能任务函数TaskStartCreateTasks
*******************************************************************/

static void TaskStartCreateTasks(void)
{
    OSTaskCreate(Task1, (void *)0, &Task1Stk[TASK_STK_SIZE - 1], 3);                     //创建功能任务Task1,优先级为3,不传递参数
    OSTaskCreate(Task2, (void *)&TaskData, &Task2Stk[TASK_STK_SIZE - 1], 4);        //创建功能任务Task2,优先级为4,传递char类型的参数
}


/******************************************************************
                         功能任务函数Task1
*******************************************************************/

void Task1(void *pdata)
{
    pdata = pdata;                        //防止编译器报警
    
    while(1)
    {
        /*
            该部分可添加代码
        */

        OSTimeDly(1);                    //将该任务挂起1个时钟节拍,uCOS-II开始调度,让下一个就绪的最高优先级的任务运行    
    }

}


/******************************************************************
                         功能任务函数Task1
*******************************************************************/

void Task2(void *pdata)
{
    INT8U err;

    pdata = pdata;                                           //防止编译器报警
    
    while(1)
    {
        OSSemPend(MySem,0,&err);        /* Task2首先检查MySem信号量,并将查询信号量的指针作为参数传递给该函数;第二个参数表示超时时限,0表示无限期等待信号量。
                                                                       MySem在建立时被初始化为1,并且没有其他任务使用该信号量,故可以立即得到该信号量并继续运行;若该信号量被其它任务使用
                                                                       则uCOS-II将挂起该任务并调度,找到下一个就绪的最高优先级,并使之运行。 */
        /*
            该部分可添加代码

        */


        OSSemPost(MySem);                            //释放信号量

        OSTimeDly(1);                                     //将该任务挂起1个时钟节拍,uCOS-II开始调度,让下一个就绪的最高优先级的任务运行    
    }

}


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值