summaryrefslogtreecommitdiff
path: root/components/rust/examples/modules/example_lib/src
diff options
context:
space:
mode:
Diffstat (limited to 'components/rust/examples/modules/example_lib/src')
-rw-r--r--components/rust/examples/modules/example_lib/src/lib.rs30
1 files changed, 30 insertions, 0 deletions
diff --git a/components/rust/examples/modules/example_lib/src/lib.rs b/components/rust/examples/modules/example_lib/src/lib.rs
new file mode 100644
index 0000000000..5f81c1553f
--- /dev/null
+++ b/components/rust/examples/modules/example_lib/src/lib.rs
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2006-2024, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author notes
+ * 2025-10-10 foxglove Basic library module template
+ */
+#![no_std]
+/* Bring rt-rust's println! macro into scope */
+use rt_rust::println;
+use core::ffi::{c_char, CStr};
+#[unsafe(no_mangle)]
+pub extern "C" fn rust_mylib_println(s: *const c_char) {
+ if s.is_null() {
+ println!("");
+ } else {
+ let cs = unsafe {CStr::from_ptr(s)};
+ match cs.to_str() {
+ Ok(msg) => println!("{}", msg),
+ Err(_) => println!("[invalid UTF-8]"),
+ }
+ }
+}
+
+#[unsafe(no_mangle)]
+pub extern "C" fn rust_mylib_add(a: usize, b: usize) -> usize {
+ a + b
+} \ No newline at end of file