uC/OS-III 学习笔记(一)——uC/OS-III移植

2023-05-16

uC/OS-III 学习笔记(一)

uC/OS-III移植


前言

  最近毕设要做一个嵌入式设备,需要用到操作系统。本人只会制板和写ARM裸机程序,OS方面是一个小白,只对uC/OS和Linux两种系统略有了解。鉴于嵌入式Linux学习周期较长,有可能在毕设结束之前都不能学到能够开发项目的地步。故选择uC/OS作为设备的操作系统。
  之所以选择uC/OS-III,是本着“要学就学最新”的想法来的。uC/OS-III相比II,加入了时间片轮转功能,能够允许定义相同优先级的任务。其好处balabalabala…好吧,我没仔细学过II,说不出来。估计以后就可以填这个大坑了。
  至于FreeRTOS等操作系统的比较——算了吧,我一个OS都不会用,没什么可比性,写出来也没人信。
  
废话到此为止,下面开始正文


uC/OS-III 的移植

  首先讲讲我的开发环境:STM32F103RET6 + KEIL5 + ST 3.5.0 库

  • STM32F103RET6:是Cortex-M3内核的芯片,有PendSV和Systick中断供操作系统使用。
  • Keil5:用来管理工程,当然也可以用IAR,个人感觉Keil5漂亮一点。
  • ST 3.5.0 库:之所以使用ST 3.5.0 的库,而不是现在流行的HAL库,主要原因是目前国内的比较完善的教程主要是针对ST 3.5.0库来写的,一点有个什么bug还可以有个参考。不过之后当我对uC有了较深入的认识后,肯定会想办法移植到HAL库上。

      移植比较简单,具体步骤如下:
      


1#下载源码

上Micrium官网下载源码https://www.micrium.com/(未墙,慢的可以上4G)
下载源码
用F107的做F103的移植没毛病。F103的只有uC/OS-II的工程。

下载源码需要注册,然而Micrium的官网经常出问题。如果无法注册也没有关系,可以从这里下载(度盘)。


2#找一个好的教程

网上随便搜搜都能找到如何移植的。这里我参考的是野火团队的《uCOS-III 应用开发指南——基于 STM32F103系列》,该书及配套文档在STM32&STM8社区技术论坛上就有这里。注册个账号即可下载。(什么?你懒得注册?那么这里好了)

该书讲解的比较全面,不仅讲解了如何移植,还通过阅读源码的方式,讲解了uC/OS-III的各个机制,且每一部分都有相应的例程帮助读者巩固理解。但不是很通俗易懂,且关于Cortex-M3的一些内核机制,包括PendSV、Systick、双堆栈等没有进行说明,也没有对操作系统做一个入门级的解说。这对于从来没有接触过OS的小伙伴可能有点困难。

这里建议初学者先仔细看一下这两篇文档:《初探uCOS-II》、《uCOS-II 移植与深入实战指南》,照着做一遍,先大致了解一下uCOS-II的工作原理。其中第二本书要求读者阅读一下《CM3权威指南》。这里我都有。

(uCOS-II那本书用的工程文件跟uCOS-III的不一样,其实也只是BSP的接口函数不一样啦,改一改就行。当然不放心的同学可以下这个uCOS-II对应的工程)

除了野火的书外,还有一本叫《STM32F4 UCOS开发手册V2.1》的书,书里的内容是是针对STM32F4系列,是战舰系列的配套教程(有一本F1的,但实际内容是F4的)。这本书讲的就比较通俗易懂,里面从uC/OS-II、讲到M3/M4内核机制,再讲到uC/OS-III的内容,图文并茂,讲的比较生动。个人建议手头已经有STM32F407开发板的同学,可以直接按照此教程来学习。但如果各位和我一样只有F103板子的话,还是看野火的书吧,这本书完全可以当个参考,毕竟没必要花那个冤枉钱。

本人也是按照野火的书一步步学的,从这里开始就写一下我对该书的理解好了,因为书已经讲得很细了嘛


3#移植

移植就按照教程一步步来就好了。个人认为最重要的是修改SysTick和PendSV的中断处理函数入口名称。该向量定义在启动文件stm32f10x_hd.s中,共两处:

DCD     PendSV_Handler             ; PendSV Handler
DCD     SysTick_Handler            ; SysTick Handler
PendSV_Handler  PROC
                EXPORT  PendSV_Handler             [WEAK]
                B       .
                ENDP
SysTick_Handler PROC
                EXPORT  SysTick_Handler            [WEAK]
                B       .
                ENDP

