第一章

前言

偶然间使用到了RTX51-tiny做一些东西,它是keil自带的51操作系统,以小巧占用资源少著称,这里不细谈它是如何实现的,反正是一个真正的基于时间片的多任务系统。

往往我们在使用单片机做一些东西的时候都比较喜欢前后台的框架,这个方法好处就是整体逻辑简单,就是按循序执行,然后处理中断。缺点就是编程时无法使用任务的思想来划分功能,只能按照逻辑来实现功能,而且对于复杂功能就有点捉襟见肘了。好在使用单片机实现的任务一般都不会太过复杂,这也是单片机上没有推广操作系统的一个原因,还有一个原因就是单片机本身的资源十分有限。

但是这毫不影响我们对操作系统的好奇和使用热情。当我使用RTX51编程的时候,那种面向任务的设计思想能够使我更好的划分功能实现的逻辑。

突然就冒出了一个想法。。。。。。

操作系统是怎么实现的?我想自己写一个试试。

其实在早先看过ucos和rt-thread的一些源码,对于操作系统的实现基本都有了解,但是那些都是在至少是arm上实现的,虽然ucos有人移植到了51上,但是也只有基本功能,而且效率不高。Arm对于51来说简直就是一个质的飞跃,从资源上就已经没有了可比性,在ram上使用操作系统也是理所当然的事情。但是在之前学习其他的操作系统时,即使是看了源码也只是知其然,而不知其所以然。所以没有真真正正的自己亲手写一个,学习的知识只能算作纸上谈兵。

接下来我打算这正的练练兵,我会一点一点的实现一个比较完整的操作系统,同时把自己的代码和心得写下来,留给需要它的初学者一个敲门砖。

为什么我的文章说从1开始呢?不是从0呢?因为我打算把更多的精力放到软件层面上是如何实现一个操作系统的,但是软件就必有硬件平台的支持,我并不打算在硬件上多费口舌,所以需要初读此文的同学自备硬件相关知识,包括后面所使用的芯片的寄存器知识,这些就是需要自备的“0”。

目标

在开始学习之前需要一个目标,就是我们最后要实现一个什么样子的系统,最次要实现哪些功能。

  1. 首先我们需要一个支持时间片和优先级的抢占式实时系统
  2. 我们需要系统支持动态内存,作为一个系统如果不能提供内存管理,这个系统是不完整的
  3. 我们需要这个系统支持任务间通讯,至少要支持信号量,最好能够支持消息队列和共享内存,并且最好能提供一种广播方式
  4. 最好能够提供一个友好的shell工具,这个我在之前已经写过一个,这里可以做一个移植的工作,练练手

好了,目标我们制定完成之后就是选择硬件平台的过程,由于这个是以学习为目的,所以我们需要选择一个简单,易懂,大众化的cpu来作为教学平台,同时还要考虑资源尽可能的多。

我手头刚好有一个STC15W56S4的板子,也是之前做小东西时留下的,这个cpu是8051的内核增强型,有着与8051兼容的寄存器,会51基本就会这个,而且有4k ram和56k rom,对于我们编写操作系统也有好处。而且STC还提供了外设的库,我们可以直接拿来作为bsp使用。

软件首选就是keil了,我使用的是keil5,之后的代码,不管是仿真还是编译都是在keil5的环境下进行。

我们也需要一些好的文章来帮助我们扩展思路。下面几个是我这次学习的主要参考

《构建属于自己的AVR操作系统》——黄建昌

《一起来学RTT系列连载教程》——RTT论坛

《嵌入式实时操作系统μCOS-II原理及应用》——任哲

《ucos教学》——卢友亮

《自己动手写嵌入式操作系统》——蓝枫叶

还有网上许许多多的文章,等讲到相关内容的时候我们在列出

好了,下一章我们开始进行操作系统的正式实践学习。

在以下的讲解中我会尽量全部使用c语言实现,主要是为了方便理解,其实我们为了提高效率往往使用汇编来编写任务切换部分的代码。

如果你是跟着我一章一章进行学习的话可能会发现在后面章节中前面的代码有变更,这是因为我也是一点一点边写代码边写文档,所以导致在后面写代码时发现前面的bug,做了修正。但是可以保证每章的代码都能正常运行。

等我的章节全部完成后我会上传一份源码,同时也会在git上同步更新

先放上git地址:https://github.com/RTplay/RT-OSforSTC15W

完整代码压缩包在这里:https://download.csdn.net/download/andylauren/11800701

