1 Commits
main ... macros

Author SHA1 Message Date
97639138a1 macros and improvements 2025-11-04 14:49:47 -07:00
11 changed files with 87 additions and 70 deletions

53
Cargo.lock generated
View File

@@ -19,6 +19,7 @@ dependencies = [
"abi_sys",
"embedded-graphics",
"embedded-sdmmc",
"main_proc_macro",
"once_cell",
"rand_core 0.9.3",
]
@@ -350,7 +351,7 @@ checksum = "e37549a379a9e0e6e576fd208ee60394ccb8be963889eebba3ffe0980364f472"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.108",
]
[[package]]
@@ -447,7 +448,7 @@ dependencies = [
"proc-macro2",
"quote",
"strsim 0.11.1",
"syn 2.0.104",
"syn 2.0.108",
]
[[package]]
@@ -458,7 +459,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
dependencies = [
"darling_core",
"quote",
"syn 2.0.104",
"syn 2.0.108",
]
[[package]]
@@ -496,7 +497,7 @@ dependencies = [
"proc-macro-error2",
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.108",
]
[[package]]
@@ -645,7 +646,7 @@ dependencies = [
"darling",
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.108",
]
[[package]]
@@ -1019,7 +1020,7 @@ checksum = "4f6e621fe4c7e05b695274b722dc0a60bacd1c8696b58191baa0154713d52400"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.108",
]
[[package]]
@@ -1212,7 +1213,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.108",
]
[[package]]
@@ -1648,6 +1649,14 @@ version = "0.4.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
[[package]]
name = "main_proc_macro"
version = "0.1.0"
dependencies = [
"quote",
"syn 2.0.108",
]
[[package]]
name = "memchr"
version = "2.7.5"
@@ -1728,7 +1737,7 @@ checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.108",
]
[[package]]
@@ -1920,7 +1929,7 @@ dependencies = [
"proc-macro-error2",
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.108",
]
[[package]]
@@ -1987,7 +1996,7 @@ dependencies = [
"proc-macro-error-attr2",
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.108",
]
[[package]]
@@ -2001,9 +2010,9 @@ dependencies = [
[[package]]
name = "quote"
version = "1.0.40"
version = "1.0.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1"
dependencies = [
"proc-macro2",
]
@@ -2233,7 +2242,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.108",
]
[[package]]
@@ -2400,7 +2409,7 @@ dependencies = [
"heck 0.5.0",
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.108",
]
[[package]]
@@ -2429,9 +2438,9 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.104"
version = "2.0.108"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40"
checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917"
dependencies = [
"proc-macro2",
"quote",
@@ -2528,7 +2537,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.108",
]
[[package]]
@@ -2539,7 +2548,7 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.108",
]
[[package]]
@@ -2607,7 +2616,7 @@ dependencies = [
"darling",
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.108",
"uuid",
]
@@ -2766,7 +2775,7 @@ dependencies = [
"log",
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.108",
"wasm-bindgen-shared",
]
@@ -2788,7 +2797,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.108",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -2938,5 +2947,5 @@ checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
"syn 2.0.108",
]

View File

@@ -8,6 +8,7 @@ members = [
"user-apps/snake",
"user-apps/gallery",
"user-apps/gif",
"main_proc_macro",
]
[profile.release]

View File

@@ -4,8 +4,9 @@ version = "0.1.0"
edition = "2024"
[dependencies]
embedded-sdmmc = { version = "0.9.0", default-features = false }
embedded-graphics = "0.8.1"
abi_sys = { path = "../abi_sys" }
main_proc_macro = { path = "../main_proc_macro" }
embedded-sdmmc = { version = "0.9", default-features = false }
embedded-graphics = "0.8.1"
once_cell = { version = "1", default-features = false }
rand_core = "0.9.3"

View File

