uC/OSii之任务划分
满足以下几个指标将会使软件设计比较简洁高效。
- 满足实时性指标
- 任务数目合理
- 简化软件系统
- 降低资源需求
- 设备依赖性划分:主要是对于一些输入输出设备进行划分,输入输出设备分为主动型和被动性。主动型有一个尽可能短的中断服务程序和一个与之关联的任务组成;被动性任务由于不能主动触发,必须有其他任务通过通信机制向该设备发出请求,激活该设备的相关任务。此类任务有键盘任务、显示任务、数据采集任务、控制输出任务和通信任务等。
- 发现关键功能,将其最关键部分剥离出来,用一个独立任务(或ISR)完成,剩余的部分用另外一个任务去实现,两者之间采用通信机制进行沟通。(关键任务是指:此任务对系统影响较大,如果少执行一次都会对系统造成重大影响)
- 发现紧迫任务,将其最紧迫部分剥离出来,用一个独立的高优先级的任务(或ISR)完成,剩余的部分用另外一个任务去实现,两者之间采用通信机制进行沟通。(紧迫性任务是指:此任务必须在规定时间内得到运权,并在规定时间之内执行完毕)
- 对于又关健又紧迫的功能,按紧迫功能处理。
- 将耗时较多的数据处理功能划分出来,封装为低优先级任务。(例如各种数据处理单元)
- 将关系密切的若干功能组合为一个任务,达到功能聚合的效果,省去任务之间负责的通行数据。
- 将相同事件触发的若干功能组合成为一个任务,从而免除事件分方法机制。
- 将若干周期相同的功能组合成为一个任务,避免一个时间事件触发几个任务,免除时间事件分发机制。
- 将若干按固定顺序执行的功能组合为一个任务,从而免除同步接力通信的麻烦。
uC/OSii之任务划分的更多相关文章
- uC/OS-II 内存管理
UC/OS-II 内存管理 1. 简介 uC/OS-II 不使用ANSI编译器的malloc(), free(),因为内存碎片,很可能获取不到一块连续的内存, 这在嵌入式系统中是很危险的.同时 ...
- uC/OS-II中includes块
/*************************************************************************************************** ...
- uC/OS-II实现TEST.MAK块
################################################################################ ...
- uC/OS-II全局变量定义
/*************************************************************************************************** ...
- uC/OS-II测试(TEST)块
/*************************************************************************************************** ...
- uC/OS-II时间(OS_time)块
/*************************************************************************************************** ...
- uC/OS-II信号(OS_sem)块
/*************************************************************************************************** ...
- uC/OS-II任务(OS_task)块
/*************************************************************************************************** ...
- uC/OS-II队列(OS_q)块
/*************************************************************************************************** ...
随机推荐
- 我的spring-boot开发环境
我的spring-boot开发环境,目的方便我快速搭建开发环境,同时可以最佳实践.使用spring-boot 2.1.x. 代码地址:GitHub my-springboot-examples 目的是 ...
- 合作网络(Corporative Network )并查集+路径压缩
#include <iostream> #include <algorithm> #include <string> using namespace std; + ...
- c++语言中类中的静态数据成员为什么必须在类体外初始化?
静态成员属于全局变量,是所有实例化以后的对象所共享的,而成员的初始化你可以想象成向系统申请内存存储数据的过程,显然这种共有对象必须提前申请好,而不是由某个实例化的对象来操纵的. #include &l ...
- excel导入phpmyadmin
1.将excel文件另存为txt文件,再将txt文件保存为.csv文件同时修改编码为UTF8 2.登录phpmyadmin,在phpmyadmin中创建好表格,按excel中的顺序创建每列 3.因为p ...
- python之list操作
序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. 列表(list)是最常用的Python数据类型,它可以作为一个方 ...
- Qt容器类之一:Qt的容器类介绍
一.介绍 Qt库提供了一套通用的基于模板的容器类,可以用这些类存储指定类型的项.比如,你需要一个大小可变的QString的数组,则使用QVector<QString>. 这些容器类比STL ...
- C语言-------指针函数与函数指针的区别
一. 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某 ...
- SAMBA服务初学练习
服务概述 Samba最先在Linux和Windows之间架起了一座桥梁,正是由于Samba的出现,我们可以在Linux和Windows之间实现文件共享的相互通讯,我们可以将其架设成一个功能非常强大的文 ...
- java 替换字符串模板(模板渲染)
java渲染字符串模板,也就是说在java字符串模板中设置变量字符串,使用变量去渲染指定模板中设置好的变量字符串.下面介绍4种替换模板方式: 1.使用内置String.format String me ...
- 死磕 java并发包之AtomicInteger源码分析
问题 (1)什么是原子操作? (2)原子操作和数据库的ACID有啥关系? (3)AtomicInteger是怎么实现原子操作的? (4)AtomicInteger是有什么缺点? 简介 AtomicIn ...