uC/OS-II之入门与介绍20160525
说一下刚学习uCOS的心得
1)首先强调一下实时操作系统(RTOS)的特点,最明显的是提供及时响应和高可靠性
2)基于实施操作系统的应用程序设计中,其中很重要的一个概念是"任务",任务设计也就是任务函数的设计是整个整
个应用程序的基础,其他软件设计工作都是围绕来展开的
3)用户任务函数中,必须包含至少一次的系统服务函数(一般是等待类的函数以便其他函数有机会得以运行),否则优
先级更低的任务将无法得到运行的机会,中断服务程序不能调用该类函数即一些等待函数,防止中断服务程序被打断
4)任务函数分为三类:
单次执行,即执行一次就退出的任务。
周期性执行,即到一定时间就执行的任务,当没到时间时该任务休眠,以便CPU去执行其他的任务。
事件触发执行,即当特定的事件发生时就执行任务,当没有对应的事件发生时,该任务会休眠,CPU可以去执行其他任
务。
5)使用ucos-II时,要注意在Main函数中,加入两个初始化函数:OSInit(),OSStart()。OSInit()初始化ucosII中内部
变量,OSStart()函数启动多任务环境
6)OSTaskCreateExt,创建一个任务,第一个参数为函数指针,即创建好后,就执行该函数指针指向的函数体:
INT8U OSTaskCreateExt (void (*task)(void *pd), //建立扩展任务(任务代码指针,函数指针)
void *pdata, //传递参数指针
OS_STK *ptos, //分配任务堆栈栈顶指针
INT8U prio, //分配任务优先级
INT16U id, //(未来的)优先级标识(与优先级相同)
OS_STK *pbos, //分配任务堆栈栈底指针
INT32U stk_size, //指定堆栈的容量(检验用)
void *pext, //指向用户附加的数据域的指针
INT16U opt) //建立任务设定选项
例:OSTaskCreateExt(TaskRxProc,
NULL,
&TaskStkRxProc[128 - 1],
3,
3,
TaskStkRxProc,
TASK_STK_LEN_RX_PROC,
NULL,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);//Enable stack checking for the task|Clearthe stack when the task is create
其他相关的系统函数后续再讲诉
7)操作系统中的共享区也就是临界区,各个任务访问必须互斥,保证互斥的常见方法主要有:
第一,进入然后就退出临界区,第二,使用信号量与互斥信号量
另外,注意处理临界段代码需要禁止中断,处理完毕再允许中断,避免其他任务或者中断服务同时进入临界区
uCOS提供了两个宏来实现,其中
OS_ENTER_CRITICAL()进入临界区,禁止中断
OS_EXIT_CRITICAL() 退出临界区,允许中断
8)除了互斥外,资源同步也就是任务间的通信,主要的(同步)方式有:
信号量,事件标志组,消息邮箱,消息队列这几种方法
具体后续再介绍
uC/OS-II之入门与介绍20160525的更多相关文章
- 【小梅哥SOPC学习笔记】NIOS II处理器运行UC/OS II
SOPC开发流程之NIOS II 处理器运行 UC/OS II 这里以在芯航线FPGA学习套件的核心板上搭建 NIOS II 软核并运行 UCOS II操作系统为例介绍SOPC的开发流程. 第一步:建 ...
- uC/OS II原理分析及源码阅读(一)
uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和 ...
- 【原创】uC/OS II 任务切换原理
今天学习了uC/OS II的任务切换,知道要实现任务的切换,要将原先任务的寄存器压入任务堆栈,再将新任务中任务堆栈的寄存器内容弹出到CPU的寄存器,其中的CS.IP寄存器没有出栈和入栈指令,所以只能引 ...
- uC/OS II 函数说明 之–OSTaskCreate()与OSTaskCreateExt()
1. OSTaskCreate() OSTaskCreate()建立一个新任务,能够在多任务环境启动之前,或者执行任务中建立任务.注意,ISR中禁止建立任务,一个任务必须为无限循环结构. ...
- uc/os iii移植到STM32F4---IAR开发环境
也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...
- uc/os 任务删除
问题描述: uc/os 任务删除 问题解决: uc/os任务删除流程图 具体代码 注: 如上是关中断,以及取消优先级对应的就绪标志 关中断代码为: 取消就绪标志,实际上是将就绪表中指定 ...
- uc/os任务创建
问题描述: uc/os中任务创建 问题解决: 创建一个任务,任务从无到有.任务创建函数分两种, 一种是基本的创建函数OSTaskCreate, 另一种是扩展的任务创建函数OSTaskCrea ...
- uC/OS 的任务调度解析 (转)
uC/OS 的任务调度解析 1.任务调度器启动之后(初始化,主要是TCB的初始化),就可以创建任务,开始任务调度了,实际上第一个任务准确的说不是进行任务切换,而是进行启动当前最高优先级任务.uC/OS ...
- 关于uC/OS的简单学习(转)
1.微内核 与Linux的首要区别是,它是一个微内核,内核所实现的功能非常简单,主要包括: 一些通用函数,如TaskCreate(),OSMutexPend(),OSQPost()等. 中断处理函数, ...
随机推荐
- kubeadm构建k8s之Prometheus-operated监控(0.18.1)
介绍: 大家好,k8s的搭建有许多方式,也有许多快速部署的,为了简化部署的复杂度,官方也提供了开源的kubeadm快速部署,最新1.10.x版本已经可以实现部署集群, 如果你对k8s的原理已经非常了解 ...
- XSS留言板实现
XSS 留言板实现-笔记 预备知识 XSS漏洞 XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS ...
- UUID.randomUUID()简单介绍
UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OS ...
- ORM(object relational Maping)
ORM即对象关系映射,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中.本质上 ...
- Requests库与HTTP协议
了解HTTP协议 请求与响应模式的协议: 用户提出对URL(用来定位网络中的资源位置)地址数据的操作请求,服务器给予相应. 无状态的应用层协议:两次请求之间不会互相影响. HTTP协议支持的请求种类: ...
- 博弈---尼姆博奕(Nimm Game)(重点)
尼姆博奕(Nimm Game):有三堆各若干个物品,两个人轮流从某一堆取任意多的 物品,规定每次至少取一个,多者不限,最后取光者得胜. 这种情况最有意思,它与二进制有密切关系,我们用(a,b,c)表示 ...
- Navicat for mysql导入.sql数据库大小受限制
把导入单个表的最大限制调一下就行(在my.ini里面就算改了max_allowed_packet也不一定行,因为Navicat貌似并不调用,实际他有自己的一套默认配置,所以需要在Navicat上调整) ...
- lintcode-411-格雷编码
411-格雷编码 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个二进制的差异. 给定一个非负整数 n ,表示该代码中所有二进制的总数,请找出其格雷编码顺序.一个格雷编码顺序必须以 0 ...
- lintcode-401-排序矩阵中的从小到大第k个数
401-排序矩阵中的从小到大第k个数 在一个排序矩阵中找从小到大的第 k 个整数. 排序矩阵的定义为:每一行递增,每一列也递增. 样例 给出 k = 4 和一个排序矩阵: [ [1 ,5 ,7], [ ...
- Hibernate(九)
三套查询之SQL查询 Native Sql Query原生的sql查询.要求写sql语句.SQLQuery 是 Query的子类 1.查询所有的学生 //1.查询所有的学生 @Test public ...