UCOSII之项目实战总结

2023-05-16

电子IT行业博大精深,没有人能够用笔记本天天记录自己所学的知识,于是乎,撰写博客就成了每个“IT民工”的专长。再者,写一篇博客,其意义与不但记录了自己所需的知识,更提高了自己对知识的理解程度,而且还可以将自己的经验与别人分享。
    进入了汽车行业,当然就不能用以前的老掉牙的写程序的思路了---跑裸机。目前自己尚且只熟悉UCOSII这个操作系统,于是就选择这个系统作为自己的代码组织框架系统(后面再去学习LINUX,目前再弄上位机)。
    首先,我们对UCOS做一个简介。 
     UCOSII 的前身是 UCOS,最早出自于 1992 年美国嵌入式系统专家 Jean J.Labrosse 在《嵌 入式系统编程》杂志的 5 月和 6 月刊上刊登的文章连载,并把 UCOS 的源码发布在该杂志的 BBS 上。目前最新的版本: UCOSIII 已经出来,但是现在使用最为广的还是 UCOSII,本 我们主要针对 UCOSII 进行介绍。在学习本章之前, UOCS 相关的知识比较多,我们实验也知 识指点一下大家入门,详细了解建议大家先看看任哲老师的《嵌入式实时操作系统 ucosII 原理 及应用》,这本书的 Pdf 我们光盘有,大家可以翻阅一下。同时我们光盘还提供了一个北航老 师的 UCOS 简明讲义,大家也可以翻阅一下。
UCOSII 是一个可以基于 ROM 运行的、可裁减的、抢占式、实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和很多商业操作系统性能相当的实时操作系统(RTOS)。为了提供最好的移植性能, UCOSII 最大程度上使用 ANSI C 语言进行开发,并且已经移植到近 40 多种处理器体系上,涵盖了从 8 位到 64 位各种 CPU(包括 DSP)。
UCOSII 是专门为计算机的嵌入式应用设计的, 绝大部分代码是用 C 语言编写的。 CPU 硬件相关部分是用汇编语言编写的、总量约 200 行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的 CPU 上。用户只要有标准的 ANSI 的 C 交叉编译器,有汇编器、连接器等软件工具,就可以将 UCOSII 嵌人到开发的产品中。 UCOSII 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点, 最小内核可编译至 2KB 。 UCOSII 已经移植到了几乎所有知名的 CPU 上。UCOSII 构思巧妙。结构简洁精练,可读性强,同时又具备了实时操作系统的全部功能,虽然它只是一个内核,但非常适合初次接触嵌入式实时操作系统的友,可以说是麻雀虽小,五脏俱全。

     其实,使用UCOS最重要的还是了解信号量,信号量集,邮箱,消息队列等的用法。在这里我主要以自己的理解来说明这个相关函数的用法。
 
1.信号量:用于
从一个任务向另一个任务传递 一个开关量的BOOL信号。
   
 创建信号量指针: OS_EVENT *OS SemFlag。
    创建信号量函数: OS_EVENT *OSSemCreate (INT16U cnt)。
    发送信号量函数:
INT8U OSSemPost(OS_EVENT *pevent)。
    请求信号量函数: void OSSemPend( OS_EVENT *pevent, INT16U timeout, INT8U *err);其中需要注意的是Timeout,这个参数为0的时候表示无限等待,大于0就为表示演示多少个时钟节拍。
   删除信号量好函数:
OS_EVENT *OSSemDel (OS_EVENT *pevent,INT8U opt, INT8U *err)。
2.邮箱 :用于从一个任务向另一个任务传递一个字节的数据。
    创建邮箱指针: OS_EVENT *OS Mbox;
    创建邮箱函数: OSMboxPost (OS_EVENT *pevent,void *msg)
    请求邮箱 函数: void *OSMboxPend (OS_EVENT *pevent, INT16U timeout,INT8U *err) 其中需要注意的是Timeout,这个参数为0的时候表示无限等待,大于0就为表示演示多少个时钟节拍。
    查询邮箱状态
