Luyoung
  • 首页
  • 归档
  • 分类
  • 标签
  • 关于
毕设(10):基于时间片的协作式多任务系统

毕设(10):基于时间片的协作式多任务系统

前言之前的 xOS 运行很简单,就是简单的 shell,用户通过输入命令,回车后,离开 shell,去执行具备某个功能的函数,执行完再返回。 这样的设计有问题,因为一旦离开 shell,就意味着不能再接受输入了。而且一旦遇到意外,比如执行了某些代码,可能就再也回不到 shell 了。 因此我打算对 xOS 进行升级,基于时钟中断和原来的异常入口。 从中断到调度任务的单位是线程 Thread,要对某
2026-01-24
SoC
#毕设
毕设(9):ps2 键盘

毕设(9):ps2 键盘

ps2 键盘的软件仿真在用户程序层面: 1234567891011121314151617181920212223242526272829int kb_get_scancode(void) { if (kb_head == kb_tail) { return -1; /* Buffer empty */ } uint8_t code =
2026-01-20
SoC
#毕设
毕设(8):minicom

毕设(8):minicom

遇到的问题由于 UART 串口屏幕不工作(可能是线路没接好),只能在仿真环境中运行正常。因此我打算把 UART_TX、UART_RX 的约束引脚绑定从原来的 GPIO 引脚到 FPGA 开发板自带的 CH340E 芯片的引脚上。 CH340E,一个 USB 总线的转接芯片,实现将串口转到 USB接口。这样我就能在下板子之后,将其和电脑 USB 接口连接,电脑上运行的 串口通信软件比如 minico
2026-01-20
SoC
#毕设
毕设(7):uart 的测试

毕设(7):uart 的测试

仿真系统中的测试因为之前的 UART 仿真测试思路是捕获 soc_top 中的信号: 1234567// APB UART simulation interface (directly from AXI slave mux to APB bridge)output wire apb_uart_awvalid, // 写地址有效output wire [`
2026-01-19
SoC
#毕设
毕设(6):ddr3 和 sd 卡的测试

毕设(6):ddr3 和 sd 卡的测试

前言SoC 搭建好了后,就可以测试 ddr3 了。我觉得这种测试思路很值得借鉴,尤其是在早期 SoC 的开发过程中。 首先我的设计目标是: 上电并且 reset 释放后,CPU 的 PC 直接访问 Boot ROM; Boot ROM 中放着一个bootloader,它的作用是从 sd 卡中搬运程序数据到 ddr3 中; 搬运完后,CPU 跳转到 ddr3 中执行目标程序。 以上要确保: 硬
2026-01-18
SoC
#毕设
毕设(5):mylibc

毕设(5):mylibc

GCC 自带头文件GCC 编译器自带了一些基础头文件,例如: <stdint.h> - 定义了标准整数类型(如 uint8_t、int32_t 等) <stddef.h> - 定义了 size_t、NULL 等基础类型和宏 <stdarg.h> - 提供了可变参数列表支持(va_list、va_start、va_end 等) 这些库提供了编译器内置的宏定义和
2026-01-15
libc
#毕设
毕设(4):HDMI_test

毕设(4):HDMI_test

uart给系统接一个 uart 串口屏,也可以运行一些简单的程序,比如简单的命令行程序。但是肯定没有 HDMI 显示方便,上节已经实现了 uart 输出一个简单的 xOS 终端,uart 的上限也就如此了。 HDMI当需要在 HDMI 显示器上显示字符时: 软件渲染:CPU/软件(如 xOS 的 hdmi_putc)根据字符 ASCII 码从字库中查找点阵数据,计算目标位置,并将对应的
2026-01-13
loongarch32r
#毕设
毕设(3):xOS 雏形

毕设(3):xOS 雏形

xOS上节仿真系统顺利从 uart 截获数据并顺利打印出字符,这节依赖于此,我要设计 xOS。 目前的 xOS 只支持栈区,也就是说它不支持堆区内存的分配。 启动代码启动函数做 4 件事情: 设置栈指针 清零 BSS 段 跳到 main 从 main 返回(实际上没必要返回,因为 main 返回之前可以设置一个死循环) 因此,启动代码大致如下: 123456789101112131415161
2026-01-11
loongarch32r
#毕设
毕设(2):Hello World!

毕设(2):Hello World!

基础工作type.h利用编译器内置的宏,可以精确的生成有无符号的 8、16、32等数据类型,这样就不用包含别人的库了: 123456789101112131415161718192021222324#ifndef __TYPES_H__#define __TYPES_H__typedef __INT8_TYPE__ int8_t;typedef __INT16_TYPE__ int16_t;typ
2026-01-10
loongarch32r
#毕设
毕设(1):地址空间的划分

毕设(1):地址空间的划分

地址空间由于计算机软件系统是一个裸机系统,因此没有虚拟内存系统,都是直接访存,也就是说 tlb 其实是相当于不工作的。 只要在start.S 中直接修改 csr 标记 CSR.CRMD.DA = 1 (直接地址模式)、CSR.CRMD.PG = 0 (关闭分页)。 地址段划分如下: 1234567891011121314151617181920212223242526272829303132333
2026-01-09
loongarch32r
#毕设
123…27

搜索

Hexo Fluid
总访问量 次 总访客数 人