任务学习-ucos
1.任务(task)也称作一个线程;
2.一个任务有5种状态:休眠,就绪,运行,挂起,被中断
休眠:任务驻留在程序空间中,还没有交给ucos管理,把任务交给ucos 是通过调用OSTaskCreate()或OSTaskCreateExt()两个函数之一实现的。
任务一旦确立将进入就绪状态。一个任务可通过调用OSTaskDel()返回到休眠状态,即被删除,或通过调用该函数让另外一个任务进入休眠状态。
就绪:如果一个任务所等待的资源除CPU外已全部获得,则处于就绪状态。如果该任务的优先级最高,则马上执行。
运行:任何时候只有一个在运行;正在运行的任务可能会因为等待某一个任务而进入等待状态,此时下一个优先级更高的进入了就绪状态被赋予了CPU
的控制权,即任务级切换。
挂起:即正在运行的任务需要等待某一事件或时间延迟的发生。当任务因等待事件被挂起时,下一个优先级更高的立即得到CPU的控制权。
当其等待的事件发生了,该被挂起的任务重新进入就绪状态。事件发生的报告可能来自另一个任务,也可能来自中断服务子程序。
被中断: 正在运行的任务可以被中断,除非该任务关闭中断,或ucos关闭中断。被中断了的任务即进入了中断服务状态。响应中断时,
正在执行的任务被挂起,中断服务子程序控制了CPU的使用权。中断服务子程序可能会报告一个或多个时间的发生,而使一个
或多个任务进入就绪状态。此时,中断服务子程序返回之前,ucos要判定被中断的任务是否还是就绪态任务中优先级最高的。
如果更高的进入了就绪状态,则他会运行,否则原来的继续运行。
3.任务操作函数集
4.任务的特点:每一个任务都是死循环,如下:
void rs485CheckTask(void *pdata)
{
uart1_init();
commCmdInit();
while(1){ //死循环
cmdCheckPorc();
OSTimeDlyHMSM(0,0,0,100);
}
}
5.内核负责每个任务的调度
任务学习-ucos的更多相关文章
- uc/os学习入门:在32位pc机上搭建编译环境
由于学习ucos的入门资料中所使用的编译器大多都是Borland c ++ 3.1或者Borland c++4.5,为了降低学习的难度最好所用的编译器与书本上的一致.由于4.5版本稍高,所以最终决定用 ...
- uCOS-II的学习笔记(共九期)和例子(共六个)
源:uCOS-II的学习笔记(共九期)和例子(共六个) 第一篇 :学习UCOS前的准备工作http://blog.sina.com.cn/s/blog_98ee3a930100w0eu.html 第二 ...
- uC/OS-II之入门与介绍20160525
说一下刚学习uCOS的心得1)首先强调一下实时操作系统(RTOS)的特点,最明显的是提供及时响应和高可靠性2)基于实施操作系统的应用程序设计中,其中很重要的一个概念是"任务",任务 ...
- UCOS2_STM32移植详细过程(汇总)
Ⅰ.概述 笔者发现一个问题,很多初学者,甚至很多工作一两年的人,他们有一种依赖的思想,就是希望从别处获取的软件代码不做任何修改,直接可以运行或者使用.笔者想说,实践才是检验真理的关键,实践才是掌握知识 ...
- UCOS2系统内核讲述(三)_TCB任务控制块
Ⅰ.写在前面 学习本文之前可以参看我前面的文章: UCOS2_STM32F1移植详细过程(汇总文章) UCOS2系统内核讲述(一)_总体描述 UCOS2系统内核讲述(二)_初始化调用函数 上一篇文章讲 ...
- dosbox+masm5.0编译汇编文件
在去年写过如何bc3.1编译ucos,不过现在很少去用到,但是那是用dosbox也是懵懵懂懂的,参见https://blog.csdn.net/liming0931/article/details/8 ...
- ucos实时操作系统学习笔记——任务间通信(消息)
ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...
- ucos实时操作系统学习笔记——任务间通信(信号量)
ucos实时操作系统的任务间通信有好多种,本人主要学习了sem, mutex, queue, messagebox这四种.系统内核代码中,这几种任务间通信机制的实现机制相似,接下来记录一下本人对核心代 ...
- ucos实时操作系统学习笔记——操作系统在STM32的移植
使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只 ...
随机推荐
- 2、按钮:Buttons
/* --- page1.html ---*/ <ion-content padding class="page1"> <h1>基本用法,实体框</h ...
- OpenLayers 3 实现划线,画点
//划线 this.drawLine = function (type) { //清除双击放大效果 this.map.getInteractions().item(1).setActive(false ...
- mac解决系统设置安全与隐私没有允许所有来源
解决系统设置安全与隐私没有允许所有来源:sudo spctl --master-disable
- 设计模式之职责链模式(JAVA实现)
学习netty框架时,看到有人说netty用到了设计模式的职责链模式,学习一下职责链模式,主要参考大话设计模式. 主要场景: 小菜想要加薪,向经理提出加薪请求,经理没有权限,经理交由总监处理,总监也没 ...
- BZOJ4010: [HNOI2015]菜肴制作(拓扑排序 贪心)
题意 题目链接 Sol 震惊,HNOI竟出NOI原题 直接在反图上贪心一下. // luogu-judger-enable-o2 // luogu-judger-enable-o2 #include& ...
- 首页的css
html,body{ margin:; padding:; background-color: lavenderblush; } a{ color:darkgray; } li{ list-style ...
- android 调试卡在:Waiting for Debugger - Application XXX is waiting for the debugger to Attach" 解决方法
解决方法:重启adb. 步骤:cmd进入命令行,进入adb所在目录先后执行adb kill-server,adb start-server.
- Enumeration 接口的使用
Enumeration是一个接口,定义了两个规则,可以获取连续的数据,对数据结构非常重要. 接口源码: publicinterfaceEnumeration<E>{ ...
- Python tqdm show progress bar
tqdm can help to show a smart progress bar, and it is very easy to use, just wrap any iterable with ...
- MSSQL的SQL语句独立执行消耗与线上执行消耗差异
环境: SQL Server 2012 疑问:同样的一条语句,使用Profile跟踪出来的消耗与单独拿出来执行的消耗存在非常大的差距 语句如下: declare @str nvarchar(max) ...