CoreCat:画模块电路的好帮手
Drag modules, edit ports, connect wires, and fxxk Visio.
四款开源软件,打造最强墨水屏阅读器
开源什么的最棒了!
为学习而生の魔法传送门
若要足时今足矣、以为未足何时足。
从零开始学RISC:第十六篇
神秘 j8
反汇编的程序中,总能看到一堆神秘j 8,这是什么?
j 8实际上是个伪指令,会被翻译成jal x0,8,即不保存返回地址直接跳走。在判断比较后跳转中常会看见。
此外,这个j 8后面还跟了已知符号__BSS_END__来做相对标注,标识出0x8 = __BSS_END__ - 0x11bc。
历史遗留问题:CoreMark与ee_printf
我们想一下 之前 移植CoreMark后遇到的问题:在每次的crc更新后,必须插入一句ee_printf。这个问题我们还没有解决。
反汇编分析
这个问题可能出现在哪?我们回过头看一下原先出问题的C代码:
1234seedcrc = crc16(results[0].seed1, seedcrc);seedcrc = crc16(results[0].seed2, seedcrc);seedcrc = crc16(results[0].seed3, seedcrc);seedcrc = crc16(results[0].size, seedcrc);
注意到,这是函数的连续调用。连续调用很可能在寄存器返回值、紧邻的下一次调用参数装载或 ...
从零开始学RISC:第十五篇
三权分立:USM
我们在 从零开始学RISC:第十三篇 中支持了基础的机器模式M-Mode所需要的CSR寄存器。运行一些简单的程序大抵是够了,如裸机C程序或是汇编等。但在实际生产环境中,这根本不够。
我们考虑更复杂的情况。RISC-V规范规定,M 模式是唯一强制要求的模式,U 模式面向应用,而 S 模式面向操作系统。特权级就是用来给软件栈不同组件之间做保护的,为了后续能更方便地移植,我们这里就要考虑不同的特权级对不同指令进行分层,分出个三六九等。低等指令禁止访问高等资源,就是这种感觉。
放到实际系统里,就是:
U 模式跑用户进程;
S 模式跑内核;
M 模式留给最底层固件/安全监控/平台控制。
这样应用、内核、固件三层彼此分开,任何一层出问题,都不至于直接拿到“整机最高权限”。
实际上,RISC-V 规范本身就把只支持 M 的实现定位在简单嵌入式系统,支持M和U的算是更强调隔离的嵌入式系统,而同时支持M、U与S,才算是面向类 Unix 系统的典型组合。
defines.svh 修改
首先加一些需要用到的宏:
123456789101112131415161718192021222 ...
全栈 Cloudflare 部署的小型在线语音房
前言
最近玩杀戮尖塔2玩的上头疯了,身边人全在玩,每次打开Steam都看到一堆正在联机爬塔的。
然后好友有的用KOOK有的用小黑盒有的用微信电话……太乱了。所以自己整一个多人在线语音房:
AI
release
commit
license
Online Demo
特点
100% AI生成,不含任何人工代码
基于全栈Cloudflare服务,轻松白嫖部署
简易控制台管理
定期清理
高通与小米,造就了历史上最完美的一次『合作』。
现在是大越狱时代!
Butterfly主题中自定义Highlight.js语法高亮
前言
看了一下 Highlight.js 的说明文档,不支持RISCV的汇编。只能自己摸索怎么高亮了。
因为Hexo在启动时就会对Markdown文件进行编译并转换成HTML文件,因此修改本地安装好的node库就行。
Highlight.js
在Hexo项目下的node_modules\highlight.js\lib内新建riscvasm.js和riscvasm.js.js:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130/*Language: RISC-V Assembly ...
从零开始学RISC:第十四篇
CoreMark移植
功能验证和CSR都做完了,该跑个分了。
CoreMark 是由 EEMBC 推出的一个处理器基准测试(benchmark),主要用来衡量 嵌入式处理器、MCU 和 CPU 内核的整数运算性能。它的设计目标是尽量只测试“处理器核心本身”的能力,而不过多受操作系统、外设或平台差异影响,因此很常被用来做不同芯片之间的横向比较。
源代码获取
源代码可以在eembc/coremark获取。
目录结构
CoreMark的库底下有很多文件。我们只需要关心barebones文件夹下的内容即可,这是适用于裸机的移植方案。
1234567891011121314151617181920├── barebones/ # barebones 移植│ │ # 这两个文件需要修改│ ├── core_portme.c # coremark 的平台移植层实现模板│ ├── core_portme.h # 核心可移植层头文件│ ││ ├── core_portme.mak # Makefile│ ...
Python脚本实现PDF书签的修改与导入导出
前言
在 使用PDFBookmark-Exchanger对PDF书签导入导出 中用了个Java写的软件导入导出。臃肿又不好看!还不如TerminalUI呢。遂拿Python重新写了一个。感谢Claude Opus 4.6。
代码
需要PyMuPDF才能正常运行。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815 ...






