• ucos学习1-Task1


    uCOS的学习,最先接触的肯定都是Task。关于task,最重要的就是理清楚几个概念。

    一、Task由三部分组成:

    1、任务控制块TCB,包含各种task相关的参数和信息。

    2、堆栈。在创建task的时候,会创建堆栈,存放CPU的寄存器。在任务切换的时候,会保存CPU的寄存器。

    3、task的代码,一般就是一个无限循环。一个小点:如果代码中没有delay之类的函数,task有可能永远占用这个CPU,而使得其他task没法跑起来。

    下面是一个简单的例子,显示了几个task相关的函数的调用。

    演示了task1的创建。由task1创建task2,暂停和重启task2。

    task1暂停调度,然后重启调度。

    #include "sys.h"
    #include "delay.h"
    #include "usart.h"
    #include "led.h"
    #include "includes.h"
    
    void task1(void *pdata);
    #define TASK1_PRIO                  10
    #define TASK1_STK_SIZE 64
    
    void task2(void *pdata);
    #define TASK2_PRIO                  11
    #define TASK2_STK_SIZE 64
    
    OS_STK TASK1[TASK1_STK_SIZE];
    OS_STK TASK2[TASK2_STK_SIZE];
    
    
    int main(void)
    {
        delay_init(168);          
        LED_Init();                
        OSInit();
        OSTaskCreate(task1,(void *)0,(OS_STK *)&TASK1[TASK1_STK_SIZE-1],TASK1_PRIO);
        OSStart();
    }
    
    void task1(void *pdata)
    { OS_CPU_SR cpu_sr=0;
        int i=0;
        while(1)
        {
            LED0=0;
            delay_ms(100);
            LED0=1;
            delay_ms(300);
            i++;
            if(i==10)
            {
                OSTaskCreate(task2,(void *)0,(OS_STK *)&TASK2[TASK2_STK_SIZE-1],TASK2_PRIO); //创建task2
            }
            if(i==20)
            {
                OSTaskSuspend(TASK2_PRIO);
            }
            if(i==30)
            {
                OSTaskResume(TASK2_PRIO);
            }
            if(i==40)
            {
                OSSchedLock();
            }
            if(i==50)
            {
                OSSchedUnlock();
            }
            
        }
    }
    
    void task2(void *pdata)
    { OS_CPU_SR cpu_sr=0;
        while(1)
        {
            LED1=0;
            delay_ms(100);
            LED1=1;
            delay_ms(300);
        }
    }
  • 相关阅读:
    名字 地址 路由
    截断二进制指数退避
    硬件地址 软件地址
    基带信号 调制
    非对称数字用户线
    码分复用 码分多址
    时分复用 帧长度
    多模光纤 单模光纤
    码间串扰 奈氏准则 香农公式
    flask 文件下载 文件服务器 请求参数 函数修饰符
  • 原文地址:https://www.cnblogs.com/nasduc/p/5053353.html
Copyright © 2020-2023  润新知