uC/OS给的官方例程中,这两个中断函数入口名称分别为:OS_CPU_PendSVHandler和OS_CPU_SysTickHandler,跟Keil给出的启动文件不一样。这里需要修改启动文件中这两处名称,让其能够与uC的源码正确的连接起来。

之所以特地把这里拎出来,是因为这两个中断至关重要。至于为什么重要,去好好看看这张图吧:
Cortex-M3上下文切换
这张图的讲解在《uCOS-II 移植与深入实战指南》和《CM3权威指南》中,请务必把这张图搞清楚,不然真是学的一脸阿库娅。


4#编译与下载

ST-Link不能下载怎么办:
我的一篇文章有讲。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uC/OS-III 学习笔记(一)——uC/OS-III移植 的相关文章

  • 遨博协作机器人ROS开发 - Gazebo仿真与控制真实机器人

    目录 一 简介 二 环境版本 三 Gazebo仿真 1 gazebo使用 2 仿真遨博机械臂 四 ROS控制真实机器人 1 网络配置 2 真实机器人控制 3 真实机器人运动速度调节 五 小结 一 简介 大家好 xff0c 欢迎关注遨博学院带
  • 我的2014

    时间匆匆如流水 xff0c 生活总是不停的翻写新的篇章 我的2014同样缺少不了 毕业两年了 xff0c 工作也比较轻松 xff0c 无趣 同事们的话 xff1a 坐等OVER 在清闲的工作中 xff0c 失去了往日的 冲动 感觉自己也一点
  • C语言基础----流程控制

    流程控制是C语言中比较基础的 它分为三种状态 xff1a 1是顺序结构 2是选择结构 3是循环结构 我要说明后两种结构 xff0c 选择机构和循环结构 首先先说 xff1a 选择结构 选择结构是指 xff1a 当一个条件成立则执 xff08
  • 复杂数据类型——数组

    复杂数据类型是C语言基础的重点 1 数组 xff1a 存储一组数据 2 特点 xff1a 只能存放一种类型的数据 如int类型 xff0c float类型的数据 数组的元素个数只可以放常量 int ages 5 61 1 2 3 格式 xf
  • OC语言——基本语法和思想

    今天学习了OC语言基础语法 1 oc语言完全兼容C语言 xff0c 后缀为 m类型 被广泛应运与开发苹果mac os x平台和ios开发平台 2 oc语言关键字基本上以 64 开头 xff0c oc字符串也是以 64 开头 3 基本类型新加
  • OC语言——三大特性-继承与多态

    继承是oc中比较常见的 1 继承 xff1a 就是当两个类拥有相同的属性和方法时 xff0c 就可以将相同的东西抽取到一个父类中 子类可以拥有父类中所有的成员变量和方法 2 继承的好处 xff1a 可以抽取重复代码 xff0c 节省时间 建
  • OC语言——点语法和成员变量的4种作用域及property和synthesize的使用

    点语法 xff1a 点语法的本质还是方法调用 Person p 61 Person new 点语法的本质还是方法调用 p age 61 10 p setAge 10 一 点语法注意点 xff1a 64 implementation Pers
  • OC语言——构造方法和分类的使用

    一 构造方法 1调用 43 alloc分配存储空间 Person p 61 Person alloc 2初始化 init Person p1 61 p init 可以整合为一句 Person p2 61 Person alloc init
  • 使用CSDN-markdown

    欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来 xff0c 用它写博客 xff0c 将会带来全新的体验哦 xff1a Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传
  • C++ 遇到问题汇总及解决方案

    1 多个文件包含main函数 xff0c 运行时报错 xff08 1 xff09 错误信息 LNK1169 找到一个或多个多重定义的符号 xff0c 如下图所示 xff1a xff08 2 xff09 原因 多个文件中都包含main函数 x
  • 【笔试&面试】关于动态链接库

    动态链接库英文为DLL xff0c 是Dynamic Link Library 的缩写形式 xff0c DLL 是一个包含可由多个程序同时使用的代码和数据的库 xff0c DLL 不是可执行文件 动态链接提供了一种方法 xff0c 使进程可
  • 遨博协作机器人ROS开发 - MoveGroup Python接口编程

    目录 一 简介 二 环境版本 三 学习目标 四 知识储备 五 任务实施 六 任务拓展 七 课堂小结 八 课后练习 一 简介 大家好 xff0c 欢迎关注遨博学院带来的系列技术分享文章 xff08 协作机器人ROS开发 xff09 xff0c
  • 【CNN】ZFNet——让卷积神经网络不再是一个黑盒模型。

    前言 ZFNet在2013年 ILSVRC 图像分类竞赛获得冠军 xff0c 错误率11 19 xff0c 比2012年的AlexNet降低了5 xff0c ZFNet是由 Matthew D Zeiler 和 Rob Fergus 在 A
  • RealsenseD415/D435深度相机常用资料汇总

    Intel的RealsenseD400系列是2018年初推出的新款深度相机 xff0c 包括RealsenseD415和D435系列 xff0c 这两款相机具有小巧的外形 xff0c 适用于近距离深度图像采集 xff0c 具有较高的图像分辨
  • Gazebo环境下使用turtlebot建立环境octomap地图

    octomap是一种空间概率地图 xff0c 可以使用方格来表示周围的环境 xff0c 就像 我的世界 游戏里表示的那样 xff0c 优点是地图计算速度快 xff0c 内存占用少 xff0c 可以调整地图的分辨率等等 xff0c 与平面二维
  • cache、buffer、flash的区别

    cache xff08 缓存 xff09 buffer xff08 缓冲 xff09 flash xff08 闪存 xff09 这三个存储区翻译成中文后 xff0c 很容易使初学者分不清3者的区别 xff0c 猛然一听这三者好像都有存储很快
  • Linux systemd启动流程

    以Ubuntu 18 04 2 LTS为例 xff0c 列出Systemd启动target中涉及单元 Unit default target 61 graphical target by default graphical target R
  • 封装制作的一些注意事项

    1 插件封装 xff0c 有些固定用的非金属化孔 xff0c 需要额外加禁布线区 xff0c 直径比钻孔大12mil以上 xff0c 禁布线区加在Package Keepout层 xff1b 2 金属化孔的阻焊层 xff0c 直径要比焊盘大
  • 虚函数表的实现细节

    1 虚函数 虚表是怎么实现的 xff1f 虚表存放在哪里 xff1f 虚表中的数据是在什么时候确定的 xff1f 对象中的虚表指针又在什么时候赋值的 xff1f 我们很难通过 C 43 43 语言本身来找到答案 C 43 43 标准给编译器
  • 三种工厂模式区别总结

    工厂模式分为三种 xff1a 简单工厂 工厂模式和抽象工厂模式 三者之间存在哪些异同呢 xff1f 先分别看看各个模式的特点 一 简单工厂模式 xff1a 实现了算法和界面的分离 xff0c 也就是将业务逻辑和界面逻辑分开了 xff0c 降

