skaiuijing
码龄2年
关注
提问 私信
  • 博客:42,986
    42,986
    总访问量
  • 61
    原创
  • 21,943
    排名
  • 700
    粉丝
  • 24
    铁粉
  • 学习成就
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:美国
  • 加入CSDN时间: 2023-03-16
博客简介:

2301_77061352的博客

查看详细资料
  • 原力等级
    成就
    当前等级
    4
    当前总分
    640
    当月
    14
个人成就
  • 获得812次点赞
  • 内容获得13次评论
  • 获得744次收藏
创作历程
  • 61篇
    2024年
成就勋章
TA的专栏
  • 400行程序写一个RTOS
    21篇
  • linux下环境搭建
    1篇
  • c语言杂谈系列
    15篇
  • linux内核源码系列
    2篇
  • linux驱动
    3篇
  • 微型OS源码详解系列
    20篇
兴趣领域 设置
  • Python
    pythonhttpx
  • Java
    eclipsejavatomcat
  • 前端
    jsonhtml5
  • 嵌入式
    单片机stm3251单片机proteusmcu物联网嵌入式硬件iot嵌入式实时数据库rtdbs
  • 游戏
    cocos2d动画unitysubstance designersubstance painter
创作活动更多

AI大模型如何赋能电商行业,引领变革?

如何使用AI技术实现购物推荐、会员分类、商品定价等方面的创新应用?如何运用AI技术提高电商平台的销售效率和用户体验呢?欢迎分享您的看法

175人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

Sparrow系列拓展篇:对调度层进行抽象并引入IPC机制信号量

在笔者更新完Sparrow手把手教学系列后,原本是不打算继续更新的。但关于Sparrow系列的读者又渐渐增多,作为作者,总感觉这个系列的文章还是稍微有些不圆满,恐怕多少会让读者有些意兴阑珊。最近又恰好有一点空闲时间,思来想去,于是决定再更上这么一篇,作为Sparrow系列的补充。调度层的抽象和IPC机制中最经典的信号量机制已经介绍完毕,笔者就介绍这么多。
原创
发布博客 2024.11.08 ·
870 阅读 ·
15 点赞 ·
0 评论 ·
24 收藏

400行程序写一个实时操作系统(二十): 完结篇

这是sparrow系列的最后一篇了,到了这里,也就意味着Sparrow的教程正式完结了。相信读者也从教程中领略到了一些属于自己的东西。Sparrow并不是一个完整的RTOS内核,它还缺少了很多东西,对比基本实时操作系统内核的来说,不说shell这些命令调试窗口,它甚至连IPC机制这些都没有,显然,它是残缺的、不完整的。但是,笔者的文章终究也是止步于这二十篇了,这些东西留给读者自己去完成了。
原创
发布博客 2024.10.30 ·
742 阅读 ·
17 点赞 ·
0 评论 ·
17 收藏

400行程序写一个实时操作系统(十九):SysTick时钟与阻塞延时的实现

在上一篇文章中,笔者介绍了实现时钟触发型RTOS的实现,介绍了Sparrow的时钟及延时阻塞的实现,现在让我们编写具体的代码。编写了时钟触发和阻塞延时的具体代码,彻底完成了Sparrow的代码。经历二十天的编写,Sparrow的教程也将迎来尾声。下一篇博客,也就是第二十篇,笔者不得不为Sparrow RTOS的教程画上一个圆满的句号了,是时候让我们的这趟旅程落下帷幕了。跟着教程一步步来到这里的小伙伴,祝贺你们,完成了一个小小的Sparrow RTOS。
原创
发布博客 2024.10.30 ·
648 阅读 ·
22 点赞 ·
0 评论 ·
8 收藏

400行程序写一个实时操作系统(十八):时间触发型RTOS的设计

前面已经说过了,Sparrow采用的是时间触发系统的设计,本章将会讲解时钟触发相关的算法。时间触发系统的任务调度基于定时器中断,适用于周期性任务和确定性要求高的场景,如控制系统。它的内部有一个时钟,每隔一定时间间隔就会触发一次时间中断,每次时钟中断时,调度器决定是否需要切换任务。先讲解了时间触发型RTOS的设计,然后讲解SysTick时钟,它通常作为RTOS的定时器。为了充分利用定时器,引入延时阻塞的概念,解决了裸机中常见的延时空等待的问题。
原创
发布博客 2024.10.29 ·
1030 阅读 ·
24 点赞 ·
0 评论 ·
12 收藏

