原创: 鱼鹰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. [Agc029B]Powers of two_贪心_树形dp

    Powers of two 题目链接:https://atcoder.jp/contests/agc029/tasks/agc029_b 数据范围:略. 题解: 可能一点思路都没有. 但是我们发现:如 ...

  2. SQLSERVER 查看服务器IP地址的命令

    今天进行负载均衡的测试的时候 想查询一下数据库相关信息 百度了下 找到解决方案为: SELECT SERVERNAME = CONVERT(NVARCHAR(),SERVERPROPERTY('SER ...

  3. [转帖]被HTTP/2漏洞拖累,所有Kubernetes版本受影响

    被HTTP/2漏洞拖累,所有Kubernetes版本受影响 https://www.kubernetes.org.cn/5746.html 服务很重要啊... 低版本都不解决安全问题了.. 不过HTT ...

  4. 记录一次线上yarn RM频繁切换的故障

    周末一大早被报警惊醒,rm频繁切换 急急忙忙排查 看到两处错误日志 错误信息1 ervation <memory:0, vCores:0> 2019-12-21 11:51:57,781 ...

  5. SSM+pagehelper分页

    1.maven依赖 <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId> ...

  6. scrapy 框架持久化存储的三个方法 存入 mysql 文件 redis

    这里就不做详细讲解了 毕竟不是一句两句能说的清楚,所以我把代码和注释放到了这里 谢谢! import pymysql from redis import Redis # 写入mysql class W ...

  7. Error starting daemon: error initializing graphdriver: devmapper: Device docker-thinpool is not a thin pool

    Error starting daemon: error initializing graphdriver: devmapper: Device docker-thinpool is not a th ...

  8. Vasya's Function CodeForces - 837E (gcd)

    大意: 给定$a,b$, $1\le a,b\le 1e12$, 定义 $f(a,0)=0$ $f(a,b)=1+f(a,b-gcd(a,b))$ 求$f(a,b)$. 观察可以发现, 每次$b$一定 ...

  9. github骚操作

    限制搜索 in关键词限制搜索范围 命令 说明 xxx in:name 项目名包含xxx的 xxx in:description 项目描述包含xxx的 xxx in:readme 项目的readme文件 ...

  10. TCP协议探究(四):定时器

    1 概述 重传定时器:使用于当希望收到另一端的确认. 坚持(persist)定时器:使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口 保活(keepalive)定时器:用于检测一个空闲连接的另一 ...