UCOS-II任务设计

2023-05-16

UCOS-II任务设计

任务函数的结构:

在用户任务函数中,必须包含至少一次对操作系统服务函数的调用,否则比其优先级低的任务将无法得到运行的机会,这是用户任务与普通函数的明显区别。

任务函数按照执行方式分为三类:单次执行、周期执行、事件触发三类。

单次执行的任务:此类任务只执行一次,执行后就自行删除。

void MyTask (void *pdata) //单次执行的任务函数

{

进行准备工作的代码;

任务实体代码;

调用任务删除函数; //调用 OSTaskDel(OS_PRIO_SELF)

}

最常见的单次执行任务“启动任务”,启动任务的结构如下:

void main (void) //主函数

{

OSInit (); //初始化操作系统

OSTaskCreate(TaskStart,(void *)0,&TaskStartStk[TASK_STK_SIZE-1],1);//创建启动任务

OSStart (); //启动操作系统,开始对任务进行调度管理

}

void TaskStart(void *pdata) //启动任务

{

pdata = pdata;

系统硬件初始化; //时钟系统、中断系统、外设等等

创建各个任务; //如键盘任务、显示任务、采样任务、数据处理任务、打印任务等等

创建各种通信工具; //如信号量、消息邮箱、消息队列等等

OSTaskDel (OS_PRIO_SELF); //删除自己

}

注意:

为了保证“启动任务”能够连续运行,必须将“启动任务”的优先级选择为最高。否则,当“启动任务”创建一个优先级高于自己的任务时,刚刚创建的任务就会立即进入运行状态而与这个任务关联的其它任务可能还没有创建,它使用的通信工具也还没有创建,系统必然出错。

用创建任务的方式启动任务,比如通过键盘操作来启动串口通信发送数据。当键盘任务函数检测到发送按键被按下时调用OSTaskCreate来创建串口发送任务,此时串口发送任务被创建得以执行,当串口数据发送完成后串口发送任务自行调用OSTaskDel来删除自己。

采用“任务创建”的方式来启动任务,可以省略用通信手段触发任务的麻烦,还可以通过*pdata 来传递原始参数,使得每次启动任务时可以有不同的工作状态。

虽然用“创建任务”的方式来启动一个任务有以上方便之处,但每次启动任务都要调用“任务创建函数”,需要对“任务控制块”进行全面初始化,并对“任务控制块链表”和“任务就绪表”进行操作,比较耗时,故只适用于实时性要求不高的任务(如键盘操作启动的任务)。采用“创建任务”的方式来启动一个任务除了实时性差外,

还可能在任务自我删除后出现如下后遗症:

1、占用的共享资源尚未被释放,使其它需要使用该资源的任务不能运行。

2、通信关系的“上家”任务(或者ISR)发出的信号量或者消息被积压而得不到响应。

3、通信关系的“下家”任务因为得不到信号量或者消息而被遗弃(永远被挂起)。

4、可能留下未删除干净的废弃变量。

因此:

1、如果该任务使用了共享资源,必须在删除自我之前释放(如释放内存块,释放互斥资源(发送互斥信号量))

2、如果该任务有关联任务(或ISR),必须在自我删除之前将这种关联解除,而解除关联关系任务和通信工具,这是得不偿失而又非常麻烦的事情。

适合采用“创建任务”的方式来启动的任务,通常是“孤立任务”,它们不和其它任务进行通信( ISR 除外),只使用共享资源来获取信息和输出信息。如果不满足这个条件,应该采用下面两种任务函数机构,并在系统启动时创建好。

周期性执行的任务,其任务函数的结构如下:

void MyTask (void *pdata) //周期性执行的任务函数

{

进行准备工作的代码;

for (;;) //无限循环,也可用 while (1)

{

任务实体代码;

调用系统延时函数; //调用 OSTimeDly( )或 OSTimeDlyHMSM( )

}

}

通过合理设置调用 OSTimeDly( ) 或 OSTimeDlyHMSM( )时的参数值可以调整任务的执行周期。当任务执行周期远大于系统时钟节拍时,任务执行周期的相对误差比较小当任务执行周期只有几个时钟节拍时,相邻两次执行的间隔时间抖动不能忽视,任务的执行周期的相对误差比较大,只适用于对周期稳定性要求不高的任务(如键盘任务);当任务执行周期只有一个时钟节拍时,可将该任务的功能放到 OSTimeTickHook( )(时钟节拍函数中的钩子函数)中去执行;当任务执行周期小于一个时钟节拍或者不是时钟节拍的整数倍时,将无法使用延时函数对其进行周期控制,只能采用独立于操作系统的定时中断来触发。采用独立定时器触发的任务具有很高的周期稳定性。

事件触发执行的任务,其任务函数结构如下:

void MyTask (void *pdata) //事件触发执行的任务函数

{

进行准备工作的代码;

for (;;) //无限循环,也可用 while (1)

{

调用获取事件的函数; //如:等待信号量、等待邮箱中的消息等等。

任务实体代码;

}

}

任务的优先级安排:

任务的优先级资源由操作系统提供,以 μC/OS-II 为例,共有 64 个优先级,优先级的高

低按编号从 0(最高)到 63(最低)排序。由于用户实际使用到的优先级总个数通常远小于64,为节约系统资源,可以通过定义系统常量 OS_LOWEST_PRIO 的值来限制优先级编号的范围。

μC/OS-II 实时操作系统总是将最低优先级 OS_LOWEST_PRIO 分配给“空闲任务”,将

次低优先级 OS_LOWEST_PRIO-1 分配给“统计任务”。

μC/OS-II 实时操作系统还保留对最高的四个优先级( 0、 1、 2、 3)和 OS_LOWEST_PRIO

-3 与 OS_LOWEST_PRIO-2 的使用权。

UCOS-II中这些优先级是操作系统保留的:

0、1、2、3、OS_LOWEST_PRIO、OS_LOWEST_PRIO-1、OS_LOWEST_PRIO-2、OS_LOWEST_PRIO-3

优先级安排原则:
中断关联性:与中断服务程序( ISR)有关联的任务应该安排尽可能高的优先级,以便及时处理异步事件,提高系统的实时性。如果优先级安排得比较低, CPU 有可能被优先级高一些的任务长期占用,以致于在第二次中断发生时连第一次中断还没有处理,产生信号丢失现象。

紧迫性:因为紧迫任务对响应时间有严格要求,在所有紧迫任务中,按响应时间要

求排序,越紧迫的任务安排的优先级越高。紧迫任务通常与 ISR 关联。

关键性:任务越关键安排的优先级越高,以保障其执行机会。

频繁性:对于周期性任务,执行越频繁,则周期越短,允许耽误的时间也越短,故应该安排的优先级也越高,以保障及时得到执行。

快捷性:在前面各项条件相近时,越快捷(耗时短)的任务安排的优先级越高,以使其他就绪任务的延时缩短

与其他任务协调:

一个任务的功能往往需要其它任务配合才能完成。在没有操作系统的传统的编程模式下,只要直接调用这些模块就可以了。在操作系统的管理下,不允许任务之间相互调用,必须采用操作系统提供的同步和通信机制来进行任务之间的协调运行。

UCOS-II任务设计


任务函数的结构:
在用户任务函数中,必须包含至少一次对操作系统服务函数的调用,否则比其优先级低的任务将无法得到运行的机会,这是用户任务与普通函数的明显区别。


任务函数按照执行方式分为三类:单次执行、周期执行、事件触发三类。


单次执行的任务:此类任务只执行一次,执行后就自行删除。
void MyTask (void *pdata) //单次执行的任务函数
{
  进行准备工作的代码;
  任务实体代码;
  调用任务删除函数; //调用 OSTaskDel(OS_PRIO_SELF)
}
最常见的单次执行任务“启动任务”,启动任务的结构如下:
void main (void) //主函数
{
  OSInit (); //初始化操作系统
  OSTaskCreate(TaskStart,(void *)0,&TaskStartStk[TASK_STK_SIZE-1],1);//创建启动任务
  OSStart (); //启动操作系统,开始对任务进行调度管理
}
void TaskStart(void *pdata) //启动任务
{
  pdata = pdata;
  系统硬件初始化; //时钟系统、中断系统、外设等等
  创建各个任务; //如键盘任务、显示任务、采样任务、数据处理任务、打印任务等等
  创建各种通信工具; //如信号量、消息邮箱、消息队列等等
  OSTaskDel (OS_PRIO_SELF); //删除自己
}
注意:
  为了保证“启动任务”能够连续运行,必须将“启动任务”的优先级选择为最高。否则,当“启动任务”创建一个优先级高于自己的任务时,刚刚创建的任务就会立即进入运行状态,而与这个任务关联的其它任务可能还没有创建,它使用的通信工具也还没有创建,系统必然出错。
  
  用创建任务的方式启动任务,比如通过键盘操作来启动串口通信发送数据。当键盘任务函数检测到发送按键被按下时调用OSTaskCreate来创建串口发送任务,此时串口发送任务被创建得以执行,当串口数据发送完成后串口发送任务自行调用OSTaskDel来删除自己。
  
采用“任务创建”的方式来启动任务,可以省略用通信手段触发任务的麻烦,还可以通过*pdata 来传递原始参数,使得每次启动任务时可以有不同的工作状态。


虽然用“创建任务”的方式来启动一个任务有以上方便之处,但每次启动任务都要调用“任务创建函数”,需要对“任务控制块”进行全面初始化,并对“任务控制块链表”和“任务就绪表”进行操作,比较耗时,故只适用于实时性要求不高的任务(如键盘操作启动的任务)。采用“创建任务”的方式来启动一个任务除了实时性差外,
还可能在任务自我删除后出现如下后遗症:


占用的共享资源尚未被释放,使其它需要使用该资源的任务不能运行。
通信关系的“上家”任务(或者ISR)发出的信号量或者消息被积压而得不到响应。
通信关系的“下家”任务因为得不到信号量或者消息而被遗弃(永远被挂起)。
可能留下未删除干净的废弃变量。
因此:
如果该任务使用了共享资源,必须在删除自我之前释放(如释放内存块,释放互斥资源(发送互斥信号量))
如果该任务有关联任务(或ISR),必须在自我删除之前将这种关联解除,而解除关联关系任务和通信工具,这是得不偿失而又非常麻烦的事情。


适合采用“创建任务”的方式来启动的任务,通常是“孤立任务”,它们不和其它任务进行通信( ISR 除外),只使用共享资源来获取信息和输出信息。如果不满足这个条件,应该采用下面两种任务函数机构,并在系统启动时创建好。




周期性执行的任务,其任务函数的结构如下:
void MyTask (void *pdata) //周期性执行的任务函数
{
  进行准备工作的代码;
  for (;;) //无限循环,也可用 while (1)
  {
  任务实体代码;
  调用系统延时函数; //调用 OSTimeDly( )或 OSTimeDlyHMSM( )
  }
}


通过合理设置调用 OSTimeDly( ) 或 OSTimeDlyHMSM( )时的参数值可以调整任务的执行周期。当任务执行周期远大于系统时钟节拍时,任务执行周期的相对误差比较小;当任务执行周期只有几个时钟节拍时,相邻两次执行的间隔时间抖动不能忽视,任务的执行周期的相对误差比较大,只适用于对周期稳定性要求不高的任务(如键盘任务);当任务执行周期只有一个时钟节拍时,可将该任务的功能放到 OSTimeTickHook( )(时钟节拍函数中的钩子函数)中去执行;当任务执行周期小于一个时钟节拍或者不是时钟节拍的整数倍时,将无法使用延时函数对其进行周期控制,只能采用独立于操作系统的定时中断来触发。采用独立定时器触发的任务具有很高的周期稳定性。


事件触发执行的任务,其任务函数结构如下:
void MyTask (void *pdata) //事件触发执行的任务函数
{
  进行准备工作的代码;
  for (;;) //无限循环,也可用 while (1)
  {
  调用获取事件的函数; //如:等待信号量、等待邮箱中的消息等等。
  任务实体代码;
  }
}


任务的优先级安排:
任务的优先级资源由操作系统提供,以 μC/OS-II 为例,共有 64 个优先级,优先级的高
低按编号从 0(最高)到 63(最低)排序。由于用户实际使用到的优先级总个数通常远小于64,为节约系统资源,可以通过定义系统常量 OS_LOWEST_PRIO 的值来限制优先级编号的范围。
μC/OS-II 实时操作系统总是将最低优先级 OS_LOWEST_PRIO 分配给“空闲任务”,将
次低优先级 OS_LOWEST_PRIO-1 分配给“统计任务”。
μC/OS-II 实时操作系统还保留对最高的四个优先级( 0、 1、 2、 3)和 OS_LOWEST_PRIO
-3 与 OS_LOWEST_PRIO-2 的使用权。
即UCOS-II中这些优先级是操作系统保留的:
0、1、2、3、OS_LOWEST_PRIO、OS_LOWEST_PRIO-1、OS_LOWEST_PRIO-2、OS_LOWEST_PRIO-3


优先级安排原则:中断关联性:与中断服务程序( ISR)有关联的任务应该安排尽可能高的优先级,以便及时处理异步事件,提高系统的实时性。如果优先级安排得比较低, CPU 有可能被优先级高一些的任务长期占用,以致于在第二次中断发生时连第一次中断还没有处理,产生信号丢失现象。


紧迫性:因为紧迫任务对响应时间有严格要求,在所有紧迫任务中,按响应时间要


求排序,越紧迫的任务安排的优先级越高。紧迫任务通常与 ISR 关联。


关键性:任务越关键安排的优先级越高,以保障其执行机会。


频繁性:对于周期性任务,执行越频繁,则周期越短,允许耽误的时间也越短,故应该安排的优先级也越高,以保障及时得到执行。


快捷性:在前面各项条件相近时,越快捷(耗时短)的任务安排的优先级越高,以使其他就绪任务的延时缩短