400行程序写一个实时操作系统(十七):调度算法的实现

在上一篇博客笔者介绍了操作系统中的调度算法,调度算法的本质就是选择下一个任务。如果读者认真看了上一篇文章的内容,那么接下来讲解的Sparrow的算法应该是非常清晰易懂的。在实时操作系统Sparrow RTOS中,我们引入了优先级的概念,就是为了使任务的运行更加具有实时性,优先级由我们手动进行调整,往往我们希望优先级高的任务优先执行,那么,该怎么做呢?介绍了Sparrow的调度算法,然后编写程序实现了优先级抢占算法的设计,最后修改原先的工程对调度算法进行验证。有需要的读者可以自取。
原创
发布博客 2024.10.28 ·
347 阅读 ·
2 点赞 ·
0 评论 ·
9 收藏

400行程序写一个实时操作系统(十六):操作系统中的调度策略

在前面我们完成了Sparrow的临界区的代码,使用临界区,能够解决常见的并发问题,现在该完善我们的调度算法了。调度算法在操作系统领域常常是热门的话题。不同的用途将会使用不同的调度策略。在本节,笔者将为大家介绍一些操作系统中的调度算法的知识,加深读者对操作系统的理解。笔者介绍了linux内核、FreeRTOS、RT-Thread的调度策略和算法,旨在加深读者对操作系统的理解。当然,本来这些内容应该分成几篇不同的文章细细讲解的,不过笔者还是决定全部放在一篇。
原创
发布博客 2024.10.27 ·
986 阅读 ·
18 点赞 ·
0 评论 ·
24 收藏

400行程序写一个实时操作系统(十五):并发与竞态,临界区与原子操作

在前面一篇文章中,笔者带领大家使用PendSV中断实现了多线程,也终于度过了关于arm架构最难的部分。现在,笔者可以带领大家稍微迈入一点大家所熟悉的操作系统的世界,也就是多线程的并发问题。讲解了操作系统中的一些并发问题,然后通过配置中断寄存器的方式实现了临界区,最后通过实验来验证临界区是否成功执行。
原创
发布博客 2024.10.27 ·
859 阅读 ·
25 点赞 ·
0 评论 ·
26 收藏

400行程序写一个实时操作系统(十四):调度器运行与实现多线程

在上一篇博客中,我们使用SVC中断开启了第一个任务,这就是调度器的启动,接下来我们将在SVC工程的基础上,添加PendSV中断,进行切换任务从而实现多线程。再次提醒:本节内容需要一定的arm架构功底才能完全看懂,但是ARM架构只是RTOS这片大海中微不足道的一小滴海水,也不存在所谓的必须懂ARM架构才能懂RTOS的说法!陷入微小的细节中是没有必要的!读者如果没接触过arm架构,不需要细究,把握RTOS的宏观思想才是最重要的!完成了PendSV中断的代码,并且引入任务就绪表。
原创
发布博客 2024.10.26 ·
582 阅读 ·
29 点赞 ·
0 评论 ·
14 收藏

400行程序写一个实时操作系统(十三):调度器对象的创建与启动第一个任务

调度器是整个RTOS的核心,在前面我们得到了调度器对象的框架图,并且简单介绍了调度器的原理。在本节中,我们将会初始化调度器并且启动第一个任务。本节内容需要一定的arm架构功底才能完全看懂,但是ARM架构只是RTOS这片大海中微不足道的一小滴海水,也不存在所谓的必须懂ARM架构才能懂RTOS的说法!陷入微小的细节中是没有必要的!读者如果没接触过arm架构,不需要细究,把握RTOS的宏观思想才是最重要的!fill:#333;color:#333;color:#333;fill:none;调度器初始化启动。
原创
发布博客 2024.10.23 ·
733 阅读 ·
14 点赞 ·
0 评论 ·
21 收藏

