假装写了一个操作系统--学生党的假期自我娱乐(一)

本文介绍了一个基于Windows环境的简易操作系统开发项目。该项目旨在通过编写一个不依赖特定硬件的操作系统来加深对操作系统原理的理解,并进行算法练习。作者计划创建一个主进程管理四个子进程,并通过Windows管道实现进程间的通信。

Preface 前言

放假在家闲着看了几本操作系统方面的书,本来打算用手头的树莓派写一个embedded的玩一玩,后来发现,几乎不可能:一是RPi的文档极其的诡异,根本不知所云;二是在下没有什么嵌入式开发经验,调试起来比较不方便.所以就想要写一个不需要考虑太多硬件方面,只是好玩和练习算法的”假的”操作系统.

开发环境

个人比较习惯于Windows上的操作和编程,Windows最具吸引力的Visual Studio也是一个原因.所以这里使用Windows和Visual Studio 2017作为开发环境,Linux选手请见谅, 这个项目里可能会涉及到Windows的管道,句柄等内容,在Linux下就要重写了呢.并且记得给你的Visual Studio装上C++.

知识要求

作为操作系统的非常规尝试,要求肯定比那些”从零开始”,”零基础”之类的文章要高一(hen)些(duo).The requirements can be listed as follows:

  1. C/C++语言(大概需要比较熟悉的那种程度)
    C#语言,差不多就行了
    当然了,编程经验也是十分重要的因素.
  2. 操作系统方面的知识(比如进程,线程,中断,etc)
  3. Windows编程(至少要知道句柄,父子进程,还有MS的编程风格)

我看的参考书呢,有<<现代操作系统>>,<<深入探索嵌入式操作系统>>,<<操作系统开发与实践>>(就是minix的那个)

初期设计思路

话不多说,上图:
设计思路
初期想法是一个主进程(方便管理)启动四个子进程(注意,是进程),然后四个子进程之间用Windows管道通信,模拟mmu(内存管理单元),系统中断,外设设备,还有一个系统内核.当然了,从底层的模块向上写会比较的方便(毕竟思路还不是很完善),对性能不做任何要求(因为是实验用的).想法说不定也会随着代码编写的深入而改变,不知道能不能坚持到最后呢.
最后,在下的代码会比较混乱,以后附上代码时请见谅.

开始旅程

Program This World!


Github Id: ridethepig

### 显示接口类型 0.93寸OLED显示器通常支持多种显示接口类型,例如I2C、SPI或UART等。在选择时,需要确保所选显示器的接口类型与主控设备(如Arduino、树莓派或Orange Pi)兼容。例如,在引用案例中,0.98寸OLED通过I2C通讯与Arduino 02进行数据交互[^1],因此在选择0.93寸OLED时,也应优先考虑I2C接口的便利性和低引脚占用优势。 ### 分辨率与显示效果 OLED显示器的分辨率直接影响显示内容的清晰度和细节表现。常见的0.93寸OLED分辨率包括128x32、128x64等。在选择时,应根据具体应用场景(如文本显示、图形界面或数据可视化)确定合适的分辨率。例如,如果用于显示温度和气压数据,128x64分辨率能够提供更丰富的信息展示空间[^1]。 ### 驱动芯片兼容性 不同型号的OLED显示器采用不同的驱动芯片,如SSD1306、SH1106等。这些芯片对主控平台的驱动支持情况各不相同,因此在选型时应确保主控系统(如Linux或Arduino)有对应的驱动库或示例代码支持。例如,SSD1306是广泛支持的驱动芯片,适用于多种开发平台,能够简化开发流程[^1]。 ### 显示亮度与视角 OLED显示器具有自发光特性,因此在选择时应关注其亮度参数(通常以cd/m²为单位)和可视角度。亮度越高,越适合在强光环境下使用;可视角度越大,越能保证在不同观看方向下的显示清晰度。对于便携式设备,建议选择亮度适中且视角大于160度的OLED屏幕,以提升用户体验。 ### 工作电压与功耗 由于OLED显示器通常直接由微控制器或嵌入式系统供电,因此需要确认其工作电压是否匹配主控系统的供电能力。常见的OLED工作电压为3.3V或5V,应根据具体开发板的电源特性进行选择。此外,OLED的功耗与显示内容有关,全屏点亮时功耗较高,因此在低功耗应用场景中应考虑动态调整显示内容以降低整体功耗[^1]。 ### 机械尺寸与安装方式 0.93寸OLED显示器的物理尺寸和安装孔位也是选型时需要考虑的因素。应确保其尺寸适合目标设备的外壳设计,并确认是否具备安装孔或柔性排线(FPC)接口,以便于固定和连接。对于便携式AI设备或嵌入式项目,推荐选择轻量化且具备FPC接口的OLED模块,以提高集成度和可靠性。 ### 示例代码 以下是一个基于Arduino平台驱动SSD1306 OLED显示器的示例代码片段: ```cpp #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 32 #define OLED_RESET -1 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); void setup() { display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); display.setTextSize(1); display.setTextColor(SSD1306_WHITE); display.setCursor(0, 0); display.println("Temp: 25.5 C"); display.println("Press: 1013 hPa"); display.display(); } void loop() { // 更新显示内容 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值