400行程序写一个实时操作系统(三):Sparrow的学习方法

server/2024/10/18 8:28:42/

千里之行始于足下,为了让大家的学习更加事半功倍,笔者将会介绍RTOS的学习方法

可能很多人拿到一份源码,就想通过各种方式搞懂它,例如抄代码或者读代码。

笔者认为,单纯抄一个实时操作系统是没有任何用处的。比如对于Sparrow,它的程序仅仅有四百行,不到一天就可以抄完,但是又能收获什么呢?

老实说,笔者也干过抄源码和看源码这种事情,比如,笔者曾经抄过FreeRTOS五千多行源码,耗费了大量时间,也尝试看过linux内核源码,但是,这样的效率非常低,甚至是几乎没有任何用处。

读者可能会质疑和反对,但是,请听笔者细细分析原因。

首先,编程是一种结果向的产物,而不是过程,你看到的源码是不断修改后的结果,而不是过程。程序 = 数据结构 + 算法。我们想获得的,是代码的思路(通常是算法),编程是对我们算法的一种描述,而不是算法本身,这也就注定了,通过看源码理解思路,是低效的,因为源码并不等同于算法,如果有人直接将算法讲述给你,你再参考源码的具体实现,或者尝试编程实现,往往会收获更多,这才是学习编程最高效的方式。但是,可能有人会说:我上哪找人直接讲述源码?莫慌,笔者的这篇文章就是为了解决这些问题而写的。但在此之前,让笔者继续讨论那些没有必要的学习方式。

其次,不管是抄源码还是看源码,代码都是死的。编程产生的代码就是要运行在机器上的,也就注定了它面向的对象是计算机,而不是人本身,除非你的大脑是二进制的!没有运行的代码,毫无意义!快速学习一个项目,需要的是对项目深刻的理解,但是抄代码等行为,让我们的认知开始变得“趋利避害”,也就是说,我们往往会忽视那些细节,只重点关注我们看得懂的部分,走不出自己的舒适圈,谈何提高?

最后,学习一个项目,重要的是背后的基础知识,而不是项目本身。所谓冰山一角,便是如此。没有水下的冰山,何来一角冰山?为什么有的人常常能够举一反三,那是因为它理解了一个事物的本质,从而能够在这个基础上进行扩展。很多人看源码,却从来不思考更深层次的东西,只关注源码的浅层次的实现功能。

现在该让笔者介绍一些更加有用的学习方式了。

让程序先跑起来

笔者已经说过,程序面向的对象是机器,死的代码没有任何意义,只有计算机认可的代码才是好代码,通过观察运行的程序,笔者可以更加高效的推测程序运行的原理。

读日志

读者可以在运行的程序中加入各种printf,观察打印的日志,从而推测程序的执行思路,并且可以猜测程序的各种原理,并且通过日志来验证它。

带着目的去查看运行中的程序

通常,我们学习一个项目是为了学会其中的各种原理,那么我们必须要有目的,同时要有疑惑,当解决疑惑时,就是我们的提高。为了学习项目而学习项目是不可取的,你应该重点关注你得到了什么,以及如何去运行这些知识,而不是学完后仍然脑袋空空。

上手修改并调试

对程序的修改,是对我们的想法最好的验证,在调试过程中,我们对程序的理解会进一步加深。

明确程序只是算法的具体实现

程序 = 数据结构 + 算法。如果有一些优质的资料介绍代码的算法,笔者建议通过算法来看程序,而不是通过程序推测算法

在后面的章节中,笔者将会先介绍Sparrow的基本原理以及算法,然后让Sparrow运行起来,通过gdb等软件,一步步执行程序并且介绍Sparrow的程序是怎样实现它的算法的。

Sparrow源码地址:skaiui2/SKRTOS_sparrow at source (github.com)


http://www.ppmy.cn/server/130798.html

相关文章

MySQL运维

MySQL运维 创建健壮的MySQL健康检查Python类 在本文中,我们将介绍如何创建一个强大而灵活的Python类,用于封装MySQL运维命令并提供易用的接口。这个类不仅支持后续扩展,还提供完备的响应和错误信息,同时要求必要的登录信息以确保…

【C语言系统编程】【第一部分:操作系统知识】1.2.POSIX标准与系统调用

1.2 POSIX标准与系统调用 1.2.1 POSIX标准概要 1.2.1.1 什么是POSIX标准 POSIX(Portable Operating System Interface of Unix)标准是一系列由IEEE定义的操作系统接口标准,其目标是在Unix操作系统族之间实现源码级别的兼容性。这些标准定义…

污水排放口细粒度检测数据集,污-水排放口的类型包括10类目标,10000余张图像,yolo格式目标检测,9GB数据量。

污水排放口细粒度检测数据集,污-水排放口的类型包括10类目标(1 合流下水道,2 雨水,3 工业废水,4 农业排水,5 牲畜养殖,6 水产养殖,7 地表径流,8 废水处理厂&…

【C++】模拟实现hash_table(哈希表)

🦄个人主页:修修修也 🎏所属专栏:实战项目集 ⚙️操作环境:Visual Studio 2022 目录 一.了解项目功能 二.逐步实现项目功能模块及其逻辑详解 📌实现HashNode类模板 🎏构造HashNode类成员变量 🎏实现HashNode类构造函数…

Map: 地图

对全国2023年各省市的人口分布情况,做出地图展示效果 参考:Map - Map_base - Document (pyecharts.org) 1、模板 # -*- coding: gbk -*- from pyecharts import options as opts from pyecharts.charts import Map from pyecharts.faker import Faker…

Tongweb7049+TongRDS2214-2216+THS6010-6012 开机自启动(by lqw)

原理 配置rc.local(这个网上有很多示范,为了方便使用,在这里总结一下各个产品的配置) Tongweb7049 Tongweb7049 本身自带开机自启动脚本(bin目录下的installxxx.sh),但是有时执行失败的话&am…

Android Studio实现安卓心理健康咨询

获取源码请点击文章末尾QQ名片联系,源码不免费,尊重创作,尊重劳动 项目代号161 1.开发环境 android stuido3.6 jdk1.8 2.功能介绍 安卓端: 1.注册登录 2.心理测评 3.测评结果 4.心理咨询预约 5.心理综合辅导 6.个人中心 7.历史咨…

基于深度学习的视频中的姿态跟踪

基于深度学习的视频姿态跟踪是一项用于从视频序列中持续检测和跟踪人体姿态的技术。它能够识别人体的2D或3D关键点,并在时间维度上进行跟踪,主要应用于人机交互、体育分析、动作识别和虚拟现实等领域。以下是视频姿态跟踪的主要原理和方法: …