原创: 鱼鹰Osprey  鱼鹰谈单片机 3月2日

预计阅读时间: 4 分钟

对于想入门操作系统的读者,我的建议是先学 uCOS II。原因有以下几点:

1、最为重要的原因是网上相关资源非常丰富,这对于初学者来说非常重要。

2、代码写的很经典,非常规范,能从中学到非常多知识,对于想 C 语言进阶的同学来说,是非常值得学习的一份代码。

3、听说代码优化级别高的情况下不会出现问题。

当然不建议商用,因为这涉及到版权问题。

操作系统涉及内容较多,有扎实基础的话,一个月时间足够掌握 u/COSII ,但是要熟练掌握的话需要不少项目经验积累。建议学习操作系统时学习u/COS II 作为入门操作系统,当完全能驾驭 u/COS II 时,其他操作系统学习起来应该就简单了。

学习 u/COS II 操作系统时不建议马上看源码,不然很打击学习兴趣的。而是阅读操作系统运用方面的相关文章,对操作系统有一个大概认识,不建议钻研细节问题,比如它是如何关中断的,是怎么进行任务切换的,又是怎么进行系统延时的。这些细节问题是后期学习的事情,前期就是把握整体流程,知道有这么回事就可以了,我们需要建立一个整体学习框架,里面的细节填充实现就靠后期完成。(推荐《周慈航-基于嵌入式实时操作系统的程序设计技术》)

当有一定概念之后,就可以开始阅读代码了,从系统初始化、新建任务、系统开始三个函数开始入手。这里面又会涉及大量的指针、结构体,其中又会涉及单向链表、双向链表知识。这些知识慢慢掌握就可以。u/COS II 部分对涉及到的难点知识基本做了解释,比如就绪表、任务控制块、时间控制块等知识做了比较透彻的解释,需要掌握每一个知识点。在这个阶段主要是学习C 源代码,汇编代码部分建议跳过,不去看具体实现(在这个阶段你应该有疑惑,为什么一条简单的C 代码需要先关中断再开中断这么麻烦)。(推荐阅读本篇和系统源码,钟常慰翻译的中文源码)

当把 C 源代码了解完成后,应该除了汇编部分,大体的实现细节应该掌握了,这时就可以看汇编知识了。这个就需要对我们的单片机熟悉了。在这里的移植对象是 STM32,或者说 Cortex-M3,所以需要对 Cortex-M3 熟悉,首先需要了解的就是任务切换的实现,然后就是栈、寄存器、指令等等的了解。这里的学习也是需要对整个 CM3 内核有一个清晰的认识,之后就是对着汇编源码将操作系统涉及的汇编知识掌握。(推荐《Cortex-M3 权威指南》)

最后,C 和汇编代码的大多数细节问题解决了之后,就需要好好重新开始学习操作系统的代码,不管是汇编还是C 都带着之前遗留的问题开始整体学习,重新梳理一遍之前所学知识。此时需要注意里面的一些书写习惯,知道为什么一条简单C 语言代码,还需要先关中断再开中断的原因。还有就是开始看一些没有涉及到的函数,比如信号量、队列这些机制的实现。在这一阶段完成后 u/COS II 里面的所有细节问题和代码应该都能解决了。(推荐《嵌入式实时操作系统uCOS-II》和源码)

学习过程中可以直接在线调试,也可以直接进行仿真调试,KEIL 软件还是很强大的,掌握这个软件的调试方法可以让你的学习之旅更畅通,磨刀不误砍柴工,别怕浪费时间。

操作系统最重要的功能就是任务切换,任务切换最关键的就是切换时的数据保护了。只要在 CPU 回到中断时的下一条指令开始执行时,所有的数据恢复到中断前的状态,那么不管他运行到哪个函数,最终还是能按照之前的状态继续下去。任务根本不知道曾经被中断过。

