Skip to content

Firmware 层熟悉:增加 UART hex 输出与性能计数读取 #1

Description

@NoNormalCreeper

背景

当前 firmware 从 main.c 启动,通过 gpio_write_led()uart_puts()mmio_write(TEST_EXIT) 走完整的 CPU -> MMIO -> SoC 路径。你需要理解裸机 C 如何通过 MMIO 访问硬件。

任务

  1. 增加 uart_puthex32(unsigned int value),功能参照名称。
  2. 增加 perf_read_cycle()perf_read_instret()
  3. main.c 中打印 LED 值、cycle、instret,例如:LED=0x00000005
  4. 不使用 printf,不引入 libc。
  5. 更新构建脚本,把新增 .c 文件加入 firmware 构建。
  6. 自己测试自己。

建议文件:

firmware/drivers/uart.h
firmware/drivers/uart.c
firmware/drivers/perf.h
firmware/drivers/perf.c
firmware/main.c
scripts/build_firmware.sh

需要理解

  • uart_puthex32 为什么最终还是调用 uart_putc?
  • uart_putc 为什么要先读 UART_STATUS?
  • 读 cycle/instret 是 load 还是 store?
  • firmware 里的地址如何和 RTL 的 tinybus_defs.vh 对齐?

自我评判

scripts/build_firmware.sh
sim/run_sim.sh minisoc
scripts/test_local.sh

交付物

  1. 小 PR / commit
  2. 理解 C 函数 -> MMIO 地址 -> PicoRV32 load/store -> tinybus_decode -> SoC 行为
  3. 能解释反汇编里对应的 MMIO 访问

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

wontfixThis will not be worked on

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions