从裸机到实时操作系统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实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只 ...
随机推荐
- 微软AD相关操作的免费工具
https://www.ittsystems.com/best-free-active-directory-tools/
- Linux系统编程——水平触发和边沿触发
事件模型 EPOLL事件有两种模型: Edge Triggered (ET) 边缘触发只有数据到来才触发,不管缓存区中是否还有数据. Level Triggered (LT) 水平触发只要有数据都会触 ...
- redis中key的过期键删除策略
Redis过期键删除策略 Redis key过期的方式有三种: 被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key 主动删除:由于惰性删除策略无法保证冷数据被及时删 ...
- ubuntu16.04上vue环境搭建
$ sudo apt-get install python-software-properties $ curl -sL https://deb.nodesource.com/setup_8.x | ...
- 软件测试:1.Describe An Error
软件测试:1.Describe An Error 要求: 1.简要描述你最近完成项目里的一个error: 2.说明原因,错误影响,及你怎样发现的: 或许因为刚开学的缘故,近期我并没有完成大的项目,多少 ...
- 简单的PHP单例模式
class MySQL { private static $instance; // 阻止外部实例化 private function __construct() { # code... } // 阻 ...
- MPICH2简单的安装配置总结
./configure -prefix=/home/mpi/mpich2 make make install 用命令export PATH /home/mpi/mpich2/bin:$PATH,但我是 ...
- ssh免密登陆配置
目录 ssh免密登陆 在A工作站上输入 B服务器上输入 登陆 ssh初次登陆询问 1.单次取消 2.ansible中增加链接参数 3.修改ansible配置参数[推荐] 4.修改服务器上的ssh_co ...
- QVector也是隐式数据共享的
Behind the scenes, QString uses implicit sharing (copy-on-write) to reduce memory usage and to avoid ...
- LeetCode 92. Reverse Linked List II倒置链表2 C++
Reverse a linked list from position m to n. Do it in one-pass. Note: 1 ≤ m ≤ n ≤ length of list. Exa ...