From d8847067a8a1c3ba80f286d9cd1a8ec3fbb9472a Mon Sep 17 00:00:00 2001 From: Balduin Date: Fri, 3 Jul 2026 15:16:44 +0200 Subject: [PATCH] refactor(sih): remove local variable to save stack A recent SIH log (V6X) was full of: WARNING: [px4] [load_mon] sih low on stack! (144 bytes left) Using PublicationData (which holds the esc_status_s in heap rather than stack) fixes them and adheres to the philosophy from the module description: "Most of the variables are declared global in the .hpp file to avoid stack overflow" --- src/modules/simulation/simulator_sih/sih.cpp | 6 ++++-- src/modules/simulation/simulator_sih/sih.hpp | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/modules/simulation/simulator_sih/sih.cpp b/src/modules/simulation/simulator_sih/sih.cpp index 9b7f560cd98..6edc6bfcca0 100644 --- a/src/modules/simulation/simulator_sih/sih.cpp +++ b/src/modules/simulation/simulator_sih/sih.cpp @@ -368,8 +368,10 @@ uint8_t Sih::num_motors() const void Sih::publish_esc_status() { - esc_status_s esc_status{}; + esc_status_s &esc_status = _esc_status_pub.get(); esc_status.timestamp = hrt_absolute_time(); + esc_status.esc_online_flags = 0; + esc_status.esc_armed_flags = 0; int motor_idx = 0; bool any_motor_running = false; float max_rpm = 10000.f; @@ -404,7 +406,7 @@ void Sih::publish_esc_status() esc_status.esc_armed_flags = (1u << motor_idx) - 1; } - _esc_status_pub.publish(esc_status); + _esc_status_pub.update(); } void Sih::generate_force_and_torques(const float dt) diff --git a/src/modules/simulation/simulator_sih/sih.hpp b/src/modules/simulation/simulator_sih/sih.hpp index a58c58c0542..f268128e097 100644 --- a/src/modules/simulation/simulator_sih/sih.hpp +++ b/src/modules/simulation/simulator_sih/sih.hpp @@ -132,7 +132,7 @@ private: PX4Rangefinder _px4_rangefinder{10092548}; // 10092548: DRV_DIST_DEVTYPE_SIM, BUS: 0, ADDR: 0, TYPE: SIMULATION uORB::Publication _airspeed_pub{ORB_ID(airspeed)}; uORB::Publication _ranging_beacon_pub{ORB_ID(ranging_beacon)}; - uORB::Publication _esc_status_pub{ORB_ID(esc_status)}; + uORB::PublicationData _esc_status_pub{ORB_ID(esc_status)}; // groundtruth uORB::Publication _angular_velocity_ground_truth_pub{ORB_ID(vehicle_angular_velocity_groundtruth)};