自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(105)
  • 收藏
  • 关注

原创 Peripheral Drivers in ESP-IDF(4)——UART(1)

ESP-IDF使用uart_obj_t结构体来抽象一个UART设备中可能拥有的所有属性,以及数据缓冲区和一些读写数据时应该记录的信息,这个结构体拥有的域比较繁杂,具体的字段我们在驱动中遇到时再展开解释/*!< UART 端口号 (0, 1, 2) *//*!< UART 事件队列大小 *//*!< UART 中断处理程序句柄 *//*!< UART 模式 (UART / RS485 / IRDA) *//*!< RS485 碰撞检测标志 *//*!< UART RX 超时检测标志 *//*!

2025-03-18 14:22:05 864

原创 Peripheral Drivers in ESP-IDF(3)——WatchDog Timer

本文介绍了ESP32系列MCU中看门狗定时器相关的内容,以及在ESP-IDF中对看门狗的软件抽象以及封装。具体来说,IDF中利用硬件上的两个定时器组中的看门狗定时器,分别作为了任务看门狗(MWDT0)和中断看门狗(MWDT1),并分别通过监视FreeRTOS中的两大基本机制——IDLE TASK和tick中断,实现了对非法超时情况的监视与警告。

2025-02-11 15:16:14 734

原创 Peripheral Drivers in ESP-IDF(2)——GP Timer

这篇博客是ESP-IDF外设驱动系列的第二篇,这篇博客的研究对象是ESP32系列MCU中的定时器组,涉及到的和之前的思路类似,首先,随后深入研究定时器外设的使用方法和其驱动结构组织。

2025-01-20 16:03:53 833

原创 Peripheral Drivers in ESP-IDF(1)——GPIO

GPIO作为最基本的外设,它的构造和使用还是相对简单的,大部分情况下只需要写入对应管脚的配置寄存器即可改变对应GPIO管脚的属性。然而,GPIO的使用经常会和一些其他组件关联起来,例如GPIO交换矩阵IO多路复用器中断交换矩阵等。本篇博文对有关GPIO的一些基本操作进行了简要的介绍,并对有关GPIO的中断处理程序的基本工作流程做了较为详细的介绍。

2025-01-07 11:49:43 1014

原创 6.S081——CPU调度部分(Xv6中的进程的状态转换)——xv6源码完全解析系列(11)

好了,我们终于可以总结一下进程的各个状态,以及它们的具体含义和转换方式啦,这就当作一个完美的收官吧,Xv6内核中进程相关的状态及其转换关系如下图所示:哎呀,从没想过这篇博客会写这么长,不过这篇文章算是将Xv6中与进程有关的内容彻底收了个尾,也算是可以安心地进入Xv6中最复杂和体量庞大的文件系统了!

2024-06-18 11:11:27 1832 9

原创 2024届秋招小记

但我回顾过去的求学和生活经历,好像那些岁月静好的日子只是点缀,反而那些经历过的一个个挫折,一些伤心和痛苦的经历,一个个解过的bug才是构成我所有认知和个体的“骨架”。企业会收到很多优质的简历,但却无法分清这里有哪些人是真心想来的,只能不断地反复决策,等前面的人放弃了机会再联系排位靠后的人,整个招聘流程变得非常漫长和缓慢,尽管这样的情况一直存在,但海投一定会让事情变糟很多倍。这些留言和问题我都看到了,有关于Xv6系统的博客依然会更新下去,包括繁复冗长的文件系统的代码,我都会写下去的(又开新坑…

2023-10-21 01:53:03 1084 5

转载 Embedded Linux Development——Note (2)——字符设备驱动的开发流程

这篇文章是我学习Linux设备驱动开发的笔记,是在阅读正点原子的教程中的摘要,所以版权将会被标记为转载。我们首先梳理一下开发一款字符设备驱动程序的流程,然后在此基础上分析一下最简单的设备驱动程序LED的开发流程。最后作为补充,再加入一些关于新版驱动程序编写的流程。吐槽一下,正点原子的教程,逻辑太乱了,看的时候绕来绕去。假设我们我们已经有了一个字符设备驱动模块,驱动编译完成之后的模块后缀是.ko,有两种方法可以加载驱动模块:insmod和modprobe,它们的基本用法如下:insmod和rmmod是配对的

2023-08-05 16:42:27 678

原创 6.S081——CPU调度部分(CPU的复用和调度)——xv6源码完全解析系列(10)

终于到这里了,我们在之前阅读很多地方的内核代码时,总是习惯性地绕开CPU调度的部分(比如yield函数)。现在我们总算可以深入进去一探究竟了,这次总算是将整个操作系统中的一块重要拼图拼上去了。有操作系统相关基础概念的人应该知道,操作系统的其中一个重要功能是虚拟化(Virtulization)。这是OSTEP(Operating System : Three Easy Pieces,中译名:操作系统导论)提出的操作系统三大主题之一,另外两个是并发(Concurrency)和持久性(Consistency)。虚

2023-07-11 17:04:40 2641 20

原创 6.S081——并发与锁部分(自旋锁的实现)——xv6源码完全解析系列(9)

这段代码还会调用__sync_lock_release函数来原子地对锁进行释放,其实就是将锁的被占用标志原子地置为0。所以逻辑还是比较简单的,在阅读上述代码时,请多注意这些原子访存指令和内存屏障指令,它们是构成锁机制的核心。

2023-07-02 19:12:58 1156 3

原创 6.S081——设备中断与驱动部分(串口驱动与Console)——xv6源码完全解析系列(8)

真的是很复杂的流程啊,想必看到这里人都懵逼了吧,其实我也开始混乱了…console、键盘、屏幕、shell、串口,它们是怎么交互和连接的,现在是有点太过于拘泥于细节而失去了全局观了。下面我就画出整个连接关系的全貌,作为这两篇博客的总结。在上图中,循着任何一种颜色的线条都可以将流程顺利捋顺,这就是对整个部分的总结。console的定位就是一个软件抽象出来的设备体,它专门用来缓存用户输入的字符,并对其中输入的特殊字符和组合键进行预处理,使得串口可以正常打印,shell可以正常解析。

2023-06-26 23:38:10 1131 2

原创 6.S081——设备中断与驱动部分(串口驱动与Console)——xv6源码完全解析系列(7)

后续会将上述内容一一解释清楚。

2023-06-23 22:03:26 1854 3

原创 6.S081——Lab4——trap lab

但我们在实验中没有这么做,Xv6的内核实现中整个栈只有一页(4K)大小,所以我们完全可以。

2023-06-16 22:50:29 1448

原创 6.S081——陷阱部分(内核陷阱与时钟中断)——xv6源码完全解析系列(6)

在上一篇博客中,我们通过系统调用这个重要的机制了解了Xv6操作系统中。这篇博客则准备研究一下,在研究内核陷阱流程中一个麻烦的家伙是定时器中断,首先它是一种由CLINT转发而来的本地中断,定时器终端往往会导致CPU的调度,进而将陷阱的处理流程变得错综复杂,这篇博客并不打算深入研究调度过程,这部分内容我们放在后面阅读对应源码时仔细研究。上次我们在阅读。

2023-06-01 21:14:02 2156

原创 6.S081——补充材料——RISC-V架构中的异常与中断详解

在RISC-V标准中,将异常(exception)定义为当前CPU运行时遇到的与指令有关的不寻常情况,而使用中断(interrupt)定义为因为外部异步信号而引起的让控制流脱离当前CPU的事件。而陷阱(trap)表示的则是,由异常或者中断引起的控制权转移到陷阱处理程序的过程。其实Xv6的定义和RISC-V的定义是相互兼容的,我们说在Xv6中有三种方式会触发陷阱:系统调用、中断和程序异常,其实系统调用中的ecall指令和程序执行中的异常都属于RISC-V标准中定义的异常情况,而。

2023-05-30 23:56:35 8364 11

原创 6.S081——陷阱部分(一文读懂xv6系统调用)——xv6源码完全解析系列(5)

在动笔写下这篇博客时,我只是想把Xv6的系统调用过程一点点弄清楚梳理下来,在这个过程中我查阅了许多RISC-V规范和相关书籍,并一直参阅Xv6 Book。结果没想到弄清一个小小的write系统调用,我竟然写了1.2万字,才将这过程中每一行代码研究清楚。即便如此,这个过程中还是有一些残留的问题,比如开关中断的时机(intr_on,intr_off),以及为什么要在usertrap中再保留一份epc的值,这些要完全搞明白需要后面中断、调度的相关知识。

2023-05-03 17:12:03 3938 16

原创 6.S081——Lab3——page table

至此,就完成了6.S081 Fall 2021的第三个实验,有关虚拟内存和页表机制的实验内容。总的来说实验难度都没有很大,在指导书的帮助下可以很快完成。但是对于内核代码的研究却远远没有结束,接下来的实验内容涉及到操作系统中最重要的一个部分,那就是终端和陷阱机制的实现。已经迫不及待去扒一下对应的源码了…哈哈。

2023-04-19 14:18:14 2668 4

原创 6.S081——虚拟内存部分——xv6源码完全解析系列(4)

不妨去看看:)

2023-04-12 21:10:49 2021 3

原创 6.S081——虚拟内存部分——xv6源码完全解析系列(3)

没想到vm.c这份代码文件还没有读完,不过剩下的也就。这篇博客就将整个虚拟内存部分的代码收个尾,然后。

2023-04-10 12:29:18 2121 7

原创 6.S081——虚拟内存部分——xv6源码完全解析系列(2)

上一篇博客中,我们详细分析了xv6内核代码中有关虚拟内存的部分,主要剖析了vm.c这个文件中的三个全局变量和6个函数,这篇博客。接着剖析和阅读接下来的源码,同样

2023-04-06 13:04:19 3227

原创 6.S081——虚拟内存部分——xv6源码完全解析系列(1)

希望可以更好地理解OS内核本质

2023-04-01 13:30:11 4543 4

原创 6.S081——Lab2——system calls

本实验的目的是在xv6中实现系统调用,这个过程中涉及到一些xv6中系统调用的基本机制,如系统调用号、如何从用户态向内核传参数、如何将结果从内核空间再传回用户空间(copyout)等。但要更加深入的理解系统调用的全过程,还需要在后面。argraw的逻辑非常简单,就是从对应的trapframe中返回a0-a7寄存器,因为根据RISC-V的calling convention,头几个寄存器是。,上一个实验更多的是使用已有的设施去实现一些功能各异的程序,这需要我们对系统调用的过程有更加深入的理解。

2023-03-26 13:05:09 1616 1

原创 6.S081——Lab1——Xv6 and Unix utilities

这就是6.S081的第一个实验,主要考察的就是系统编程,其实其中后三个任务还是有一定难度的。不过经过编写这些代码,多少还是对系统调用有了更深的认识,这是很大的收获。其实在做xv6的实验时,更大的收获不是解决实验内容本身,这些实验内容只是xv6的很小一部分功能,要在解决问题的同时和内核代码一起玩耍,调试并阅读源码,这才是学习这门课的精华所在。

2023-03-23 23:45:56 1644 2

原创 LeetCode刷题笔记和周赛题解总目录

LeetCode刷题笔记与周赛题解总目录

2023-02-16 16:13:10 398

转载 Embedded Linux Development——Note (1)——嵌入式开发环境的搭建

这个系列博客记录在嵌入式Linux开发过程中,内容参考了的教程。首

2022-12-31 11:42:19 455

原创 LeetCode——Weekly Contest 321

这段时间经历了组会、开题、回家等等,这才发现周赛已经打到325场了,而我还没有写完321场的题解记录,真是汗颜啊。

2022-12-20 11:23:09 456

原创 Reading Note(10)——AutoBridge

这篇论文是FPGA 2021年的best paper award,主要解决的是在HLS编译过程中优化布局和布线,最终达到整个multi-die的FPGA板上的大规模HLS设计时钟频率尽可能提升的目的,这篇工作在当前chiplet工艺铺展开来的当下更加有现实意义,通过这篇文章学习一下如何对Multi-Die场景下的模块进行建模。这部分首先肯定了HLS作为工具链的高效性和实用性,但是也指出HLS工具目前的一个问题在于HLS和RTL级代码之间可以达成的性能差距很大。

2022-12-05 13:04:02 748 2

原创 LeetCode——Weekly Contest 320(附动态规划解题思路)

LeetCode周赛第320场记录。

2022-11-29 16:23:24 802

原创 Reading Note(8) ——GNN for DSE Optimization

这部分作为全文的摘要, 和上一篇AutoDSE一样,提出了当前开发FPGA加速器的主要难点在于FPGA的开发门槛太高。另一方面虽然HLS的诞生在一定程度上缓解了这个问题,但是它在很多层次上涉及到HLS参数的选择,这个解决空间是非常大的,这个选择非常依赖于设计者的经验。另一方面,从HLS工具获得结果反馈耗时也非常大,一般在几分钟到数小时。这篇工作针对这种情况开发了DSE-GNN框架,主要方法是通过GNN来拟合HLS模型来使得它可以应用于非常广泛的应用场景,从而使得设计者在毫秒级就可以得到。

2022-11-21 11:40:33 951

原创 LeetCode——Weekly Contest 319

LeetCode周赛第319场记录

2022-11-18 12:48:24 763

原创 LeetCode——Weekly Contest 318

LeetCode周赛第318场记录

2022-11-11 11:03:22 478

原创 Reading Note(7)——AutoDSE

AutoDSE论文精读

2022-11-07 10:27:53 582 2

原创 LeetCode——Weekly Contest 315&317

LeetCode周赛第315&317场记录

2022-10-30 20:32:30 800

原创 Let‘s Talk About HeteroCL(1)—— Reading Paper

摘要部分指出了当前应用需要部署在异构系统上的切实需求,但是由FPGA构成的异构系统往往面临着使用门槛高,使用不方便的现状,只有拥有丰富硬件知识和设计经验的程序员才可以自如地使用FPGA来进行异构计算加速。HeteroCL就是来解决这一问题的,HeteroCL由基于python的DSL和面向FPGA的编译流组成。除此之外,HeteroCL提供了一个非常干净的抽象层,可以将算法描述和计算调度、数据类型、访存结构三者解耦开来。

2022-10-23 13:18:58 632

原创 LeetCode——Weekly Contest 314

LeetCode周赛第314场记录周赛第一题,根据题意写出代码即可。首先根据logs计算出每项工作的实际用时,然后根据用时长短对员工的ID号进行排序即可。给出完整代码如下:2433. 找出前缀异或的原始数组这道题也很简单,主要就是考察异或运算的性质。本题考察的实际上就是性质2,我们只需要将pref的相邻两个数字两两异或就可以解密出原有数组arr,以下是完整代码:2434. 使用机器人打印字典序最小的字符串(模拟栈+贪心)这道题很容易在比赛时卡住,从题面的描述上可以很快地反应出对机器人的两种操作

2022-10-11 18:18:39 472 1

原创 LeetCode——Weekly Contest 313

LeetCode周赛第313场记录。

2022-10-08 20:56:52 359

原创 LeetCode——Weekly Contest 312

LeetCode周赛第312场记录。

2022-09-28 23:53:55 444

原创 LeetCode题解内容迁移

LeetCode题解不再发布在优快云,未来会就近记录在codetop.cc的个人题解,这样更加方便我快速复习。

2022-09-02 10:18:53 190

原创 LeetCode41——First Missing Positive——hashing in place & swap

这道题让我们找出一个数组中的缺失的第一个元素,也就是最小的一个正数,题面如下:其实如果只实现这个功能的话并不难,难点在于题目中对算法的时间和空间复杂度同时做出了约束,即时间复杂度是O(n)O(n)O(n),与此同时空间复杂度是O(1)O(1)O(1)。在完成这道题之前,有一个点非常重要的观察就是:对于长度为N的数组nums,其最小缺失的正数只会位于区间[1,N+1][1, N + 1][1,N+1]内,也就是说,长度为N的数组最多只会占用[1,N][1,N][1,N]这N个正整数,从而使缺失的第一个正

2022-06-28 21:18:04 276

原创 Advanced Computer Network Review(5)——COPE

本文参考资料来自:1.论文原文《XORs in The Air: Practical Wireless Network Coding》(SIGCOMM’06)2.课程演示文稿根据复习提纲,对于COPE应该弄懂以下几个问题:1.理解butterfly网络2.理解COPE的编码算法3.理解COPE的一个实例全文的一个核心是利用了异或(XOR)运算的一个特点,即a⊕b⊕b=aa \oplus b \oplus b = aa⊕b⊕b=a,即原始值经过两次异或某一个相数值后会变成原来的值,这是本文使用的

2022-06-12 00:36:58 953 2

原创 Advanced Computer Network Review(4)——Congestion Control of MPTCP

这篇文章对有关MPTCP的拥塞控制进行理解和梳理,参考资料来自:《Design, implementation and evaluation of congestion control for multipath TCP》(NSDI’11)和老师上课时的PPT。复习提纲中要理解的问题是:1.MPTCP拥塞控制的目标2.理解EWTCP和Coupled3.可以判断EWTCP和Coupled各自获取的带宽一、MPTCP拥塞控制的目标这部分是自己的理解和总结,从论文中来看,MPTCP拥塞控制的目标有两个:

2022-06-08 21:47:17 1909 9

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除