入门 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初学者总结学习方法,提高学习效率. 一.多看视频少看书 对初学者而言,看书的效率 ...
随机推荐
- Java核心1(第三章)
3.6字符串 子串substring(a,b)方法 第二个参数是不想复制的第一个位置 可以从一个较大的字符串中提取一个子串 3.6.2拼接 Java允许使用+号链接两个字符串 3.6.3不可 ...
- ES-实战
一.环境准备 操作系统:mac 依赖的软件:JDK1.8.Postman.NodeJs6.0以上.Maven.Idea ES下载:Elastic官方网站: http://www.elastic.co ...
- 洛谷 P4198 楼房重建 线段树维护单调栈
P4198 楼房重建 题目链接 https://www.luogu.org/problemnew/show/P4198 题目描述 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上 ...
- linux 从远程服务器拷贝文件
1.从服务器复制文件到本地: scp root@192.168.1.100:/data/test.txt /home/myfile/ 2.从服务器复制文件夹到本地: scp -r root@192.1 ...
- 微信小程序 路由跳转 异步请求 存储数据,微信登录接口
1小程序路由跳转 wx.switchTab(Object object) 这里的tabBar是底下的导航栏指定的页面 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面 tabBar l ...
- 认识函数(python)
一般的函数都是有参数的,函数的参数都是放在函数定义的括号里的,函数参数的命名规则和我们说的变量的命名规则基本一样,一定要清晰明了.(能概括出它的意义,让人阅读你的代码,就知道这个参数是干嘛的就行).当 ...
- 对Python中print函数参数的认识
输出函数是最常用的,对print()参数的准确认识尤为重要. sep='':sep参数表示函数中不同value的分隔符,默认为一个空格. end='':end参数表示函数结尾的处理,默认换行. 例如: ...
- linux下mysql启动 Starting MySQL. ERROR! The server quit without updating PID file(xxx/x.pid)
service mysql start 报错: Starting MySQL. ERROR! The server quit without updating PID file(xxx/x.pid) ...
- 怎样在微信H5中点击直接跳转到公众号
第一步: 打开微信公众号, 随便找一篇公众号文章, 将它发送给你的某个好友. 第二步: 使用默认浏览器打开这个分享的文章链接, 然后复制链接里面的biz字段到下面这个URL中替换 第三步: 在html ...
- 13 Msql之四种事务隔离界别
一.事务的基本要素 1.原子性:事务开始后的所有操作,要么全部做完,要么全部不做,不能停滞在中间环节.事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没发生一样.也就是说事务是一个不可分割 ...