函数 OSMboxQuery(OS_EVENT *pevent,OS_MBOX_DATA *pdata)  。
    删除邮箱 函数 OS_EVENT *OSMboxDel(OS_EVENT *pevent,INT8U opt,INT8U *err)。
 3.信号量集: 用于 从一个任务向另一个任务传递 最多32个开关量的BOOL信号集。
     创建信号量集指针: OS_FLAG_GRP  * OutEnableCfgFlag。
    创建信号量 函数: OS_FLAG_GRP *OSFlagCreate (OS_FLAGS flags,INT8U *err )
    发送信号量 函数: OS_FLAGS OSFlagPost (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U opt, INT8U *err)
    请求信号量 函数: OS_FLAGS OSFlagPend(OS_FLAG_GRP*pgrp, OS_FLAGS flags, INT8U wait_type, INT16U timeout, INT8U *err)。 注意:为了防止请求失效,一般使用 OS_FLAGS +OS_FLAG_CONSUME的组合。
    查询信号量状态函数: OS_FLAG_GRP  * OSFlagQuery( OS_FLAG_GRP *pgrp, INT8U *err   ),我们可以使用这个函数来不断查询这个信号量集的状态来做一些开关量的控制。
    删除信号量 函数: OS_EVENT *OSFlagDel ( OS_FLAG_GRP *pgrp, INT8U *err   )
4.消息队列:用于从一个任务向另一个任务传递多个字节的数据。
     
创建消息队列指针: OS_EVENT *  MainMenuUI; 
     创建消息队列存储数组:void * MsgGrp[16];
     
创建消息队列 函数: OS_EVENT *OSQCreate(void**start,INT16U size)
      请求消息队列 函数: void*OSQPend(OS_EVENT*pevent,INT16U timeout,INT8U *err)
     查询消息队列函数: 
INT8U    OSQQuery( OS_EVENT*pevent,OS_Q_DATA *pdata ).
     发送消息队列 函数 INT8U OSQPost(OS_EVENT *pevent,void *msg)和 INT8U OSQPost(OS_EVENT*pevent,void*msg)。
     清空消息队列函数: 
INT8U   OSQFlush( OS_EVENT *pevent )。     
     删除消息队列 函数 OS_EVENT *OSQDel( OS_EVENT *pevent )。
5.软件定时器:用于产生非硬件的定时器中断,可以用计时。
    创建软件定时器指针:OS_TMR   * ADCheckTime;
    创建软件定时器函数:
OS_TMR *OSTmrCreateINT32U dly, INT32U period, INT8U opt, OS_TMR_CALLBACK callback,void
*callback_arg, INT8U *pname, INT8U *perr)。
    打开软件定时器函数:
BOOLEAN  OSTmrStart (OS_TMR *ptmr, INT8U *perr)。
    关闭软件定时器函数:
