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

延伸阅读

[新鲜事] 太淘气了!俄罗斯机器人两次私自逃离实验室将被拆解

太淘气了!俄罗斯机器人两次私自逃离实验室将被拆解

在威尔史密斯的电影《机械公敌》中,一个人工智能机器人因为有了自己的思想,在人类社会中造成了极大的混乱,如今机器人拥有智能这一现象在俄罗斯真实上演了,这个机器人两度私自逃出了实验室,第一次因为电量耗完被搁置在马路中间,第二次逃走未遂,实验室准......

关键字:俄罗斯 机器人 人工智能

[猎聘集] 总能在职场中被人高薪挖走的人,一般都具备哪些特质?

总能在职场中被人高薪挖走的人,一般都具备哪些特质?

在职场中,我们发现有些人经常被高薪挖走,这样的人一般具有4种特质。......

关键字:职场 高薪

[猎聘集] 年轻的电子工程师为何只能卖个“白菜价”?

年轻的电子工程师为何只能卖个“白菜价”?

无论是与这场高教改革利益相关的企业界人士,还是高校内的教师,对改革结果持乐观态度的不多。“教改只能改课程,改培养方案,但现在的大学里最需要改革但又最难改的,是学生的想法。”......

关键字:年轻 电子工程师

[新鲜事] 矿难了显卡就会降价?你可别做梦了

矿难了显卡就会降价?你可别做梦了

此矿难非彼矿难,我们今天说的矿难是因为虚拟货币价格暴跌导致“矿业”集体崩盘的一种现象。......

关键字:显卡 矿难 比特币
条评论

我 要 评 论

网友评论

大家都爱看

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

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

    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