关闭
关闭
首页 > 嵌入式软件 > 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 下一页 尾页
换一批

延伸阅读

[新鲜事] 上天眷顾!宝宝35000英尺高空出生 获终身免费乘机

上天眷顾!宝宝35000英尺高空出生 获终身免费乘机

近日,印度Jet Airways航空公司向一位最年轻的乘客送上了一份终极大礼——终身免费乘坐该航空公司的航班。......

关键字:宝宝 高空 出生

[新鲜事] 不要让家里的喵星人偷吃狗粮!后果严重!

不要让家里的喵星人偷吃狗粮!后果严重!

许多家中同时饲养喵星人、汪星人的铲屎官都知道,要让宠物们相安无事的生活在同一屋檐下已经不是易事,要是猫咪偷吃狗食、狗狗偷吃猫粮,更是令人头痛的问题。......

关键字:猫咪 狗粮 宠物健康

[猎聘集] 2017年集成电路行业应届生薪资表曝光

2017年集成电路行业应届生薪资表曝光

今年的秋天来的比往常早,也更冷一些。对于想找工作的同学们来说,可能没有比一份收集了许多IC公司薪资待遇的文章更加暖心的了。......

关键字:集成电路行业 应届生 薪资

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

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

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

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

[疯狂史] 惊出一身冷汗 一颗小行星直奔地球而来

惊出一身冷汗 一颗小行星直奔地球而来

据美国航天局近日发布消息称,4月19日,一颗直径约650米的近地小行星将以近180万公里的距离“擦”过地球,这两天晚上人们借助小型光学望远镜就可以观测到这个“天外来客”。......

关键字:行星 地球

[猎聘集] 神脑洞!用电子元器件来比喻人生是怎样的?

神脑洞!用电子元器件来比喻人生是怎样的?

热恋中的女人的心就像被加了一个差动放大器,男朋友的一切优点都被当成差模信号被放大,而他的缺点都被选择为共模信号抑制掉了。......

关键字:电子元器件 二极管 三极管

[猎聘集] 大疆大神级工程师手把手教你如何成为一名机器人工程师

大疆大神级工程师手把手教你如何成为一名机器人工程师

很多朋友私信问我对机器人和人工智能感兴趣,该怎么展开学习。最近稍微有点空,我写写我的看法。......

关键字:机器人 工程师
条评论

我 要 评 论

网友评论

大家都爱看

  • 扇出型晶圆级封装的优势和挑战!

    我们有能力创造一些能保持前代性能并且更好更小的电子设备,例如今天的可穿戴设备、智能手机或平板电脑,这是由于很多因素超过摩尔定律而快速发展,从而能够从底层的嵌入组件发展到今天把它们封…

    2018-03-29
  • Xilinx推出革命性的新型自适应计算产品

    自适应和智能计算的全球领先企业赛灵思公司(Xilinx, Inc.,(NASDAQ:XLNX)),近日宣布推出一款超越FPGA功能的突破性新型产品,名为ACAP(Adaptive Compute Acceleration Platform,自适应计算加速…

    2018-03-20
  • 赛普拉斯为树莓派3 B+ IoT单板计算机提供强大稳定的无

    先进嵌入式系统解决方案的领导者赛普拉斯(纳斯达克代码:CY)近日宣布其Wi-Fi®和蓝牙®combo解决方案为全新的树莓派 3 B+(Raspberry Pi 3Model B+)IoT单板计算机提供强大稳定的无线连接…

    2018-03-20
  • 观看直播领红包,SEED-A10加速卡助力人工智能

    随着云服务器、云计算的发展,大家对硬件加速的需求越来越多,但是随着设备功耗的上升、性能需求越来越高,常规加速设备以及开始不能满足需求,因此FPGA逐渐在硬件加速中找到了自己的位置,而艾…

    2018-03-19
  • 特朗普:博通不得以任何形式收购高通

    白宫周一(3月12日)晚发出声明,川普(特朗普)总统出于“国家安全”考量、禁止新加坡博通公司(Broadcom)收购美国高通公司(Qualcomm)。

    2018-03-14