【读书笔记】usOS-II学习笔记(2008-10-31)_usosii 任务执行流程-程序员宅基地

技术标签: UCOS-II嵌入式开发学习  

点击打开链接

2008-10-31

ucOS-II特性:

l         可剥夺内核

l         不支持同优先级的任务时间片轮转调度算法

l         可避免优先级反转

l         不支持优先级继承

l         允许建立63个用户任务

l         仅支持优先级法启动等待信号量的任务

l         仅支持优先级法启动等待消息邮箱的任务

l         支持事件标志,提供事件标志置位、清0和等待事件标志服务

l         支持先进先出(FIFO)和后进先出(LIFO)的消息队列

l         允许中断嵌套,中断嵌套层次可达255层

 

实现互斥的方法:

l         关中断

l         使用测试并置位指令

l         禁止任务切换

l         使用信号量(信号量初始化为1)

 

信号量的作用

l         控制共享资源的使用权

l         标志某事件的发生

l         同步2个任务(信号量初始化为0)

 

可剥夺的内核ucOS任务切换的时机:

(任务切换的时机:当前任务被挂起、或有更高优先级的任务就绪)

l         中断处理程序激活了优先级更高的任务,则当中断返回时发生任务切换

l         等待信号量、邮箱、消息队列的任务被激活(该任务优先级比原任务优先级高)

l         当前任务请求信号量、事件、消息等,然无可用事件时,则当前任务挂起

l         当前任务调用延时函数,将自身延时一段时间。

 

最简单的防止死锁的方法,让每个任务:

l         先得到全部需要的资源,再做下一步工作。

l         用同样的顺序申请多个资源。

l         释放资源时,使用相反的顺序。

l         设置等待超时

 

中断及中断处理时间

    在大多数情况下,中断服务子程序应识别中断来源,从叫中断的设备取得数据或状态,并通知真正做该事件处理的那个任务。当然应该考虑到是否通知一个任务去做事件处理所花的时间比处理这个事件所花的时间还多。在中断服务中通知一个任务做时间处理(通过信号量、邮箱或消息队列)是需要一定时间的,如果事件处理需花的时间短于给一个任务发通知的时间,就应该考虑在中断服务子程序中做事件处理并在中断服务子程序中开中断,以允许优先级更高的中断打入并优先得到服务。

 

非屏蔽中断

    在非屏蔽中断的中断服务子程序中,不能使用内核提供的服务,因为非屏蔽中断是关不掉的,故不能在非屏蔽中断处理中处理临界区代码。然而向非屏蔽中断传送参数或从非屏蔽中断获取参数还是可以进行的。参数的传递必须使用全程变量,全程变量的位数必须是一次读或写能完成的,即不应该是两个分离的字节,要两次读或写才能完成。

    非屏蔽中断服务通常具有最高的优先级,在非屏蔽中断服务过程中不允许中断嵌套,普通中断一直要等到非屏蔽中断服务子程序运行结束后才能被识别。

 

时钟节拍——抖动解决方案:

l          增加微处理器的时钟频率

l          增加时钟节拍的频率

l          重新安排任务的优先级

l          避免使用浮点运算(如果非使用不可,尽量用单精度数)

l          使用能较好地优化程序代码的编译器

l          时间要求苛刻的代码用汇编语言写

l          如果可能,用同一家族的更快的微处理器做系统升级。如从8086向80186升级,从68000向68020升级等

l           

不管怎么样,抖动总是存在的。

 

使用RTOS的额外需求是

l         内核的价格

l         额外的ROM/RAM开销

l         2到4百分点的CPU额外负荷。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cike211/article/details/9947371

智能推荐

MyBatis中Case when esle end 的用法-程序员宅基地

文章浏览阅读1.7k次。CASE p.sharesNature WHEN 0 THEN '限售' WHEN 1 THEN '流通' ELSE '未知' END转载于:https://www.cnblogs.com/xushirong/p/8471406.ht..._mybatis case when then else end

spark kryo java,在Spark中自定义Kryo序列化输入输出API-程序员宅基地

文章浏览阅读224次。在在虽然Kryo支持对RDD的cache和shuffle,但是在Spark中不是内置就显示提供使用Kryo将数据系列化到磁盘中的输入输出API,RDD中的saveAsObjectFile和SparkContext中的objectFile方法仅仅支持使用Java系列化。所以如果我们可以使用Kryo系列化将会变得很棒!在这篇文章中,我将讨论如何自定义Kryo系列化输出输出相关API来将数据进行读写到磁..._kryoserializer kryoserializer = new kryoserializer();