400行程序写一个实时操作系统(十二):任务对象的创建

先讲讲RTOS。RTOS有两种大类型,分别是事件触发系统和时间触发系统。事件触发系统由中断驱动,通常采用中断线程化等技术,适用于响应速度要求高的场景,例如传感器数据采集,但是当大量事情一次性发生时,计算机会面临大问题。(一般的中断是CPU放下一切全力去做一件事情,中断线程化就是把事情放线程里,等中断触发这个线程,然后让这个线程跟其他线程并行执行)时间触发系统的任务调度基于定时器中断,适用于周期性任务和确定性要求高的场景,如控制系统。
原创
发布博客 2024.10.22 ·
310 阅读 ·
3 点赞 ·
0 评论 ·
9 收藏

400行程序写一个实时操作系统(十一):arm cortex m3架构

通过上一篇文章,我们已经知道了一个RTOS的基本框架,寄存器这个概念已然跃出水面,摆在我们面前的难题是对arm架构的理解。以上就是本文要探讨的重点,即arm cm3中的栈、中断与上下文切换,笔者将会结合sparrow源码来理解官方手册。这是arm cortex m3和arm cortex m4的参考手册,有需要的读者自取,加上cm4的手册是考虑cm3的手册不详细。
原创
发布博客 2024.10.19 ·
922 阅读 ·
20 点赞 ·
0 评论 ·
29 收藏

400行程序写一个实时操作系统(十):用面向对象思想构建抢占式内核

通过前几章的学习,我们学会了如何为RTOS设计一个合理的内存管理算法。现在,是时候学习设计RTOS内核了。关于RTOS内核的文章也有很多,但都有一点先射箭再化靶子的意味。要么是代码连篇解释却寥寥无几,要么是要先怎么样再怎么样的说教式教程。并不是说这样的教程不好,而是他们缺乏读者普遍需要的东西,也就是更关键的思想方法!为此,笔者决定:从我们的需求与应用出发,通过从结果思考过程的方式,使用面向对象的思想,逐步构建一个RTOS的内核。现在,我们的大蓝图已经构建完毕,各种对象与它们之间的关系已然跃出水面。
原创
发布博客 2024.10.18 ·
819 阅读 ·
8 点赞 ·
0 评论 ·
11 收藏

400行程序写一个实时操作系统(九):替换FreeRTOS的内存管理算法

文章开头简单说明了我们编写内存管理算法的意义,为了验证编写内存管理算法的稳定性,笔者带领大家在移植了FreeRTOS的工程中,将FreeRTOS的内存管理算法文件heap4.c的代码替换为我们自己编写的内存管理算法,然后编译下载移植后的程序,观察单片机的现象,验证我们自己编写的内存管理算法的正确性。内存管理无处不在,虽然操作系统的复杂程度的不同,但是内存管理算法的核心思想是一样的,都是为了更合理的内存分配,减少内存碎片的产生,从而提高内存的使用率。我们完成的内存管理算法,被称为小内存管理算法。
原创
发布博客 2024.10.16 ·
955 阅读 ·
21 点赞 ·
0 评论 ·
9 收藏

400行程序写一个实时操作系统(八):(必看!)使用gdb调试错误的程序

⽬前的主流CPU架构都是⽤栈来进⾏函数调⽤的,栈上记录了函 数的返回地址,因此通过递归式寻找放在栈上的函数返回地址,便可 以追溯出当前线程的函数调⽤序列,这便是栈回溯(stack backtrace) 的基本原理。r命令是运行命令,不过在clion的gdb里面,点击右边那个小虫子,程序就自动运行到断点处了,如果是在linux环境下使用gdb是需要使用r命令运行程序的,但是在clion下是不用的。我们现在已经知道了,是heap_init导致了错误,也就是说,很有可能是我们的内存管理算法出现了问题。
原创
发布博客 2024.10.15 ·
925 阅读 ·
21 点赞 ·
0 评论 ·
12 收藏

400行程序写一个实时操作系统(七):内存管理算法的完整实现

