mirror of
https://github.com/apache/nuttx-apps.git
synced 2026-10-06 05:43:01 +00:00
examples/rust: Avoid the infinite loop on sim for hello_rust_cargo
On the sim target (Windows/macOS/Linux), hello_rust_cargo_main() ended
with an infinite `loop {}` that never returned control to NSH, so the
example could not exit and the shell prompt hung.
Introduce a Cargo `sim` feature that is enabled only when CONFIG_ARCH_SIM
is set, and use it to compile out the trailing infinite loop and return 0
instead. Other embedded targets keep the original looping behavior.
Signed-off-by: Shoji Tokunaga <toku@mac.com>
This commit is contained in:
parent
ee4727fdba
commit
d1202bd501
6 changed files with 35 additions and 7 deletions
|
|
@ -21,7 +21,12 @@
|
|||
if(CONFIG_EXAMPLES_HELLO_RUST_CARGO)
|
||||
|
||||
# Build the Rust crate using nuttx_add_rust
|
||||
nuttx_add_rust(CRATE_NAME hello CRATE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
if(CONFIG_ARCH_SIM)
|
||||
nuttx_add_rust(CRATE_NAME hello CRATE_PATH ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
FEATURES sim)
|
||||
else()
|
||||
nuttx_add_rust(CRATE_NAME hello CRATE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
endif()
|
||||
|
||||
nuttx_add_application(
|
||||
NAME ${CONFIG_EXAMPLES_HELLO_RUST_CARGO_PROGNAME} STACKSIZE
|
||||
|
|
|
|||
|
|
@ -6,6 +6,9 @@ edition = "2021"
|
|||
[lib]
|
||||
crate-type = ["staticlib"]
|
||||
|
||||
[features]
|
||||
sim = []
|
||||
|
||||
[profile.dev]
|
||||
panic = "abort"
|
||||
|
||||
|
|
|
|||
|
|
@ -30,8 +30,12 @@ MODULE = $(CONFIG_EXAMPLES_HELLO_RUST_CARGO)
|
|||
RUST_LIB := $(call RUST_GET_BINDIR,hello,$(APPDIR)/examples/rust)
|
||||
RUST_SRCS := $(call RUST_CARGO_SRCS,hello,$(APPDIR)/examples/rust)
|
||||
|
||||
ifeq ($(CONFIG_ARCH_SIM),y)
|
||||
HELLO_RUST_FEATURES := sim
|
||||
endif
|
||||
|
||||
$(RUST_LIB): $(RUST_SRCS)
|
||||
$(call RUST_CARGO_BUILD,hello,$(APPDIR)/examples/rust)
|
||||
$(call RUST_CARGO_BUILD,hello,$(APPDIR)/examples/rust,$(HELLO_RUST_FEATURES))
|
||||
|
||||
context:: $(RUST_LIB)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
extern crate serde;
|
||||
extern crate serde_json;
|
||||
|
||||
use core::ffi::{c_char, c_int};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
|
|
@ -11,7 +12,7 @@ struct Person {
|
|||
|
||||
// Function hello_rust_cargo without manglng
|
||||
#[no_mangle]
|
||||
pub extern "C" fn hello_rust_cargo_main() {
|
||||
pub extern "C" fn hello_rust_cargo_main(_argc: c_int, _argv: *mut *mut c_char) -> c_int {
|
||||
// Print hello world to stdout
|
||||
|
||||
let john = Person {
|
||||
|
|
@ -50,7 +51,11 @@ pub extern "C" fn hello_rust_cargo_main() {
|
|||
println!("Hello world from tokio!");
|
||||
});
|
||||
|
||||
#[cfg(not(feature = "sim"))]
|
||||
loop {
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
#[cfg(feature = "sim")]
|
||||
0
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue