入门 uCOS 操作系统的一点建议
原创: 鱼鹰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 操作系统的一点建议的更多相关文章
- 【端-iOS】给iOS开发入门者编码的一点建议
规范编码可以提高代码的可读性,降低维护成本.作为一个程序员,要对自己写的代码负责,虽然bug无可避免,但是写代码时最基本的编码规则还是应该遵守的,否则不是坑自己就是坑别人,因为代码肯定是要维护的. 下 ...
- ArcGIS地图文档MXD效率慢的一点建议(二)
经常有用户询问,我的MXD图层比较多,而且配置好了相关的符号,但是我的服务器更换了一下,而且两个服务器的要素类名称都是一样的,我想配置一下新的数据源,而且我的这个MXD已经连接不到原来的数据源了,打开 ...
- Mysql数据库的瓶颈处理一点建议
Mysql数据库的瓶颈处理一点建议 我们在使用Mysql数据库是常见的两个瓶颈是CPU和I/O的瓶颈,CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候.磁盘I/O瓶颈的出 ...
- [stm32][ucos] 1、基于ucos操作系统的LED闪烁、串口通信简单例程
* 内容简述: 本例程操作系统采用ucos2.86a版本, 建立了5个任务 任务名 优先级 ...
- ucos操作系统的内核有哪些调度方法
1)时间片轮番调度法 假设系统中有5个任务,T1,T2,T3,T4,T5,这个时候,操作系统为每一个任务分配时间,比如说我们为T1任务分配10毫秒,为T2任务分配20毫秒,为T3任务分配5毫秒,为T4 ...
- [HeadFist-HTMLCSS学习笔记][第七章CSS入门:加一点样式]
CSS入门 style元素设置CSS 基本格式 <style type="text/css"> body { background-color: #eaf3da; } ...
- 关于SQL优化的一点建议
前段时间一直在做关于性能优化相关的工作,结合自己的实际工作经验,只针对SQL层面提一些优化的规范和建议. 针对SQL编写 1.单条SQL长度不宜超过100行: 2.SQL子查询不宜嵌套3层: 子查询嵌 ...
- Ceres Solver 入门稍微多一点
其实ceres solver用了挺多的,可能是入门不精,有时候感觉感觉不理解代码上是怎么实现的,这次就通过ceres的官网仔细看了一些介绍,感觉对cpp了解更好了一些. 跟g2o的比较的话,感觉cer ...
- 学习javascript怎么入门,初学者5条建议
你是否已经初步掌握了html和css,但完全不知道从何入手Java?如果是,这里总结了5条建议,帮助JavaScript初学者总结学习方法,提高学习效率. 一.多看视频少看书 对初学者而言,看书的效率 ...
随机推荐
- U盘自动复制文件
1.建立一个文本文档,WIN+R 里面打NOTEPAD ,或者自己新建一个都一样. 2.把下面的代码复制进去 set fso=createobject("scripting.filesyst ...
- java.net.UnknownHostException: MySQLMASTER: MySQLMASTER: 未知的名称或服务
linux环境在连接Activemq的时候报以下信息,找了半天配了下host OK了,记录一下. java.net.UnknownHostException: MySQLMASTER: MySQLM ...
- js函数(5)
函数属性方法和构造函数 length属性 函数体中,arguments.length表示传入函数的实参个数. prototype属性 指向一个对象的引用 call方法和apply方法 看作是某个对象的 ...
- Spring mybatis源码篇章-Mybatis的XML文件加载
通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-Mybatis主文件加载 前话 前文主要讲解了Mybatis的主文件加载方式,本文则分析不使用主文件加载方式 ...
- [转帖]Intel 上一代 可扩展CPU的简单报价
8.1万元人间毒物!Intel 28核铂金版Xeon 8180零售上市 http://news.mydrivers.com/1/541/541670.htm 猜你想看:英特尔 CPU处理器 Xeon ...
- AtCoder AISing Programming Contest 2019 Task D. Nearest Card Game
题目分析在代码注释里. int main() { #if defined LOCAL && !defined DUIPAI ifstream in("main.in" ...
- 【AtCoder】ARC066
ARC066 C - Lining Up 判断是否合法即可,合法是\(2^{\lfloor \frac{N}{2}\rfloor}\) 不合法就是0 #include <bits/stdc++. ...
- LC 1. Two Sum
题目介绍 Given an array of integers, return indices of the two numbers such that they add up to a specif ...
- Mancala II
题目描述 Mancala is a family of board games played around the world, sometimes called sowing games, or c ...
- django websocket 实现后台日志在web端展示(+前端vue设置)
核心代码: @accept_websocket def get_log(req): if req.is_websocket(): print('收到websocket请求') with open(se ...