#risc-v #wch #qingke

no-std qingke-rt

Minimal runtime / startup for WCH's RISC-V MCUs, managed by the ch32-rs team

10 unstable releases (3 breaking)

new 0.4.0 Oct 20, 2024
0.3.0 Oct 10, 2024
0.2.1 May 14, 2024
0.1.12 May 9, 2024
0.1.7 Jan 1, 2024

#1776 in Embedded development

Download history 77/week @ 2024-06-30 5/week @ 2024-07-21 27/week @ 2024-07-28 20/week @ 2024-08-04 1/week @ 2024-08-11 93/week @ 2024-09-01 50/week @ 2024-09-08 6/week @ 2024-09-15 42/week @ 2024-09-22 17/week @ 2024-09-29 210/week @ 2024-10-06 29/week @ 2024-10-13

298 downloads per month
Used in ch58x-hal

MIT/Apache

53KB
1K SLoC

Rust 886 SLoC // 0.0% comments Alex 183 SLoC Shell 3 SLoC

qingke-rt

Replaces ch32v-rt as the name is not suitable for publishing.

QingKe is the name of the RISC-V core.

Usage

#[qingke_rt::entry]
fn main() -> ! {
    loop {}
}

// Or if you are using the embassy framework
#[embassy_executor::main(entry = "qingke_rt::entry")]
async fn main(spawner: Spawner) -> ! { ... }

#[qingke_rt::interrupt]
fn UART0() {
    // ...
}

// Interrupt provided by the IP core (not peripherals)
#[qingke_rt::interrupt(core)]
fn SysTick() {
    // ...
}

#[qingke_rt::highcode]
fn some_highcode_fn() {
    // ...
    // This fn will be loaded into the highcode(SRAM) section.
    // This is required for BLE, recommended for interrupt handles.
}

lib.rs:

Differences vs the riscv-rt version

  • The structure of exception handlers is different
  • The structure of core interrupt handlers is different
  • Hardware stack push is available, so no need to push manually

Dependencies

~2MB
~43K SLoC