uC/OS-II 学习笔记:任务创建步骤

怎样在uC/OS-II里创建一个任务,下面以创建一个串口发送数据的任务为例:
步骤如下:
(1)设置任务堆栈大小
                     #define USART_STK_SIZE 64

(2)定义任务堆栈
                    OS_STK TASK_USART_STK[USART_STK_SIZE];

(3)设置任务优先级
                   #define USART_TASK_Prio 3  

(4)任务函数声明
                  void Usart(void *pdata);

(5)在起始任务里创建任务
                OSTaskCreate(Usart, (void *)0, &TASK_USART_STK[USART_STK_SIZE-1], USART_TASK_Prio);

(6)完成函数代码
void Usart(void *pdata)
{
    完成此处代码的书写;


}

 

相关程序如下:

#include "sys.h"
#include "usart.h"  
#include "delay.h"  
#include "includes.h"

#define USART_STK_SIZE 64

OS_STK  TASK_USART_STK[USART_STK_SIZE];

#define USART_TASK_Prio 3

void Usart(void *pdata);

//主函数
int main(void)
{       
    Stm32_Clock_Init(9);//系统时钟设置
    delay_init(72);//延时初始化
    uart_init(72,9600);//串口初始化为9600
    LED_Init();//初始化与LED连接的硬件接口 
    SysTick_Configuration();//系统时钟配置
    OSInit();//对uC/OS-II进行初始化
   
    //创建起始任务
    OSTaskCreate(
                                  TaskStart,//任务指针
                                  (void *)0,//传递给任务的参数
                                  &TASK_START_STK[START_STK_SIZE-1],//任务堆栈栈顶指针
                                  START_TASK_Prio//任务优先级
                                );

    //开始多任务调度
    OSStart();//此步之后任务就交由操作系统来管理和调度了
   
    return 0;   
}

//起始任务

void TaskStart(void * pdata)
{
    pdata = pdata;//防止某些编译器报错  
    //关中断进入临界段
    OS_ENTER_CRITICAL();//此函数为汇编代码,在os_cpu_a.asm文件里

    //创建任务
    OSTaskCreate(Usart, (void *)0, &TASK_USART_STK[USART_STK_SIZE-1], USART_TASK_Prio);
   
    OSTaskSuspend(OS_PRIO_SELF);//挂起但未删除 
    //开中断退出临界段
    OS_EXIT_CRITICAL();
}

//任务执行函数

void Usart(void *pdata)
{
    char USART_DX_BUF[] = "abcdefg";
    char i = 0;
    while (1)
    {
        for (i=0; i<7; ++i)
        {
            USART1->DR = USART_DX_BUF[i];
            while ((USART1->SR & 0X40) == 0);
        }    
        OSTimeDlyHMSM(0, 0, 0, 100);
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值