(1)从1开始写一个操作系统相关推荐

  1. 写一个操作系统有多难?自制 os 极简教程

    不知道正在阅读本文的你,是否是因为想自己动手写一个操作系统.我觉得可能每个程序员都有个操作系统梦,或许是想亲自动手写出来一个,或许是想彻底吃透操作系统的知识.不论是为了满足程序员们自带的成就感,还是为 ...

  2. 我是如何学习写一个操作系统(完结):总结和系列索引

    前言 从一开始的引导程序到现在的文件系统已经有十篇了,算是自己对操作系统的学习的一个笔记,原本是想结合自己之前写的玩具操作系统FragileOS,但是之后就转到了结合Linux 0.11的代码去写这个 ...

  3. 自己动手写一个操作系统——MBR(1)

    文章目录 前言 MBR 1) 512 字节镜像 2) 0x55 和 0xAA qemu 运行 参考 前言 上篇<自己动手写一个操作系统--我们能做什么,我们需要做什么>我们介绍到 BIOS ...

  4. 自己动手写一个操作系统——MBR(2)

    前言 上篇文章<自己动手写一个操作系统--MBR(1)>,我们使用 dd 生成了一个 512 字节的镜像,并用 vim 将其最后两个字节修改成了 55 AA,以此来完成了 MBR 的构建. ...

  5. [从 0 开始写一个操作系统] 一、准备知识

    从 0 开始写一个操作系统 作者:解琛 时间:2020 年 8 月 29 日 从 0 开始写一个操作系统 一.准备知识 1.1 实现方案 1.2 gcc 1.2.1 AT&T 汇编基本语法 1 ...

  6. 从0写一个操作系统 | 01-环境搭建

    前言 前不久朋友推荐了一本书,叫做<操作系统真象还原>,看了一部分后觉得还蛮有趣的,想试着着手写一个操作系统,一边学习一边写. 本专栏会慢慢更新实现的过程,由于本人只能在工作之余钻研这本书 ...

  7. 从0开始写一个操作系统

    前文 之前很早就写过关于这方面的文章,但过于简陋,于是趁着有点时间再次整理了下,并以代码的角度进行讲解一下.[由于水平有限,如有错误请批评指正] 正文 0 本文写的一个简单OS所实现的目标 系统内核对 ...

  8. 我是如何学习写一个操作系统(九):文件系统

    前言 这个应该是这个系列的尾声了,一个完整的操作系统可能最主要的也就是分成这几大模块:进程管理.内存管理和文件系统.计算机以进程为基本单位进行资源的调度和分配:而与用户的交互,基本单位则是文件 生磁盘 ...

  9. 我是如何学习写一个操作系统(八):内存管理和段页机制

    前言 多进程和内存管理是紧密相连的两个模块,因为运行进程也就是从内存中取指执行,创建进程首先要将程序和数据装入内存.将用户原程序变成可在内存中执行的程序,而这就涉及到了内存管理. 内存的装入 绝对装入 ...

最新文章

  1. springboot之异步调用@Async
  2. 关于(++i)+(++i)+(++i)与(++i)+(i++)与(i++)+(++i)
  3. python基础知识面试题-python的一些基本概念知识和面试题
  4. Allegro替换过孔类型
  5. 大牛的距离(笑cry)精简算法
  6. Android 实现Activity后台运行
  7. t3 修改服务器配置,t3如何修改服务器地址
  8. Pytorch高阶API示范——DNN二分类模型
  9. webstack响应式网站导航html源码kyuan 本地静态化版
  10. 来看看Python炫酷的颜色输出与进度条打印
  11. dubbo与zookeeper
  12. 用WAIK for Win7制作Winpe3.0
  13. 【语音隐写】基于matlab GUI DWT+SVD音频水印嵌入【含Matlab源码 1409期】
  14. 改变你思维模式的书单
  15. ReactHooks——react-countdown倒计时——dayjs结合react-countdown
  16. ES系列:解决Cluster state has not been recovered yet, cannot write to the [null] index问题
  17. 达观电网故障知识图谱,三大功能全面提升电网故障处置效率
  18. IP-Guard如何禁止运行U盘程序
  19. 基于Matlab的三角函数方程组解算方法
  20. 微商小白如何有效快速精准引流?哪里能找到精准顾客群体?

热门文章

  1. 517编程 【初级班】 第八课 D. 结尾0的个数
  2. html5 show 案例
  3. iPhone 手机修复屏幕划痕
  4. 在IDEA中解决jar包冲突的神操作-必看
  5. echart旭日图_echarts(10):旭日图
  6. [ROC-RK3568-PC] [Firefly-Android] 10min带你了解GPIO复用
  7. 使用Nuxt.js框架开发(SSR)服务端渲染项目
  8. CAD得到填充名称(网页版)
  9. 1个免费网站教你如何追踪微信实时热点,速速收藏
  10. 暗影精灵双系统(win10和Ubuntu16.04)安装+Cuda和tensorflow安装-深度学习环境配置