与其他任务协调:
一个任务的功能往往需要其它任务配合才能完成。在没有操作系统的传统的编程模式下,只要直接调用这些模块就可以了。在操作系统的管理下,不允许任务之间相互调用,必须采用操作系统提供的同步和通信机制来进行任务之间的协调运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UCOS-II任务设计 的相关文章

  • 我发现ucos里面也是任务,任务控制块,消息队列,信号量,事件 。这些概念感觉和freertos一模一样啊

    我发现ucos里面也是任务 xff0c 任务控制块 xff0c 消息队列 xff0c 信号量 xff0c 事件 这些概念感觉和freertos一模一样啊 xff0c 感觉大家就是抄来抄去 xff1f 应该这些操作系统原理都差不多 xff0c
  • freertos和ucos的区别

    一 freeRTOS比uCOS II优胜的地方 xff1a 1 内核ROM和耗费RAM都比uCOS 小 xff0c 特别是RAM 这在单片机里面是稀缺资源 xff0c uCOS至少要5K以上 xff0c 而freeOS用2 3K也可以跑的很
  • ucos-ii 的任务调度原理和实现

    ucosii 任务调度和原理 1 ucos ii 任务创建与任务调度 1 1 任务的创建 当你调用 OSTaskCreate 进行任务的创建的时候 xff0c 会初始化任务的堆栈 保存cpu的寄存器 创建任务的控制块 xff08 OS TC
  • UCOS-III

    一 UCOSIII 简介 UCOSIII 是一个可裁剪 可固化 可剥夺 的多任务系统 xff0c 没有任务数目的限制 xff0c 是 UCOS 的第三代内核 xff0c UCOSIII 有以下几个重要的特性 xff1a 可剥夺多任务管理 x
  • uCOS上下文切换,PendSV中断函数

    摘自 xff1a http www stmcu org module forum thread 384142 1 1 html 介绍一 xff1a 移植详解1和2中主要讲了移植需要用到的基础知识 xff0c 本文则对具体的移植过程进行介绍
  • uCOS-II任务间通信之信号量 [转载]

    uCOS II任务间通信之信号量 信号量是什么 xff1f 信号量有什么用 xff1f 信号量是可以用来表示一个或多个事件的发生 xff0c 还可以用来对共享资源的访问 uCOS II提供了5个对信号量进行操作的函数 如下所示 xff1a
  • uCOS任务信号量相关函数代码理解

    强调任务信号量思想 xff1a 任务信号量只是一个标志 xff0c 获取成功就是指把信号量计数值减1 xff1b 释放就是指把信号量计数值加1 xff08 溢出则计数值不变 xff09 获取信号量需要判断信号量是否可用 xff08 大于0
  • UCOS-II任务设计

    UCOS II任务设计 任务函数的结构 xff1a 在用户任务函数中 xff0c 必须包含至少一次对操作系统服务函数的调用 xff0c 否则比其优先级低的任务将无法得到运行的机会 xff0c 这是用户任务与普通函数的明显区别 任务函数按照执
  • UCOS II 中信号量的使用

    UCOS II 中信号量的使用 UCOS II 中信号量的使用1 声明信号量2 创建信号量3 请求信号量4 发送信号量5 删除信号量 UCOS II 中信号量的使用 1 声明信号量 例如 xff1a OS EVENT Fun semp 声明
  • UCOS学习(七)——信号量详解

    信号量 信号量简介信号量保护共享资源举个栗子 xff1a 如果不使用信号量信号量解决公共资源问题创建信号量 xff1a 信号量实现任务同步总结 信号量简介 信号量像是一种上锁机制 xff0c 代码必须获得对应的钥匙才能继续执行 xff0c
  • 【STM32】入门(十一):初识uCOS-III

    STM32 STM32单片机总目录 1 轮询 中断 多任务对比 2 什么是任务 如果您学过linux xff0c 那么任务可以理解为线程 在代码中的体现就是线程函数 xff0c 一个函数中有个无限循环函数 xff0c 并且永不返回 例如 x
  • 从 C51+uCos-II 近距离了解操作系统任务切换原理

    前言 从 C51 43 uCos II 简单介绍下任务切换的原理 方便大家更形象的理解多任务怎么切换 为后续写 x86 43 Linux 任务切换做铺垫练手吧 参考资料如下 xff1a uCos II 源码 单片机原理与应用及 C51 编程
  • ucos信号量集

    事件标志组 信号量集 的使用 xff1a span class token keyword static span OS STK task testled span class token punctuation span STARTUP
  • ucos源码分析(一)

    时间 2018 01 27 本人目前是大三学生 电子信息工程专业 xff0c 在大学前俩年的时间 xff0c 一直在使用和学习单片机 xff0c 不过也仅仅是从 xff15 xff11 到 xff13 xff12 xff0c 马上要面临就业
  • UCOS II两个任务的模板

    芯片lm3s9b92 include lt includes h gt include 34 utils uartstdio h 34 Application tasks 优先级 define TASK2 PRIO 11 define ta
  • ucos OSTimeDly

    来源 xff1a http blog sina com cn s blog 5f9b3de40100e182 html OSTimeDly 在Task中 xff0c 一般执行一段时间之后调用OSTimeDly推迟一段时间再继续运行 xff0
  • UCOS2的文件目录

    想着闲着也是闲着 把之前学习ucos2源码的笔记整理一下 复盘一次 总结内容将其写为博客作为学习的输出 一 为什么要学RTOS或者IOTOS 我在大一时 开始进入实验室接触单片机 摸爬滚打的参加了几次比赛 也因此入了嵌入式的坑 大三时开始思
  • ucos2-cpu_c.c-位带操作

    在uC CPU ARM Cortex M3 cpu c c中有两个位带访问的函数 使用位带访问技术来对内存或外设地址addr中的第bit nbr位进行清零操作 void CPU BitBandClr CPU ADDR addr CPU IN
  • ucos-ii嵌入式操作系统任务调度(一)----任务调度的过程及实现原理

    先给自己打个广告 本人的微信公众号正式上线了 搜索 张笑生的地盘 主要关注嵌入式软件开发 股票基金定投 足球等等 希望大家多多关注 有问题可以直接留言给我 一定尽心尽力回答大家的问题 二维码如下 一 概念 在单片机裸机程序中 我们以函数为最
  • Micriμm μC/OS-III RTOS 中的分配和释放

    我们使用 Micrium 的 C OS III RTOS 和 Renesas 的 RX62N 我们构建了一个必须动态分配和释放数据的系统 我们发现了功能malloc and free 与 RTOS 配合得不好 然而 RTOS 为此提供了一个