@@ -5,10 +5,20 @@ extern crate alloc;
pub use abi_sys::{self, keyboard};
use abi_sys::{RngRequest, alloc, dealloc, keyboard::KeyEvent};
pub use alloc::format;
use core::alloc::{GlobalAlloc, Layout};
use alloc::format;
use core::{
alloc::{GlobalAlloc, Layout},
panic::PanicInfo,
};
pub use main_proc_macro::main;
use rand_core::RngCore;
#[panic_handler]
fn panic(info: &PanicInfo) -> ! {
print!("user panic: {} @ {:?}", info.message(), info.location(),);
loop {}
}
#[global_allocator]
static ALLOC: Alloc = Alloc;
@@ -27,7 +37,7 @@ unsafe impl GlobalAlloc for Alloc {
#[macro_export]
macro_rules! print {
($($arg:tt)*) => {{
let s = $crate::format!($($arg)*);
let s = format!($($arg)*);
$crate::abi_sys::print(s.as_ptr(), s.len());
}};
}

View File

@@ -29,7 +29,6 @@ use crate::{heap::init_qmi_psram_heap, psram::init_psram_qmi};
use crate::{
abi::{KEY_CACHE, MS_SINCE_LAUNCH},
display::{FRAMEBUFFER, display_handler, init_display},
heap::HEAP,
peripherals::{
conf_peripherals,
keyboard::{KeyState, read_keyboard_fifo},
@@ -322,7 +321,7 @@ async fn kernel_task(
watchdog: Peri<'static, WATCHDOG>,
display: Display,
sd: Sd,
psram: Psram,
_psram: Psram,
mcu: Mcu,
usb: Peri<'static, USB>,
) {

View File

@@ -0,0 +1,11 @@
[package]
name = "main_proc_macro"
version = "0.1.0"
edition = "2024"
[lib]
proc-macro = true
[dependencies]
quote = "1.0.41"
syn = "2.0.108"

View File

@@ -0,0 +1,21 @@
use proc_macro::TokenStream;
use quote::quote;
use syn::{ItemFn, parse_macro_input};
#[proc_macro_attribute]
pub fn main(_attr: TokenStream, item: TokenStream) -> TokenStream {
let input = parse_macro_input!(item as ItemFn);
let name = &input.sig.ident;
// ensure we emit _start in the same module as the fn
let expanded = quote! {
#input
#[unsafe(no_mangle)]
pub extern "Rust" fn _start() {
#name();
}
};
expanded.into()
}

View File

@@ -9,7 +9,6 @@ use abi::{
print,
};
use alloc::{format, string::String, vec, vec::Vec};
use core::panic::PanicInfo;
use embedded_graphics::{
Drawable,
geometry::{Dimensions, Point},
@@ -26,12 +25,6 @@ use embedded_layout::{
prelude::Chain,
};
#[panic_handler]
fn panic(info: &PanicInfo) -> ! {
print!("user panic: {} @ {:?}", info.message(), info.location(),);
loop {}
}
#[unsafe(no_mangle)]
pub extern "Rust" fn _start() {
main()

View File

@@ -8,27 +8,16 @@ use abi::{
fs::{list_dir, read_file},
get_key,
keyboard::{KeyCode, KeyState},
print,
main, print,
};
use alloc::{format, string::ToString, vec};
use core::panic::PanicInfo;
use embedded_graphics::{
Drawable, image::Image, mono_font::MonoTextStyle, mono_font::ascii::FONT_6X10,
pixelcolor::Rgb565, prelude::*, text::Text,
};
use tinybmp::Bmp;
#[panic_handler]
fn panic(info: &PanicInfo) -> ! {
print!("user panic: {} @ {:?}", info.message(), info.location());
loop {}
}
#[unsafe(no_mangle)]
pub extern "Rust" fn _start() {
main()
}
#[main]
pub fn main() {
print!("Starting Gallery app");
let mut bmp_buf = vec![0_u8; 100_000];

View File

@@ -7,26 +7,15 @@ use abi::{
fs::{file_len, read_file},
get_key, get_ms,
keyboard::{KeyCode, KeyState},
print, sleep,
main, print, sleep,
};
use alloc::vec;
use core::panic::PanicInfo;
use alloc::{format, vec};
use embedded_graphics::{
image::ImageDrawable, pixelcolor::Rgb565, prelude::Point, transform::Transform,
};
use tinygif::Gif;
#[panic_handler]
fn panic(info: &PanicInfo) -> ! {
print!("user panic: {} @ {:?}", info.message(), info.location(),);
loop {}
}
#[unsafe(no_mangle)]
pub extern "Rust" fn _start() {
main()
}
#[main]
pub fn main() {
print!("Starting Gif app");
let mut display = Display;

View File

@@ -9,16 +9,10 @@ use abi::{
keyboard::{KeyCode, KeyState},
print, sleep,
};
use core::panic::PanicInfo;
use alloc::format;
use embedded_graphics::{pixelcolor::Rgb565, prelude::RgbColor};
use embedded_snake::{Direction, SnakeGame};
#[panic_handler]
fn panic(info: &PanicInfo) -> ! {
print!("user panic: {} @ {:?}", info.message(), info.location(),);
loop {}
}
#[unsafe(no_mangle)]
pub extern "Rust" fn _start() {
main()