@@ -69,7 +69,7 @@ void cli_task(void *pvParameters) {
6969 }
7070}
7171
72- struct {
72+ struct sensor_task_s {
7373 ScheduleFreq sys_schedule = ScheduleFreq (10 ); // System log (10Hz)
7474 //ahr
7575 ScheduleFreq ahr_schedule = ScheduleFreq (cfg .bbx_log_ahr );
@@ -86,40 +86,44 @@ struct {
8686 //rcl
8787 ScheduleFreq rcl_schedule = ScheduleFreq (cfg .bbx_log_rcl );
8888 MsgSubscription < RclState > rcl_sub = MsgSubscription < RclState > ("log_rcl ", & rcl .topic );
89- RclState rcl_state ;
90- } g_sensor_task ;
89+ RclState rcl_state ;
90+
91+ void run () {
92+ for (;;) {
93+ //sensors
94+ if (bar .update ()) bbx .log_baro (); // barometer
95+ mag .update (); // magnetometer (logging is done with imu together)
96+ if (gps .update ()) bbx .log_gps (); // gps
97+ if (bat .update ()) bbx .log_bat (); // battery consumption
98+ if (rdr .update ()) bbx .log_rdr (); // radar
99+ if (ofl .update ()) bbx .log_ofl (); // optical flow
100+
101+ //logging
102+ if (sys_schedule .expired ()) {
103+ bbx .log_sys ();
104+ }
105+ if (imu_schedule .expired () && imu_sub .pull_updated (& imu_state )) {
106+ bbx .log_imu (& imu_state );
107+ }
108+ if (ahr_schedule .expired () && ahr_sub .pull_updated (& ahr_state )) {
109+ bbx .log_ahr (& ahr_state );
110+ }
111+ if (out_schedule .expired () && out_sub .pull_updated (& out_state )) {
112+ bbx .log_out (& out_state );
113+ }
114+ if (rcl_schedule .expired () && rcl_sub .pull_updated (& rcl_state )) {
115+ bbx .log_rcl (& rcl_state );
116+ }
117+ portYIELD ();
118+ }
119+ }
120+ };
91121
92122void sensor_task (void * pvParameters ) {
93123 (void )pvParameters ;
94124
95- for (;;) {
96- //sensors
97- if (bar .update ()) bbx .log_baro (); // barometer
98- mag .update (); // magnetometer (logging is done with imu together)
99- if (gps .update ()) bbx .log_gps (); // gps
100- if (bat .update ()) bbx .log_bat (); // battery consumption
101- if (rdr .update ()) bbx .log_rdr (); // radar
102- if (ofl .update ()) bbx .log_ofl (); // optical flow
103-
104- //logging
105- if (g_sensor_task .sys_schedule .expired ()) {
106- bbx .log_sys ();
107- }
108- if (g_sensor_task .imu_schedule .expired () && g_sensor_task .imu_sub .pull_updated (& g_sensor_task .imu_state )) {
109- bbx .log_imu (& g_sensor_task .imu_state );
110- }
111- if (g_sensor_task .ahr_schedule .expired () && g_sensor_task .ahr_sub .pull_updated (& g_sensor_task .ahr_state )) {
112- bbx .log_ahr (& g_sensor_task .ahr_state );
113- }
114- if (g_sensor_task .out_schedule .expired () && g_sensor_task .out_sub .pull_updated (& g_sensor_task .out_state )) {
115- bbx .log_out (& g_sensor_task .out_state );
116- }
117- if (g_sensor_task .rcl_schedule .expired () && g_sensor_task .rcl_sub .pull_updated (& g_sensor_task .rcl_state )) {
118- bbx .log_rcl (& g_sensor_task .rcl_state );
119- }
120-
121- portYIELD ();
122- }
125+ sensor_task_s * task = new sensor_task_s (); //create on heap, not on stack
126+ task -> run ();
123127}
124128
125129#define mf_xstr (s ) #s
0 commit comments