该主页已开启公开访问,可查看作者最新发布的文章和创作记录。
创作概览
这里汇总该用户公开内容的产出和互动情况。
最近发布
这里展示该用户最近公开发布的文章。
分歧路口,前途漫漫
分歧路口,前途漫漫 人的记忆是一种不讲道理的存储介质。 它不会替你长久记住每一次汇报的标题、每一版代码的修改痕迹,也不会在很多年后,还清楚复现某个项目推进时所有曲折的细节。 它真正固执留下来的,反而总是一些看似无关紧要...
第二讲:USART2 + PB8(DE/RE) + TIM6是怎样组成 RS485 驱动层的
第二讲:USART2 + PB8(DE/RE) + TIM6是怎样组成 RS485 驱动层的 项目地址(对应分支) 仓库主页: https://github.com/AIITVisionLab/shihu 本讲对应分...
从 0 到 1 让 ESP32-S3 跑 JavaScript:Moddable SDK 与 xsbug 调试初体验
从 0 到 1 让 ESP32-S3 跑 JavaScript:Moddable SDK 与 xsbug 调试初体验 这篇记录的是一个最小可运行的 Moddable 工程搭建过程:在 Windows + VS Code...
RTOS设计与开发(12):稳定Public API,umbrella header、兼容层与边界收口
RTOS设计与开发(12):稳定Public API,umbrella header、兼容层与边界收口 当一个 RTOS 从“自己能跑”开始走向“给别人用”,最容易被低估的一件事,其实不是再多加一个对象,而是收口 pu...
RTOS设计与开发(11):软件定时器,active list、expired FIFO 与 daemon task
RTOS设计与开发(11):软件定时器,active list、expired FIFO 与 daemon task 软件定时器是 RTOS 很容易“看起来简单,做起来很脏”的模块。 你当然可以在 SysTick 里直...
RTOS设计与开发(10):panic、断言与栈诊断,先把错误路径收口
RTOS设计与开发(10):panic、断言与栈诊断,先把错误路径收口 内核一旦开始有 mutex、消息队列、软件定时器,错误路径的复杂度就会迅速上升。 这个阶段最值得写的一点,不是“又多了一个模块”,而是 RTOS ...
RTOS设计与开发(9):互斥锁与优先级继承,把同步真正接到调度器里
RTOS设计与开发(9):互斥锁与优先级继承,把同步真正接到调度器里 信号量和消息队列打通之后,RTOS 的对象层已经能做“同步”和“通信”了,但还缺最关键的一块:互斥锁。 互斥锁和信号量最大的区别,从来不只是 API...
RTOS设计与开发(8):最小消息队列,环形缓冲、双等待链表与deadline重试
RTOS设计与开发(8):最小消息队列,环形缓冲、双等待链表与deadline重试 信号量解决的是“有没有一个可用资源”的问题,消息队列解决的则是“有没有一条具体数据可以交给别人”。 当前仓库里的 "os_queue"...
RTOS设计与开发(7):二值信号量与优先级等待链表,先把同步原语打通
RTOS设计与开发(7):二值信号量与优先级等待链表,先把同步原语打通 调度器、超时等待、PendSV 和 SysTick 都接好之后,RTOS 才终于有资格往上做同步原语。 在当前仓库里,第一块真正落地的对象层能力是...
RTOS设计与开发(6):延时、阻塞、超时与任务删除,把生命周期真正闭环
RTOS设计与开发(6):延时、阻塞、超时与任务删除,把生命周期真正闭环 如果说前一阶段主要解决的是“时基和抢占什么时候发生”,那么这一阶段任务层真正补上的,是“任务从创建到退出,中间所有状态迁移到底怎么收口”。 这版...
RTOS设计与开发(5):SysTick、临界区与PendSV优先级,把抢占时基做扎实
RTOS设计与开发(5):SysTick、临界区与PendSV优先级,把抢占时基做扎实 前面几篇文章把 ready queue、时间片和 PendSV 切换链路搭起来之后,内核其实已经“能切任务”了。 但“能切”和“能...
第一讲:如何实现现场采集网关(1)
第一讲:如何实现现场采集网关(1) 项目地址(对应分支) 仓库主页: https://github.com/AIITVisionLab/shihu 本讲对应分支: https://github.com/AIITVis...
“我推”如何被养成:二创中的角色再生产与粉丝共识
“我推”如何被养成:二创中的角色再生产与粉丝共识 摘要 本文聚焦二游玩家围绕角色展开的二创实践,试图回答“我推”是如何被养成的。 文章认为,二游角色并非只由官方写成,也会在玩家社群“产粮—吃粮—讨论—归档”的循环中被不...
玩家为何会爱上游戏角色?——从角色厨到虚构恋爱
玩家为何会爱上游戏角色?——从角色厨到虚构恋爱 摘要 本文关注一个越来越常见的现象:玩家为什么会对游戏角色动真感情,甚至把这种感情理解为“爱”。 本文认为,“角色厨”并不只是对角色的普通喜好,而是包含高强度情感投入、长...
序言:千年之后还剩下什么
序言:千年之后还剩下什么 一个实验室真正值得骄傲的,从来不只是做出了多少作品,更不是某一届成员曾短暂地把某个项目推到多高的位置。真正重要的是,当时间继续向前、人员不断更替、最初的开发者终将离开之后,这些项目是否还能被后...
从游戏消费到身份护教:简中互联网二次元游戏“孝子”的现象分析
摘要 在简体中文互联网语境中,二次元游戏玩家中的高强度忠诚者,即俗称“孝子”的群体,常常表现出比其他游戏品类更高的公共可见度、更强的情感动员能力以及更显著的舆论扩张性。本文试图回答两个问题: - 一、为什么二次元游戏社...
RTOS内核开发实战(4):Cortex-M3端口层,初始栈帧、PendSV与首任务启动
当链表、TCB、ready queue 和调度器基本站稳之后,RTOS 才真正来到一个分水岭:前面的代码都还在“决定谁该运行”,而 port 层要解决的是另一件更硬的问题,怎么让 CPU 真的切到那个任务去执行。 当前...
RTOS内核开发实战(3):任务创建、时间片轮转与状态提交,让调度器真正运转
有了 "tcb_t" 和 "ready_queue_t",调度器就已经“能存东西”了,但还不等于“能工作”。 真正让内核运转起来的,是三个关键动作: 1. 创建任务时把它合法地放进 runnable 集合。 2. 调度...
RTOS内核开发实战(2):TCB、优先级位图与Ready Queue,把可运行任务集合建起来
把链表打好之后,下一步不是立刻写 PendSV,而是先定义“调度器眼里的任务”到底长什么样。 当前这版代码里,这个问题的答案落在 "tcb_t" 和 "ready_queue_t" 两个结构上。 先回答一个问题:调度器...
RTOS内核开发实战(1):侵入式双向链表,先把内核“挂链”这件事做对
做 RTOS,最先落地的往往不是调度算法,而是数据结构。 任务要进 ready list,延时任务要进 sleep list,后续做信号量、消息队列时还会有等待链表。如果底层链表设计得不稳,后面的调度、阻塞、超时唤醒都...
RTOS设计与开发(4):信号量、互斥锁、消息队列:同步、互斥与通信的内核视角
在学完异常模型、PendSV 任务切换、Ready/Blocked 状态管理之后,RTOS 的骨架已经搭起来了。 但一个真正可用的 RTOS,不能只会“切任务”,还必须解决三个更实际的问题: - 任务之间怎么同步 - ...
RTOS设计与开发(3):阻塞态与就绪态管理:谁该运行,谁该等待,谁该被唤醒
在学完 Cortex-M 异常模型、PendSV 任务切换之后,很容易产生一种错觉: «RTOS 不就是“保存一下现场,再恢复另一个任务的现场”吗?» 其实不是。 上下文切换只是执行层面的动作,RTOS 更本质的能力是...
如何在 RV1126B 开发板上部署 Minecraft 服务器
1. 前言 ARM 开发板通常更多用于边缘计算、视觉推理、网关服务或嵌入式应用,但只要系统环境合适,它同样可以承载一些轻量级通用服务。本文记录一次在 ELF-RV1126B 开发板 上部署 Paper Minecraf...
RTOS设计与开发(2):PendSV 作为上下文切换异常
一、这一部分要解决什么问题 在 Cortex-M 的 RTOS 里,任务切换一般不是“直接跳到另一个函数”,而是: «保存当前任务上下文 → 切换栈指针 → 恢复下一个任务上下文» 而完成这件事的标准套路就是: - S...
RTOS设计与开发(1):从栈开始理解 Cortex-M3 异常模型
一、“从水下的第一个生命的萌芽开始......” 如果想从 0 设计一个运行在 Cortex-M3 上的 RTOS,那么有一部分内容几乎绕不过去: - 栈到底是什么 - MSP / PSP 是什么 - Thread m...