随机推荐

  • FastDFS的安装配置及其使用

    一 fastDFS是什么 fastDFS是c语言编写的一款开源分布式文件系统 xff0c 使用fastDFS可以很方便搭建一套高性能的文件服务器集群提供文件上传 下载等服务 二 fastDFS工作原理 fastDFS包括Tracker se
  • centos编译hadoop源码包

    一 所需工具 JDK maven protobuf CMake ant hadoop 2 x x src 如下所示 xff1a 二 安装 1 安装jdk 2 安装maven 可以参考如下地址 xff1a https blog csdn ne
  • CentOs搭建Zookeeper

    下载地址 https mirrors tuna tsinghua edu cn apache zookeeper zookeeper 3 4 14 一 zookeeper环境搭建 安装jdk xff1a 略 本次我们在192 168 0 1
  • CensOs搭建Solr环境并配置

    下载地址 xff1a https mirrors tuna tsinghua edu cn apache lucene solr 8 1 1 注 xff1a 这里我使用的8 1 1版本 xff0c 可以根据自己需要选择版本 若是版本相差较大
  • Centos安装Docker

    Docker 是一个开源的应用容器引擎 xff0c 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中 xff0c 然后发布到任何流行的 Linux 机器上 xff0c 也可以实现虚拟化 Docker 技术的三大核心概念 xff0c
  • Docker图形管理工具的安装与使用

    1 搜索Portainer镜像 docker search portainer 2 下载镜像 docker pull portainer portainer 3 启动 docker run d p 9000 9000 restart 61
  • PV3953L1光流定点激光定高四轴悬停模块说明书

    PV3953L1光流定点激光定高四轴悬停模块说明书 视频效果 xff1a STM32F103 270飞控 四轴飞行器大机架 DIY安装 视频教程 1 产品图片 型号 xff1a PV3953L1 接线标识 xff1a V xff1a 3 3
  • 【OpenCV3.2】Detection of ArUco Markers

    姿态估计 xff08 Pose estimation xff09 在 计算机视觉 领域扮演着十分重要的角色 xff1a 机器人 导航 增强现实以及其它 这一过程的基础是找到现实世界和图像投影之间的对应点 这通常是很困难的一步 xff0c 因
  • FreeRTOS学习之前后台系统存在的问题

    最近报了百问网7天物联网的训练营 https www 100ask net detail term 6216e88bc00cf 3clJb1 25 和在B站上学习的韦东山老师的freeRTOS做了下学习记录 1 什么是前后台系统 这是一个典
  • 速腾聚创16线激光雷达rslidar-16的ros驱动安装与rviz点云显示

    原链接 https community bwbot org topic 520 运行测试平台 小强ROS机器人 速腾聚创16线激光雷达rslidar 16的供电是直流12v 3A xff0c 通信接口是rs485网络接口 小强ros开发平台
  • freeRTOS滴答时钟相关源码分析

    最近学习白问网韦东山老师在B站开源的freeRTOS课程 xff0c 网址 xff1a 韦东山直播公开课 xff1a RTOS实战项目之实现多任务系统 第1节 xff1a 裸机程序框架和缺陷 哔哩哔哩 bilibili和7天物联网训练营 第
  • freeRTOS相对延时函数-vTaskDelay源码分析

    最近学习白问网韦东山老师在B站开源的freeRTOS课程 xff0c 网址 xff1a 韦东山直播公开课 xff1a RTOS实战项目之实现多任务系统 第1节 xff1a 裸机程序框架和缺陷 哔哩哔哩 bilibili和7天物联网训练营 第
  • freeRTOS绝对延时函数 vTaskDelayUntil源码分析

    最近学习白问网韦东山老师在B站开源的freeRTOS课程 xff0c 网址 xff1a 韦东山直播公开课 xff1a RTOS实战项目之实现多任务系统 第1节 xff1a 裸机程序框架和缺陷 哔哩哔哩 bilibili和7天物联网训练营 第
  • 北京邮电大学计算机考研信息汇总

    See you in BUPT 北京邮电大学计算机考研报考资料 复试资料汇总 for 2019 by 凝紫暮 CSDN xff1a 北京邮电大学计算机考研信息汇总 GitHub Pages 北京邮电大学计算机考研信息汇总 适用报考范围 xf
  • C++面向对象程序设计——类和对象(个人整理)

    对象 xff1a object 客观世界中任何一个事物都可以看成一个对象 xff0c 如自然物体 xff08 汽车 xff0c 房子 xff0c 班级 xff09 可以看到一个班级作为一个对象有两个要素 xff1a 1 班级所属系和专业 x
  • C++面向对象程序设计——类和对象的进一步讨论

    构造函数 xff1a 构造函数是一种特殊的成员函数 xff0c 它不需要用户来调用它 xff0c 而是在建立对象时自动执行 在一个类中定义了全部是默认参数的构造函数后 xff0c 则不再定义重载构造函数 xff08 否则容易出错 xff09
  • C++面向对象程序设计——继承与派生

    什么是继承与派生 xff1a 在C 43 43 中可重用性是通过 继承 这一机制来实现的 xff0c 因此继承是C 43 43 的一个重要的组成部分 声明派生类的一般形式为 xff1a class 派生类名 xff1a 继承方式 基类名 派
  • UCOS-II时间管理

    uC OS II时间管理 xff1a 任务延时函数 xff0c OSTimeDly INT16U ticks 申请该服务的任务可以延时一段时间 xff0c 这段时间的长短是用时钟节拍的数目来确定的 实现这个系统服务的函数叫做 OSTimeD
  • UCOS-II内存管理

    内存管理 xff1a 我们知道 xff0c 在 ANSI C 中可以用 malloc 和 free 两个函数动态地分配内存和释放内存 但是 xff0c 在嵌入式实时操作系统中 xff0c 多次这样做会把原来很大的一块连续内存区域 xff0c
  • UCOS-II任务设计

    UCOS II任务设计 任务函数的结构 xff1a 在用户任务函数中 xff0c 必须包含至少一次对操作系统服务函数的调用 xff0c 否则比其优先级低的任务将无法得到运行的机会 xff0c 这是用户任务与普通函数的明显区别 任务函数按照执