随机推荐

  • 快速排序 改进快排的方法

    快速排序法事应用最广泛的排序算法之一 xff0c 最佳情况下时间复杂度是 O nlogn 但是 最坏情况下可能达到 O n 2 说明快速排序达到最坏情况的原因 并提出改善方案并实现 之 答 xff1a 改进方案 xff1a 改进选取枢轴的方
  • linux select函数详解

    在 Linux 中 xff0c 我们可以使用 select 函数实现 I O 端口的复用 xff0c 传递给 select 函数的参数会告诉内核 xff1a 我们所关心的文件描述符 对每个描述符 xff0c 我们所关心的状态 我们是要想从一
  • 遨博协作机器人ROS开发 - Intel RealSense深度相机ROS驱动

    目录 一 简介 二 环境版本 三 学习目标 四 知识储备 五 任务实施 六 任务拓展 七 课堂小结 八 课后练习 一 简介 大家好 xff0c 欢迎关注遨博学院带来的系列技术分享文章 xff08 协作机器人ROS开发 xff09 xff0c
  • Linux epoll详解

    Linux epoll详解 一 什么是epoll epoll是什么 xff1f 按照man手册的说法 xff1a 是为处理大批量句柄而作了改进的poll 当然 xff0c 这不是2 6内核才有的 xff0c 它是在2 5 44内核中被引进的
  • 转折后的总结--2014年找工作

    转折后的总结 找工作 好吧 xff0c 还是忍不住做个总结 xff0c 毕竟还是我人生中一次比较大的事件了 非常感谢华科 xff0c 我的第二个母校能提供给我一个优秀的平台 非常感谢信息安全与保密实验室607室的老师们 xff0c 给我诸多
  • 2014找工作总结-机会往往留给有准备的人

    好基友的文章必须转 xff0c 大神一枚 xff1a 出处 xff1a http blog csdn net xiajun07061225 article details 12844801 其实我的求职过程在十一之前就已经结束了 xff0c
  • 2014找工作----扎实的基础和开阔的视野是企业最看重的因素

    其实找工作之前一直很忐忑 xff0c 或者说不是很自信 xff0c 因为各种传言说 14 年就业难 实验室的项目逼的有些紧 xff0c 在四川做项目 xff0c 腾讯实习面试都错过了 4 月底回到学校给实验室申请不去实验室 xff0c 准备
  • 入职后的书单

    程序员一生的命运就是不停的学习 xff0c 淬炼自己的技术 xff0c 转化为自己的经验 作为新手 xff0c 首先要读的应该是 xff1a 代码整洁之道 1 JAVA核心技术 xff08 卷1 xff09 作者 Cay S Horstma
  • 国内第一本详解云GIS技术的参考书籍《云GIS技术与实践》

    书籍封面 内容简介 云计算技术从概念提出到项目落地已经经历了十余年了 xff0c GIS技术也紧跟IT主流技术大潮 xff0c 通过日趋成熟的云计算技术来解决GIS面临的诸多问题 一转眼 xff0c 云GIS技术也发展了五个年头了 xff0
  • 英特尔CPU命名详解:32个后缀名、8个系列,如12700F等

    英特尔家族的CPU总共有8个 系列 xff0c 分别是至强 Xeon 至强融核 Xeon Phi 酷睿 Core 奔腾 Pentium 赛扬 Celeron 凌动 Atom 安腾 itanium Quark SoC Intel Core i
  • C++:Boost库

    介绍 Boost是一个功能强大 构造精良 跨越平台 代码开源 完全免费的C 43 43 程序库 共包含160余个库 组件 涵盖字符串与文本处理 容器 迭代器 算法 图像处理 模板元编程 并发编程等多个领域 由c 43 43 标准委员会成员发
  • 纯干货!Docker Dockerfile指令大全

    什么是 Dockerfile xff1f Dockerfile 是一个用来构建镜像的文本文件 xff0c 文本内容包含了一条条构建镜像所需的指令和说明 使用docker build命令 xff0c 用户可以创建基于基础镜像的自定义镜像 Do
  • Linux必学书籍!五本强烈推荐,你读过几本?

    深入理解Linux内核 推荐等级 xff1a 5颗星 为了透彻理解Linux的工作机理 xff0c 以及为何它在各种系统上能顺畅运行 xff0c 你需要深入到内核的心脏 cPu与外部世界的所有交互活动都是由内核处理的 xff0c 哪些程序会
  • 嵌入式移植代码优化

    转自 xff1a 算法的嵌入式移植 xff08 一 xff09 C代码优化 Deep Studio 一般C C 43 43 的算法代码不适合直接移植到嵌入式设备 xff0c 需要做一些优化和处理 一方面是出于速度考虑 xff0c 另一方面是
  • Linux后台服务器开发学习路线2019完整版(附视频教程+网盘下载地址)

    下面专门为广大Linux后台学习开发者汇总了一条完整的自学线路 xff1a Linux学习路线2019完整版 xff08 附视频教程 43 网盘下载地址 xff09 适合正在Linux后台方向或者想转Linux后台开发方向的学习者 xff0
  • 如何快速学习音视频开发?

    总体来讲 xff0c 音视频开发是有一定的技术门槛的 xff0c 我觉得至少需要在这个领域踏踏实实积累个3 5年 xff0c 才能对音视频相关的开发知识有一个整体 深刻的理解 从技术上来讲 xff0c 需要从如下两个大类知识点上去积累 xf
  • 阿里面试整个流程(已OC)

    2022年秋招 春招 提前批 大厂面经整理 xff08 持续更新中 xff09 阿里面试整个流程 xff08 已OC xff09 4 15 投递了阿里巴巴C 43 43 实习岗位 4 19 进行了笔试 xff0c 总共两题 xff0c 分别
  • 零声教育的linux C C++后台服务开发成长体系

    后台架构师的知识学习导图分享给大家看看 对应学习 大家可以一起学习 共同进步 免费学习地址 xff1a C C 43 43 Linux服务器开发 后台架构师 资料 xff1a
  • 一个设计低通巴特沃斯数字滤波器的实例

    本人本科渣渣一个 xff0c 前两天导师让我设计一个数字滤波器 由于本人基本没有数字信号处理基础 xff0c 于是只能依靠百度和matlab xff0c 折腾了半天总算是摸索明白了 百度上有一些文章不靠谱 xff0c 很容易误导别人 xff
  • uC/OS-III 学习笔记(一)——uC/OS-III移植

    uC OS III 学习笔记 xff08 一 xff09 uC OS III移植 前言 最近毕设要做一个嵌入式设备 xff0c 需要用到操作系统 本人只会制板和写ARM裸机程序 xff0c OS方面是一个小白 xff0c 只对uC OS和L