从裸机到实时操作系统RTOS
最近有点闲,公司新年过后一直没有项目,手头上维护的两个程序也比较稳定。
想起来去年做的商业时钟,做了一半,销售反馈回来说,市场不明朗,不建议往下开展,就搁置了,趁着现在有空,把他捡起来。
原来的代码都是裸机在跑,手头上维护了一个液晶程序,也是裸机,代码量巨巨巨巨大,全局变量巨巨巨巨巨多,不停的中断搞得人头大,维护代码真的是痛不欲生啊,想改又不能改,太难受。这次代码虽然做了一半多,但是算我第一个项目,水平那个烂啊,我都不忍心再看一遍,现在没有业务压力和时间限制,打算上个操作系统看看。
比对了一下用户很大的freeRTOS和ucos的官方移植,freeRTOS貌似代码量小一点,但是官方的移植例程看的头疼是怎么回事,相比之下,ucos3的代码看起来比较容易懂,果断ucos,毕竟飞过外太空的,现在能看到的缺点就是不能商用,这是个大麻烦。小公司根本不会考虑这种预算。不管了,先快速上手理解一下RTOS的基本概念,后期商用再换成freeRTOS应该也比较容易。
官方用107做的移植,我的板子也是107,但是官方代码里面串口2的中断处理没看懂,而且比较习惯看标准库,遂决定自己移植一下。主要参考正点原子的移植教程。
移植还是比较容易的,我从官网下的最新的ucos版本V3.03.01,主要解决两个问题:
1.修改启动文件钟PendSV的向量地址为ucos中异常处理的函数入口。主要是os_cpu_a.s的内容,这个函数就是ucos中用来做函数切换的,我直接把ucos中这个函数入口改成了stm32中的异常处理函数。改完以后要记得屏蔽掉原来PendSV_Handle中断服务函数。
2.实现系统运行需要的时钟节拍。系统运行需要一个时钟节拍,作为系统心跳。这里用systick作系统时钟节拍,和官方完全一样。
移植完成,创建第一个任务,点灯,正常,大功告成。
从裸机到实时操作系统RTOS的更多相关文章
- 嵌入式实时操作系统VxWorks入门――开发环境构建[转]
VxWorks 操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),它以其良好的可靠性和卓越的实时性被广泛地应用在通 信.军事.航空.航天等高精尖技术及实时性 ...
- 嵌入式实时操作系统μCOS原理与实践任务控制与时间的解析
/*************************************************************************************************** ...
- vxworks 实时操作系统
VxWorks 是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统.Tornado 是WRS 公司推出的一套实时操作系统开发环境,类似Mi ...
- 第三周作业、实时操作系统µC/OS介绍及其它内容
作业要求 见<实时控制软件设计>第三周作业 1 阅读笔记--µC/OS 1.1 基本介绍 µC/OS是由Micrium公司研发的实时操作系统,以µC/OS-II或µC/OS-III为内核, ...
- RTX51 Tiny实时操作系统学习笔记—初识RTX51 Tiny
一,RTX51 Tiny简单介绍 RTX51 Tiny是一种实时操作系统(RTOS),能够用它来建立多个任务(函数)同一时候运行的应用(从宏观上看是同一时候运行的,但从微观上看,还是独立运行的 ...
- VxWorks Fuzzing 之道:VxWorks 工控实时操作系统漏洞挖掘调试与利用揭秘
转载:freebuf 0×00 前言 关于VxWorks,这里引用44CON议题<攻击 VxWorks:从石器时代到星际>探究 一文章中的介绍: VxWorks 是世界上使用最广泛的一种在 ...
- 使用Nucleus SE实时操作系统
使用Nucleus SE实时操作系统 Using the Nucleus SE real-time operating system 到目前为止,在本系列文章中,我们详细介绍了Nucleus SE提供 ...
- ucos实时操作系统学习笔记——内核结构和任务创建
对于ucos实时操作系统,邵贝贝的那本书已经写得很详细了,我因为之前不深的研究过ucos,所以在这里做一个笔记,写一些个人对该操作系统的理解,仅仅是个人理解,如果有人看到这边随笔有不对的地方,望给我指 ...
- ucos实时操作系统学习笔记——操作系统在STM32的移植
使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只 ...
随机推荐
- MVC Action 返回类型
https://www.cnblogs.com/xielong/p/5940535.html https://blog.csdn.net/WuLex/article/details/79008515 ...
- three.js使用base64 图片创建Texture纹理
下面使用的是literallycanvas绘图,然后获取绘图结果为base64内容 var lc = LC.init( document.getElementById('canvas-output') ...
- 用最简单的话告诉你什么是ElasticSearch
介绍 Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 L ...
- webview之学习文章(待续)
webview与js交互: Tencent/VasSonic(缓存优化方案) lzyzsd/JsBridge: pengwei1024/JsBridge: -----webview的框架 TheFin ...
- NPOI 导出Excel部分
) { MessageBox.Show("没有找到相关的数据!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.I ...
- mybatis使用枚举优化
文章转自: https://segmentfault.com/a/1190000010755321 问题 在编码过程中,经常会遇到用某个数值来表示某种状态.类型或者阶段的情况,比如有这样一个枚举: p ...
- python初识,变量,条件判断语句,基本数据类型,while循环语句
python文件后缀可以是任意,但是导入模块时不用.py后缀时会报错 python文件的两种执行方式: python解释器 python文件路径 进入python解释权,事实获取执行结果 在Linux ...
- Vue 表格里的下拉列表
下拉列表column-select.vue组件内容: <template> <div class="column-select-wrapper"> < ...
- java中几种常用的设计模式
参考https://blog.csdn.net/jiyang_1/article/details/50110931 参考https://blog.csdn.net/dean_hu/article/de ...
- Python全栈开发记录_第六篇(生成器和迭代器)
说生成器之前先说一个列表生成式:[x for x in range(10)] ->[0,1,2....,9]这里x可以为函数(因为对python而言就是一个对象而已),range(10)也可 ...