关闭
关闭
首页 > 嵌入式软件 > Uc/os II

ucos ii介绍

本文引用地址: http://embed.21ic.com/software/ucos/201801/50280.html

μC/OS-II由Micrium公司提供,是一个可移植、可固化的、可裁剪的、占先式多任务实时内核,它适用于多种微处理器,微控制器和数字处理芯片(已经移植到超过100种以上的微处理器应用中)。同时,该系统源代码开放、整洁、一致,注释详尽,适合系统开发。

常用函数介绍:

OSInit()初始化函数

在uC/OS II的学习中,OSInit(OS_CORE.C )(函数原型位于);是一个重要的函数,它在OS应用中的main()函数中首先被调用,是OS运行的第一个函数,它完成各初始变量的初始化。主要工作:

OSInitHookBegin(); /* 调用用户特定的初始化代码(通过一个接口函数实现用户要求的插件式进入系统中)*/

OS_InitMisc(); /* 初始化变量*/

OS_InitRdyList(); /* 初始化就绪列表*/

OS_InitTCBList(); /* 初始化OS_TCB空闲列表*/

OS_InitEventList(); /* 初始化OS_EVENT空闲列表*/

OS_InitTaskIdle(); /创建空闲任务/

程序注释详解:

void OSInit (void)

{

#if OS_TASK_CREATE_EXT_EN > 0u

#if defined(OS_TLS_TBL_SIZE) && (OS_TLS_TBL_SIZE > 0u)

INT8U err;

#endif

#endif

OSInitHookBegin(); /* 调用用户特定的初始化代码(通过一个接口函数实现用户要求的插件式进入系统中)*/

OS_InitMisc(); /* 初始化变量*/ /* Initialize miscellaneous variables */

OS_InitRdyList(); /* 初始化就绪列表*/ /* Initialize the Ready List */

OS_InitTCBList(); /* 初始化OS_TCB空闲列表*/ /* Initialize the free list of OS_TCBs */

OS_InitEventList(); /* 初始化OS_EVENT空闲列表*/ /* Initialize the free list of OS_EVENTs */

#if (OS_FLAG_EN > 0u) && (OS_MAX_FLAGS > 0u)

OS_FlagInit(); /* 初始化事件标志结构*/ /* Initialize the event flag structures */

#endif

#if (OS_MEM_EN > 0u) && (OS_MAX_MEM_PART > 0u)

OS_MemInit(); /* 初始化内存管理器*/ /* Initialize the memory manager */

#endif

#if (OS_Q_EN > 0u) && (OS_MAX_QS > 0u)

OS_QInit(); /* 初始化消息队列结构*/ /* Initialize the message queue structures */

#endif

#if OS_TASK_CREATE_EXT_EN > 0u

#if defined(OS_TLS_TBL_SIZE) && (OS_TLS_TBL_SIZE > 0u)

OS_TLS_Init(&err); /* 创建任务前初始化TLS*/ /* Initialize TLS, before creating tasks */

if (err != OS_ERR_NONE) {

return;

}

#endif

#endif

OS_InitTaskIdle(); /* 创建空闲任务(无条件)Create the Idle Task */

#if OS_TASK_STAT_EN > 0u

OS_InitTaskStat(); /* 创建统计任务*/ /* Create the Statistic Task */

#endif

#if OS_TMR_EN > 0u

OSTmr_Init(); /* 初始化时间管理器*/ /* Initialize the Timer Manager */

#endif

OSInitHookEnd(); /*调用用户特定的初始化代码*/

#if OS_DEBUG_EN > 0u

OSDebugInit();

#endif

}

123456789101112131415161718192021222324252627282930313233343536373839404142

任务函数相关:

OSTaskCreate()任务创建函数

1、主要作用:建立一个新任务。任务的建立可以在多任务环境启动之前,也可以在正在运行的任务中建立。中断处理程序中不能建立任务;注意,ISR中禁止建立任务,一个任务必须为无限循环结构。

2、函数原型:INT8U OSTaskCreate(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio);

3、参数说明:

void (*task)(void *pd):指向任务代码首地址的指针。

void *pdata:指向一个数据结构,该结构用来在建立任务时向任务传递参数。

OS_STK *ptos: 指向堆栈任务栈顶的指针

INT8U prio:任务优先级

4、返回值介绍:

OS_NO_ERR:函数调用成功。

OS_PRIO_EXIST:具有该优先级的任务已经存在。

OS_PRIO_INVALID:参数指定的优先级大于OS_LOWEST_PRIO。

OS_NO_MORE_TCB:系统中没有OS_TCB可以分配给任务了。

5、函数主体在os_task.c中

OSTaskCreateExt

1、主要作用:建立一个新任务。与OSTaskCreate()不同的是,OSTaskCreateExt()允许用户设置更多的细节内容。任务的建立可以在多任务环境启动之前,也可以在正在运行的任务中建立,但中断处理程序中不能建立新任务。,且不

2、函数原型:NT8U OSTaskCreateExt (void (*task)(void *pd),void *pdata, OS_STK *ptos,INT8U prio ,INT16U id, OS_STK *pbos,INT32U stk_size,void *pext,INT16U opt)

3、参数说明:

void (*task)(void *pd):指向任务代码首地址的指针。

