原创 【博客大赛】UC/OS-II学习笔记3--main函数具体分析

2014-6-30 01:07 2173 28 28 分类: MCU/ 嵌入式 文集: OS

 

在前面的移植中,大多都是模糊理解,所以我觉得有必要对主函数main.c中的内容进行简单分析一下,以便加深UCOS-II的理解。

1、包含所有的头文件:#include "includes.h"

        #include "includes.h"常用内容是:

#ifndef __INCLUDES_H

#define __INCLUDES_H

 

#include "stm32f10x.h"

#include "stm32f10x_rcc.h"

 

#include "uCOS_II.h"

#include "BSP.h"                //与开发板相关的函数

#include "app.h"

#include "led.h"

 

#endif

 

2、定义一个堆栈:static OS_STK startup_task_stk[STARTUP_TASK_STK_SIZE];

      其中堆栈大小STARTUP_TASK_STK_SIZEapp_cfg.h中已经定义了;

 

3BSP_Init():用户驱动程序初始化,主要包括:

1SystemInit();//系统时钟配置成72MHz

2LED_GPIO_Config(); //LED端口配置

4OSInit(): 

      主要包括5个函数,用来初始化uC/OS-II的内部构件,具体包括所有的变量和数据结构;

1)建立空闲任务:OS_InitTaskIdle();优先级最低,即OS_LOWEST_PRIO

2)如果统计任务允许OS_TASK_STAT_EN 设置为1,则、OSInit()建立统计任务:OS_InitTaskStat();其优先级是                                            OS_LOWEST_PRIO-1

 

5

OSTaskCreate(Task_LED,(void*)0,&startup_task_stk[STARTUP_TASK_STK_SIZE-1],STARTUP_TASK_PRIO);

创建任务Task_LED,这个OSTaskCreate函数的原型是:

INT8U  OSTaskCreate (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT8U prio)

需要四个参数:

task 是指向任务代码的指针;这里就是任务函数名

p_arg是任务开始执行时,传递给任务的参数的指针,即任务初始化指针;这里不需要初始化,所以为NULL空指针;

ptos是分配给任务的堆栈的栈顶指针;这里一开始定义了一个堆栈,给当前数据赋予堆栈数据的末尾单元,从末尾开始往开始

prio是分配给任务的优先级; 这里优先级为0,为最高优先级;

这里Task_LED是指向任务的指针,原型函数在app.c里编写,任务看起来与C函数一样,具有返回类型和一个参数,但是它绝对不返回,因此,返回类型必须定义成void 型。

  任务Task_LED的原型是 void Task_LED(void *p_arg),带有一个指针参数

   注意:  如果任务中没有用到指针p_arg,那么防止编译器警告,应该在第一行写上(void)p_arg;

 

6OSStart();

调用OSStart();将控制权交给uC/OS-II内核,开始运行多任务;OSStart();将判断所有建立任务中哪一个任务是最重要的(优先级最高),并开始运行这个任务;

注意:   在启动多任务OSStart();之前至少要先建立一个任务,否则应用程序就会崩溃。

文章评论0条评论)

登录后参与讨论
我要评论
0
28
关闭 站长推荐上一条 /2 下一条