入门 uCOS 操作系统的一点建议的更多相关文章

  1. 【端-iOS】给iOS开发入门者编码的一点建议

    规范编码可以提高代码的可读性,降低维护成本.作为一个程序员,要对自己写的代码负责,虽然bug无可避免,但是写代码时最基本的编码规则还是应该遵守的,否则不是坑自己就是坑别人,因为代码肯定是要维护的. 下 ...

  2. ArcGIS地图文档MXD效率慢的一点建议(二)

    经常有用户询问,我的MXD图层比较多,而且配置好了相关的符号,但是我的服务器更换了一下,而且两个服务器的要素类名称都是一样的,我想配置一下新的数据源,而且我的这个MXD已经连接不到原来的数据源了,打开 ...

  3. Mysql数据库的瓶颈处理一点建议

    Mysql数据库的瓶颈处理一点建议         我们在使用Mysql数据库是常见的两个瓶颈是CPU和I/O的瓶颈,CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候.磁盘I/O瓶颈的出 ...

  4. [stm32][ucos] 1、基于ucos操作系统的LED闪烁、串口通信简单例程

    * 内容简述: 本例程操作系统采用ucos2.86a版本, 建立了5个任务            任务名                                             优先级 ...

  5. ucos操作系统的内核有哪些调度方法

    1)时间片轮番调度法 假设系统中有5个任务,T1,T2,T3,T4,T5,这个时候,操作系统为每一个任务分配时间,比如说我们为T1任务分配10毫秒,为T2任务分配20毫秒,为T3任务分配5毫秒,为T4 ...

  6. [HeadFist-HTMLCSS学习笔记][第七章CSS入门:加一点样式]

    CSS入门 style元素设置CSS 基本格式 <style type="text/css"> body { background-color: #eaf3da; } ...

  7. 关于SQL优化的一点建议

    前段时间一直在做关于性能优化相关的工作,结合自己的实际工作经验,只针对SQL层面提一些优化的规范和建议. 针对SQL编写 1.单条SQL长度不宜超过100行: 2.SQL子查询不宜嵌套3层: 子查询嵌 ...

  8. Ceres Solver 入门稍微多一点

    其实ceres solver用了挺多的,可能是入门不精,有时候感觉感觉不理解代码上是怎么实现的,这次就通过ceres的官网仔细看了一些介绍,感觉对cpp了解更好了一些. 跟g2o的比较的话,感觉cer ...

  9. 学习javascript怎么入门,初学者5条建议

    你是否已经初步掌握了html和css,但完全不知道从何入手Java?如果是,这里总结了5条建议,帮助JavaScript初学者总结学习方法,提高学习效率. 一.多看视频少看书 对初学者而言,看书的效率 ...

随机推荐

  1. web漏洞

    *参考网站 https://cxsecurity.com/ https://www.exploit-db.com/ https://www.seebug.org/ http://www.securit ...

  2. Kali基础

    1.Kali Linux 2.0 发布下载,基于 Debian 的 Linux 发行版  http://www.linuxidc.com/Linux/2015-08/121549.htm 2. Kal ...

  3. kibana 设置登录认证

    kibana 设置登录认证 SlowGO 2018.11.21 14:56 字数 59 阅读 658评论 0喜欢 0 kibana 本身没有用户名密码的设置,可以使用 nginx 来实现. 步骤 (1 ...

  4. 微信小程序的calc不生效处理

    大致文字初略的记录描述一下问题:外层是relative相对定位,内部一个view 需要绝对定位bottom的值为128rpx,同时还要兼容适配苹果x的底部,所以值是这样设置的: bottom: cal ...

  5. JDBC:数据库连接技术

    JDBC :带它再爱你一次 (一) JDBC 入门 (1) 概述 Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问 ...

  6. Scrapy setup.py 各参数详解

    实际上Scrapyd的打包工具用到了setuptools,而打包参数主要是在setuptools里面的setup函数中设置. ************************************* ...

  7. 创建web服务器

    用node创建本地web服务 1,创建本地文件server.js var http = require('http'); var url=require('url'); var fs=require( ...

  8. 【规律】Growing Rectangular Spiral

    Growing Rectangular Spiral 题目描述 A growing rectangular spiral is a connected sequence of straightline ...

  9. 洛谷P1087 FBI树

    P1087 FBI树题解: 看到这个题,我想到了线段树!(毕竟刚搞完st表...) 当然,题解中有位大佬也用的线段树,但是当时看的时候我看见了9个if,当场去世. 那么这是一个不用暴力的线段树,且简单 ...

  10. c#学习笔记-string stringBuilder

    string aTest = "abc";//分配固定的内存大小 aTest += "ddd"; //销毁原先的数据再来分配,消耗大 StringBuilder ...