BOOLEAN  OSTmrStop (OS_TMR *ptmr,INT8U opt,void *callback_arg,INT8U *perr)。
    于是,我们就可以利用这些UCOSII独有的功能来分配系统的任务了,如下图所示:
 
 好了,今天Realy就记录到这里了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UCOSII之项目实战总结 的相关文章

  • UCOSII中的任务切换原理介绍

    1 多任务的引入 之所以引入多任务 xff0c 主要在于提高程序运行的效率 多任务的过程 xff0c 能够有效地发挥交换式任务的运作效率 类似的 xff0c 由于一个任务里面也有瓶颈的地方 xff0c 为了把瓶颈的地方抠出来 xff0c 让
  • UCOSII学习---五、任务通信之信号量

    一 xff1a 信号量的理解 xff1a 信号量的本质是数据操作锁 xff0c 它本身不具有数据交换的功能 xff0c 而是通过控制其他的通信资源 xff08 文件 xff0c 外部设备 xff09 来实现进程间通信 xff0c 它本身只是
  • stm32 ucosii消息队列 串口_UC/OSII消息队列、信号量集和软件定时器

    UCOSII消息队列 信号量集和软件定时器简介 上一章 xff0c 我们介绍了信号量和邮箱的使用 xff0c 本章我们介绍比较复杂消息队列 信号量集以及软件定时器的使用 消息队列 使用消息队列可以在任务之间传递多条消息 消息队列由三个部分组
  • ucosii使用

    当需要同时跑多个任务的时候裸机显然不能很好的完成使命 xff0c 这个时候我们可以给单片机上系统 xff0c 创建多任务 xff0c 完成复杂逻辑 一 首先移植uocii在我们的板上 xff0c 根据mcu型号移植ucosii xff0c
  • UCOSII-消息邮箱与消息队列

    文章目录 一 事件控制块及事件处理函数1 等待任务列表2 事件控制块的结构3 操作事件控制块的函数4 空事件控制块列表 二 消息邮箱1 消息邮箱介绍2 消息邮箱操作步骤 三 消息队列1 消息指针数组2 队列控制块3 消息队列的操作流程 四
  • STM32上使用UCOSII--消息队列和信号量集

    有关UCOS任务的介绍 xff1a STM32上使用UCOSII 任务 有关UCOS信号量和邮箱的介绍 xff1a STM32上使用UCOSII 信号量和邮箱 一 消息队列 使用消息队列可以在任务之间传递多条消息 消息队列由三个部分组成 x
  • ucosii消息队列学习

    近期在学习ucosii的内容使用的平台为STM32F103C8T6最小系统板 今日关于消息队列的使用遇到了一些问题 基本情况 xff1a 移植代码为正点原子ucosiii消息队列 信号量集和软件定时器例程 主要新建两个任务post task
  • UCOSII 消息队列、信号量集、软件定时器

    1 消息队列 xff1a 作用 xff1a 在任务之间传递多条信息 组成 xff1a 事件控制块 消息队列 消息 消息队列数据结构 队列控制块的结构定义 xff1a typedef struct os q struct os q OSQPt
  • rtthrea-ucosii-freertos三系统学习总结

    三系统基本功能对比 RT thread ucosii freertos 任务调度 抢占式 时间片式 xff08 多级队列位图调度 xff09 抢占式 xff08 纯位图调度 xff09 抢占式 时间片式 xff08 遍历列表调度 xff09
  • UCOSii中的信号量

    任务间简单通个信 xff0c A告诉B你LED亮一下 这种问题可以用信号量来处理 xff0c UCOSii中关于信号量的函数也就八个 xff0c 今天简单总结下 函数列表 CREATE A SEMAPHORE Description Thi
  • 基于UCOSII的RS485通信(STM32F107)

    一 实现效果 基于ucosii实时操作系统的RS485通信 xff0c 采用USART 43 DMA进行收发 xff0c 二 开发环境 开发工具 xff1a KEIL V5开发板 STM32f107RC采用方式 xff1a USART 43
  • UCOSII 使用笔记

    UCOS使用总结 1 UCOS 是抢占式系统 xff0c 换句话来说 xff0c 优先级高的能够被准时执行 xff0c 优先级低的很容易被高优先级抢占 xff0c 导致执行任务延迟 2 UCOS一般为64个优先级 xff0c 有些可以到25
  • 从零开始学习UCOSII操作系统4--任务管理

    从零开始学习UCOSII操作系统4 任务管理 1 重讲任务 1 任务可以是一个无限的循环 xff0c 也可以在一次执行完毕后被删除 这里需要注意的是 xff0c 任务的代码并不是真正的删除了 xff0c 而是UCOSII不再理会该任务代码
  • 从零开始学习UCOSII操作系统7--信号量

    从零开始学习UCOSII操作系统7 信号量 参考博客 xff1a 64 http blog csdn net gatiemehttps blog csdn net gatieme article details 21071379 前言 xf
  • ucosII 信号量使用总结(举例讲解)

    概述 信号量用于 xff1a 1 控制共享资源的使用权 xff08 满足互斥条件 xff09 2 标志某时间的发生 3 使2个任务的行为同步 OSSemCreate 赋初值 OSSemCreate INT16U cnt xff0c cnt为
  • UCOSII之项目实战总结

    电子IT行业博大精深 xff0c 没有人能够用笔记本天天记录自己所学的知识 xff0c 于是乎 xff0c 撰写博客就成了每个 IT民工 的专长 再者 xff0c 写一篇博客 xff0c 其意义与不但记录了自己所需的知识 xff0c 更提高
  • 再读 ucosII源码(邵贝贝):任务之间的通讯与同步--邮箱

    邮箱简介 xff1a 邮箱是 C OS II中另一种通讯机制 xff0c 它可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量 该指针指向一个包含了特定 消息 的数据结构 为了在 C OS II中使用邮箱 xff0c 必须将O
  • UCOSII 信号量和信号量集实例

    代码来自于书本光盘 嵌入式操作系统UCOSII原理及应用 实例1信号量 include 34 includes h 34 define TASK STK SIZE 512 任务堆栈长度 OS STK StartTaskStk TASK ST
  • UCOSII里面为什么调用OS_ENTER_CRITICAL()或OS_EXIT_CRITICAL()会出错,出错信息为:undeclared identifier `cpu_sr‘

    可以观察到OSTickISR Init 函数内部调用了OS ENTER CRITICAL 和OS EXIT CRITICAL 并且 1 该OSTickISR Init 函数所在的 C文件包含了includes h文件 include inc
  • os_mutex.c(全)

    无等待地获取互斥型信号量 OSMutexAccept OS EVENT pevent INT8U perr 创建互斥型信号量OS EVENT OSMutexCreate INT8U prio INT8U perr 删除信号量OS EVENT

随机推荐

  • 利用反射 Mirror 快速的获取/打印枚举值

    在 Swift 中 xff0c 枚举是一等类型 xff0c 可以给其添加计算属性 xff0c 实例方法 xff0c 构造函数 xff0c 遵循协议 xff0c 另外 xff0c 还可以定义枚举来存储任意类型的关联值 这些特性可以让枚举适用于
  • linux 应用层编程之内核链表list的使用

    linux内核提供了一个经典通用的双向循环链表list的实现 xff0c 任何模块都可以借助该接口实现自己的内部循环链表 因为是通用的 xff0c 可以直接移植到用户态中使用 xff0c 下面介绍相关的接口与一个简单操作例子 xff0c 包
  • EFR32修改开发板VCOM串口波特率的方法

    Silabs官方开发板上的Jlink CDC串口 xff08 VCOM xff09 默认的波特率是115200 xff0c 在普通的终端软件 xff08 如 串口调试助手 xff09 里设置别的波特率是不起作用的 要让它支持其他的波特率 x
  • 用 Latex 生成英文论文中的 算法步骤/伪代码 并插入 word 中

    准备工作 xff1a 1 先安装 CTEX https mirrors tuna tsinghua edu cn ctex legacy 2 9 2 下载 algorithm2e 包 xff08 里面有详细的使用说明文档 xff09 htt
  • Docker 大势已去,Podman 万岁

    前言 郑重声明 xff1a 本文不是 Podman 的入门篇 xff0c 入门请阅读这篇文章 xff1a 再见 Docker xff0c 是时候拥抱下一代容器工具了 Podman 原来是 CRI O 项目的一部分 xff0c 后来被分离成一
  • 生产者消费者问题--练习题目

    10 os考研题目 改题目中p0 xff0c p1两个进程可以互斥的进入临界区 xff0c 会出现饥饿现象 xff08 答案给的是D xff0c 但是自我认为可以出现饥饿现象 xff09 互斥的访问 xff1a p0 Flag 0 61 T
  • PromQL的简单使用

    PromQL的简单使用 一 背景二 PromQL的数据类型三 字面量1 字符串字面量2 浮点数字面量 四 时间序列选择器1 即时向量选择器1 组成部分2 指标名称和匹配器的组合3 匹配器 2 区间向量选择器1 时间格式 3 偏移量修改器 五
  • 一步一步在平衡车上实现卡尔曼滤波

    这是一个翻译版本 xff0c 其中的一些公式 xff0c 符号太多 xff0c 我就不一个一个去上传 xff0c 大家可以参考下面网址去对照着看 A practical approach to Kalman filter and how t
  • 浮点数的二进制表示(IEEE 754标准)

    浮点数是我们在程序里常用的数据类型 xff0c 它在内存中到底是怎么样的形式存在 xff0c 是我了解之前是觉得好神奇 xff0c 以此记录 xff0c 作为学习笔记 现代计算机中 xff0c 一般都以IEEE 754标准存储浮点数 xff
  • vscode如何打开settings.json

    解决方案步骤 xff1a 打开vscode编辑器 xff0c 本文演示的vscode是英文版 点击左下角齿轮状的图标 在弹出的菜单中选择 Settings Settings点击后 xff0c 会出现一个设置窗口 在Settings窗口中点击
  • Failed to execute ‘createObjectURL‘ on ‘URL‘ Overload resolution failed

    vue使用二进制流下载文件 xff0c 使用 link href 61 window URL createObjectURL blob 报错 xff1a Failed to execute createObjectURL on URL Ov
  • openwrt安装docker并启动

    在软件包中下载docker和dockerd 也可以自行下载ipk文件安装 安装成功后启动xshell连上openwrt 执行 etc init d dockerd 启动docker的daemon服务 若要dockerd自启动则执行 ln s
  • Mysql环境变量配置

    一 mysql的环境变量配置步骤 1 1 在桌面选择 计算机 的图标 xff0c 右键 gt 属性 gt 点击 高级系统设置 gt 点击 环境变量 2 2 新建MYSQL HOME变量 xff0c 并将值设置为C Program Files
  • MySQL安装配置教程(超级详细)

    一 下载MySQL Mysql官网下载地址 xff1a MySQL Download MySQL Installer Archived Versions 1 选择要安装的版本 xff0c 本篇文章选择的是5 7 31版本 xff0c 点击D
  • mysql字符切割的四种方式

    1 从左开始截取字符串 left xff08 str length xff09 说明 xff1a left xff08 被截取字段 xff0c 截取长度 xff09 select left 39 如果暴力不是为了杀戮 xff0c 那将变得毫
  • Podman 使用指南

    原文链接 xff1a Podman 使用指南 Podman 原来是 CRI O 项目的一部分 xff0c 后来被分离成一个单独的项目叫 libpod Podman 的使用体验和 Docker 类似 xff0c 不同的是 Podman 没有
  • ClickHouse查询语句详解

    ClickHouse查询语句兼容大部分SQL语法 xff0c 并且进行了更加丰富的扩展 xff0c 查询语句模板如下 xff1a WITH expr list subquery SELECT DISTINCT ON column1 colu
  • Mysql和Redis如何保证数据一致性

    文章目录 前言一 先更新数据库 xff0c 再更新redis二 先更新redis xff0c 在更新数据库三 先更新数据库 xff0c 再删除redis四 先删除redis xff0c 再更新数据库总结 前言 如何保证数据库和缓存双写一致
  • SQL——左连接(Left join)、右连接(Right join)、内连接(Inner join)

    文章目录 前言 一 概念 二 例子 总结 前言 最近在做SQL相关的练习 发现以前那么自信的SQL放久了不碰也变得棘手起来 特别是这一块表之间的内外连接 所以这篇是关于这个内外连接的整理 一 概念 首先还是介绍一下这三个的定义 1 Left
  • UCOSII之项目实战总结

    电子IT行业博大精深 xff0c 没有人能够用笔记本天天记录自己所学的知识 xff0c 于是乎 xff0c 撰写博客就成了每个 IT民工 的专长 再者 xff0c 写一篇博客 xff0c 其意义与不但记录了自己所需的知识 xff0c 更提高