void *pdata:指向一个数据结构,该结构用来在建立任务时向任务传递参数。

OS_STK *ptos: 指向堆栈任务栈顶的指针

INT8U prio:任务优先级

INT16U id: 任务ID,2.52版本,无实际作用,保留作为扩展用

OS_STK *pbos: 指向堆栈底部的指针,用于OSTaskStkChk()函数

INT32U stk_size:指定任务堆栈的大小,由OS_STK类型决定

void *pext:定义数据结构的指针,作为TCB的扩展

INT16U opt) :存放于任务操作相关的信息,详见uCOS-II.H

4、返回值说明:

OS_NO_ERR:函数调用成功。

OS_PRIO_EXIST:具有该优先级的任务已经存在。

OS_PRIO_INVALID:参数指定的优先级大于OS_LOWEST_PRIO。

OS_NO_MORE_TCB:系统中没有OS_TCB可以分配给任务了。

5、函数主体在os_task.c中

OSTaskSuspend()任务挂起:

1、主要作用: 无条件挂起一个任务。调用此函数的任务也可以传递参数 OS_PRIO_SELF,挂起调用任务本身。当前任务挂起后,只有其他任务才能唤醒被挂起的任务。任务挂起后,系统会重新进行任务调度,运行下一个优先级最高的就绪任务。唤醒挂起任务需要调用函数OSTaskResume()。任务的挂起是可以叠加到其他操作上的。例如,任务被挂起时正在进行延时操作,那么任务的唤醒就需要两个条件:延时的结束以及其他任务的唤醒操作。又如,任务被挂起时正在等待信号量,当任务从信号量的等待对列中清除后也不能立即运行,而必须等到被唤醒后。

 1/4    1 2 3 4 下一页 尾页
换一批

延伸阅读

[猎聘集] Google 工程师:薪资只是一部分,不要因薪水高就跳槽

Google 工程师:薪资只是一部分,不要因薪水高就跳槽

一般人的职业生涯长达 30 年,随着退休年龄延后,工作时间甚至更长,难免会有几次换公司、换产业等转换跑道的机会。换工作的时候总是充满希望,同时也充满惶恐,大部分人只会求跳槽加薪,但是 Google 工程师认为,不应该让薪资成为唯一的考量因素......

关键字:Google 工程师 薪资 福利

[新鲜事] 美女iPhone 7 Plus突然自燃炸裂 苹果紧急调查

美女iPhone 7 Plus突然自燃炸裂 苹果紧急调查

昨天,推特美女Brianna Olivas爆料,周三晚,自己的iPhone 7 Plus在完全没用的情况下自燃冒烟,场景非常恐怖。......

关键字:iPhone 7 Plus 自燃炸裂

[新鲜事] 谷歌上亿大奖空置11年无人领取!难道真的没人眼馋吗?

谷歌上亿大奖空置11年无人领取!难道真的没人眼馋吗?

Google在11年前为了激励民间航天业的发展,曾设立探月大奖赛,只要满足一定条件就可以领取高达3000万美元(约合人民币1.9亿)奖金,但是直到11年后大奖还是名花无主。......

关键字:谷歌 民间航天业

[新鲜事] iPhone 6s频发异常关机事件!苹果再度回应

iPhone 6s频发异常关机事件!苹果再度回应

因iPhone 6s自动关机时间频发,中消协数次约谈苹果公司,并要求苹果定期汇报时间进展。......

关键字:iPhone 6s 苹果 异常关机

[新鲜事] 联想终于出手:Motorola彻底死亡!

联想终于出手:Motorola彻底死亡!

恐怕谁也没想到,曾经手机圈最牛的两位巨头摩托罗拉和诺基亚已经沦落到如此地步了。......

关键字:联想 Motorola
条评论

我 要 评 论

网友评论

大家都爱看

  • 兆易创新研发14nm嵌入式异构AI芯片

    昨日,兆易创新发表公告,重申了收购上海思立微的目的。兆易创新表示,这次产业并购,旨在整合境内优质的芯片设计领域资产,获取智能人机交互领域的核心技术,拓展并丰富公司产品线,在整体上形…

    2018-01-31
  • 华为的优势,就是自家的各种自研芯片

    CPU即中央处理器,是一块超大规模的集成电路,是一台计算机的运算核心和控制核心。它的功能主要是解释计算机指令以及处理计算机软件中的数据。

    2017-08-16
  • 你不知道Ryzen芯片有多火?来看看AMD的股票吧

    据外媒报道,美银美林认为,AMD最新的Ryzen芯片可能会引发一波销售浪潮,进而推动该股继续上涨。它认为AMD股票还有40%以上的上涨空间。

    2017-08-16
  • 国产芯片:厚积薄发,强势崛起

    关于国产芯片,是近几年才有崛起的势头,可是在几年之前,国产芯片还处于“沉睡”的状态,尤其是手机芯片,几乎大部分都依赖进口,而且国外的市场几乎被高通和联发科所垄断,也就展讯还在市场边…

    2017-08-16
  • 为了数据安全 大疆无人机增加隐私飞行功能

    大疆周一表示,在美国陆军因为“网络缺陷”而要求其成员停用大疆无人机后,这家中国无人机制造商将加强无人机的数据安全性。 大疆政策和法务副总裁布伦丹&middot…

    2017-08-15