html中span的宽高,css如何设置span的相对宽度?-程序员宅基地

文章浏览阅读872次。css如何设置span的相对宽度?下面本篇文章就来给大家介绍一下。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。因为span标签元素属于内联元素,而内联元素是忽略宽度和高度的,无法设置宽度和高度。可以使用display属性将span元素转换为块状元素或行内块状元素。块状元素或行内块状元素的高度、宽度、行高以及顶和底边距都可设置。display:block--将元素显示为块级元素,..._css获取span的宽度

通过JDBC进行简单的增删改查(以MySQL为例)-程序员宅基地

文章浏览阅读2.3k次。通过JDBC进行简单的增删改查(以MySQL为例)前言:什么是JDBC  维基百科的简介:Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。它JDBC是面向关系型数据库的。

TensorFlow gfile文件操作详解-程序员宅基地

文章浏览阅读302次。转:https://blog.csdn.net/u014182497/article/details/80681331一、gfile模块是什么gfile模块定义在tensorflow/python/platform/gfile.py,但其源代码实现主要位于tensorflow/tensorflow/python/lib/io/file_io.py,那么gfile模块主要功...

A Simple C++ Plugin System -- Interface Between Plugin and Main Application_c++ plugin systems-程序员宅基地

文章浏览阅读565次。Abstract前人已有A Simple C++ Plugin System Summary,本文将处理,如何实现插件与主程序之间的接口Introduction支持任意的命令:插件的基本类往往只提供少数接口,因此有必要将一个接口转换为多个接口。下面的字符串接口即实现了这一功能。 数据共享,包括以下 1. 主程序中访问,修改插件参数,参见下面的指针类接口。 2. 插件访问,修改主程序参数,需要在_c++ plugin systems

随便推点

使用CenterNet训练自己的数据集-程序员宅基地

文章浏览阅读6.9k次,点赞8次,收藏52次。最近在做目标检测的项目,使用YOLOv3,Mask R-CNN,Faster R-CNN训练了自己的数据,效果还可以,在保证精度的情况下,速度有点慢。于是就开始找别的方法,发现了2019年CVPR的文章CenterNet :Objects as Points,想尝试看看效果。于是就开始了艰难的配置,在这里记录一下。我是在服务器上训练的,环境是cuda10 ,使用的代码是https://githu..._centernet训练自己的数据集

android afw模式,[HUAWEI-TITANC328]手机加密功能开启后,工作区中添加超级备份手机不断重启的分析报告...-程序员宅基地

文章浏览阅读319次。工作区中添加超级备份手机不断重启的分析报告【华为反馈】 【TIT-AL00C328B120_AFW_必现】创建工作空间后升级系统,升级失败,手机循环重启。通过分析log发现,实际上这个问题与OTA无关,而与工作区应用发出的notification有关。经过沟通和自测,复现了此问题。步骤如下:1、插入sim卡【sim卡中有2个联系人,手机中无】创建afw工作区;【测试前手机已恢复出厂设置】2、adb..._afwlfv

C# Cookbook (Executing Stored Procedures)-程序员宅基地

文章浏览阅读700次。Executing Stored Proceduresusing System;using System.Data;using System.Data.SqlClient;class StoredProcDemo{static void Main(){StoredProcDemo spd = new StoredProcDemo();// run a simple stored procedur..._c# cookbook

关于『进击的Markdown』:第二弹_markdown 日期-程序员宅基地

文章浏览阅读2k次。关于『进击的Markdown』:第二弹_markdown 日期

OSI参考模型和OSI协议的区别_协议和模型有什么区别-程序员宅基地

文章浏览阅读657次。OSI协议是为了让异构的计算机之间能够相互通信的,由ISO和ITU-T推进其标准化的一种网络体系架构。OSI(参考模型)讲通信功能划分为7个分层,称作OSI参考模型。OSI协议以OSI参考模型为基础界定了每个阶层的协议和每个阶层之间接口相关的标准。遵循OSI协议的产品叫做OSI产品,而它们所遵循的通信则被称为OSI通信。..._协议和模型有什么区别

推荐文章

热门文章

相关标签