上一篇笔者讲了内存分配的算法,是适合让我们一步步实现这些算法了,一共有四个函数,分别是初始化、分配、释放、插入。初始化后的内存分布如图所示:相邻相邻theheap头部尾部内存块简单来说,就是我们要在大内存数组起始地址和终结地址分别创建两个heap_node节点,用于管理这个内存块,然后将它们使用指针连起来,还记得上一篇博客中我们定义的theheap吗
原创
发布博客 2024.10.14 ·
903 阅读 ·
23 点赞 ·
0 评论 ·
16 收藏

400行程序写一个实时操作系统(六):内存管理算法(写一个malloc)

先简单复习一下指针:指针的本质是要求值必须为地址的变量。int a,代表在内存中开辟一片空间,空间存放a的值。int *a,代表在内存中开辟一片空间,空间存放a的值,只不过此时a的值是一个地址,可以通过这个值找到另一块内存空间。当我们进行 int *a = malloc(sizeof(xxx))的操作时,实际上就是改变这片空间存储的值。此时a就是一个有意义的值,它代表一个存在且可以被存放的内存空间的地址。那么,当我们随机定义一个指针并且要对这片内存操作时,会发生什么呢?int *a;*a = 1。
原创
发布博客 2024.10.14 ·
743 阅读 ·
5 点赞 ·
0 评论 ·
16 收藏

400行程序写一个实时操作系统(五):本系列教程的基本思想

当我们跳转进一个又一个的函数,相信我们早已经迷失了目标,此时,我们才会感受到模块化开发的好处,所以,笔者推荐使用面向对象的思想看待内核中的各个部分,这样才能让我们不迷失方向,也能帮助我们写出更加健壮、维护性更好的程序。但是,坦白来说,写一个RTOS并不是一件简单的事情,没有一些思考与体会,仅仅只是“抄”出一个RTOS来,是没有任何用处的,所以,请允许笔者继续讲一些 “废话”。打个比方,A让B去帮她拿一本书。在这里,A、B就是两个不同的对象,”拿一本书“是B的一个方法,A让B去做事情,这是A的一个方法。
原创
发布博客 2024.10.13 ·
364 阅读 ·
4 点赞 ·
0 评论 ·
5 收藏

400行程序写一个实时操作系统(四):观察运行中的Sparrow

通过对RTOS原理的一些简单介绍以及上手调试,我们大概知道了RTOS的运行原理:通过中断来进行上下文切换,同时systick中断会不断触发中断,从而使各个任务不断进行切换,从而模拟并行线程。
原创
发布博客 2024.10.13 ·
924 阅读 ·
22 点赞 ·
0 评论 ·
8 收藏

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

千里之行始于足下,为了让大家的学习更加事半功倍,笔者将会介绍RTOS的学习方法。可能很多人拿到一份源码,就想通过各种方式搞懂它,例如抄代码或者读代码。笔者认为,单纯抄一个实时操作系统是没有任何用处的。比如对于Sparrow,它的程序仅仅有四百行,不到一天就可以抄完,但是又能收获什么呢?老实说,笔者也干过抄源码和看源码这种事情,比如,笔者曾经抄过FreeRTOS五千多行源码,耗费了大量时间,也尝试看过linux内核源码,但是,这样的效率非常低,甚至是几乎没有任何用处。
原创
发布博客 2024.10.12 ·
735 阅读 ·
24 点赞 ·
0 评论 ·
11 收藏

400行程序写一个实时操作系统(二):sparrow与FreeRTOS的对比

sparrow是笔者开发的一款极小型RTOS,代码仅有400行,但是作为一个RTOS内核,笔者认为它是合格的,读者可以将它看成是一个mini版本的FreeRTOS内核,它实现了动态内存管理、阻塞延时、多线程、优先级、低功耗空闲任务等功能,与FreeRTOS内核相比,它的遗憾是同优先级(时间片)没有实现。但是,笔者的Sparrow作为一个学习用途的极微型RTOS,它的目的是为了方便读者学习RTOS内核的本质,学习操作系统、arm架构以及gnu c等知识,所以它的要求就是实现基本的功能,以及:能跑就行!
原创
发布博客 2024.10.12 ·
795 阅读 ·
24 点赞 ·
0 评论 ·
19 收藏
加载更多