查看: 406|回复: 1
打印 上一主题 下一主题

【MAPS四色板试用】10 飞思卡尔四色板:uCOSII任务操作

[复制链接] qrcode

25

主题

27

帖子

82

积分

注册会员

Rank: 2

积分
82
楼主
跳转到指定楼层
发表于 2016-3-13 02:18 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

一、 uCOSII任务封装

1 任务概念

(1)任务(task)是最抽象的,是一个一般性的术语,指由软件完成的一个活动。一个任务既可以是一个进程,也可以是一个线程。简而言之,它指的是一系列共同达到某一目的的操作。例如,读取数据并将数据放入内存中。这个任务可以作为一个进程来实现,也可以作为一个线程(或作为一个中断任务)来实现。
(2)进程(process)常常被定义为程序的执行。可以把一个进程看成是一个独立的程序,在内存中有其完备的数据空间和代码空间。一个进程所拥有的数据和变量只属于它自己。
(3)线程(tread)则是某一进程中一路单独运行的程序。也就是说,线程存在于进程之中。一个进程由一个或多个线程构成,各线程共享相同的代码和全局数据,但各有其自己的堆栈。由于堆栈是每个线程一个,所以局部变量对每一线程来说是私有的。由于所有线程共享同样的代码和全局数据,它们比进程更紧密,比单独的进程间更趋向于相互作用,线程间的相互作用更容易些,因为它们本身就有某些供通信用的共享内存:进程的全局数据。
    另外,大多数的RTOS都采用了基于优先级的可抢占调度算法,如在FreeRTOS、uC/OS-II等,在这此实时操作系统中,任务就是线程。

uCOSII任务封装

    在ksdk_ucosii_lib库项目下的fsl_os_abstraction.h里,定义了6个任务相关的接口:

osa_status_t OSA_TaskCreate(task_t task, uint8_t *name,uint16_t stackSize,task_stack_t   *stackMem,uint16_t  priority,task_param_t param,bool  usesFloat,task_handler_t *handler);
osa_status_t OSA_TaskDestroy(task_handler_t handler);
osa_status_t OSA_TaskYield(void);
task_handler_t OSA_TaskGetHandler(void);
uint16_t OSA_TaskGetPriority(task_handler_t handler);
osa_status_t OSA_TaskSetPriority(task_handler_t handler, uint16_t priority);

    而在fsl_os_abstraction_ucosii.h文件中,进行了具体实现,其中创建任务的函数定义为:

    各参数的定义为:

 * @param task      具体的任务入口地址
 * @param name      任务的名字
 * @param stackSize 任务的堆栈大小
 * @param stackMem  任务的堆栈内存
 * @param priority  任务的优先级
 * @param param     传递任务参数的指针
 * @param usesFloat 任务是否使用浮点型寄存器
 * @param handler   任务句柄指针

二、MAPS-K64中任务的使用

1 Led接口定义

在模板工程下的led.c和led.h文件中,定义Led的控制任务接口


2 全局参数定义

(1)定义优先级及堆栈大小

优先级应该小于5

#define TASK_LED_PRIO         6
#define TASK_LED_STACK_SIZE   2048

(2)定义任务函数及句柄

OSA_TASK_DEFINE(ucosii_led, TASK_LED_STACK_SIZE);

而宏定义在头文件fsl_os_abstraction_ucosii.h中定义如下:

#define OSA_TASK_DEFINE(task, stackSize)                          
    task_stack_t task##_stack[(stackSize)/sizeof(task_stack_t)];  
    task_handler_t task##_task_handler

    这个宏使用记号粘贴操作符##,具体该操作符的使用,可参考C/C++ 宏中“#"和"##”的用法

3 主函数

主函数,完成一些初始化工作,并创建一个任务。


4 任务函数

任务函数为一个周期性任务,控制Led的闪烁。


5 效果

MAPS-Dock上的Led在闪烁。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

73

帖子

6

积分

新手上路

Rank: 1

积分
6
沙发
发表于 2016-3-13 06:36 PM | 只看该作者
赞一个,呵呵
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表