@@ -192,6 +192,39 @@ static mp_obj_t esp32_idf_heap_info(const mp_obj_t cap_in) {
192
192
}
193
193
static MP_DEFINE_CONST_FUN_OBJ_1 (esp32_idf_heap_info_obj , esp32_idf_heap_info ) ;
194
194
195
+ #if CONFIG_FREERTOS_USE_TRACE_FACILITY
196
+ static mp_obj_t esp32_idf_task_stats (void ) {
197
+ const size_t task_count_max = uxTaskGetNumberOfTasks ();
198
+ TaskStatus_t * task_array = m_new (TaskStatus_t , task_count_max );
199
+ uint32_t total_time ;
200
+ const size_t task_count = uxTaskGetSystemState (task_array , task_count_max , & total_time );
201
+
202
+ mp_obj_t task_list = mp_obj_new_list (0 , 0 );
203
+ for (size_t i = 0 ; i < task_count ; i ++ ) {
204
+ mp_obj_t task_data [] = {
205
+ mp_obj_new_str (task_array [i ].pcTaskName , strlen (task_array [i ].pcTaskName )),
206
+ mp_obj_new_int_from_uint (task_array [i ].xTaskNumber ),
207
+ MP_OBJ_NEW_SMALL_INT (task_array [i ].eCurrentState ),
208
+ MP_OBJ_NEW_SMALL_INT (task_array [i ].uxCurrentPriority ),
209
+ mp_obj_new_int_from_uint (task_array [i ].ulRunTimeCounter ),
210
+ mp_obj_new_int_from_uint (task_array [i ].usStackHighWaterMark ),
211
+ #if CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID
212
+ MP_OBJ_NEW_SMALL_INT (task_array [i ].xCoreID ),
213
+ #else
214
+ mp_const_none ,
215
+ #endif
216
+ };
217
+ mp_obj_t task = mp_obj_new_tuple (7 , task_data );
218
+ mp_obj_list_append (task_list , task );
219
+ }
220
+
221
+ m_del (TaskStatus_t , task_array , task_count_max );
222
+ mp_obj_t task_stats [] = { MP_OBJ_NEW_SMALL_INT (total_time ), task_list };
223
+ return mp_obj_new_tuple (2 , task_stats );
224
+ }
225
+ static MP_DEFINE_CONST_FUN_OBJ_0 (esp32_idf_task_stats_obj , esp32_idf_task_stats ) ;
226
+ #endif
227
+
195
228
static const mp_rom_map_elem_t esp32_module_globals_table [] = {
196
229
{ MP_ROM_QSTR (MP_QSTR___name__ ), MP_ROM_QSTR (MP_QSTR_esp32 ) },
197
230
@@ -204,6 +237,9 @@ static const mp_rom_map_elem_t esp32_module_globals_table[] = {
204
237
{ MP_ROM_QSTR (MP_QSTR_raw_temperature ), MP_ROM_PTR (& esp32_raw_temperature_obj ) },
205
238
#endif
206
239
{ MP_ROM_QSTR (MP_QSTR_idf_heap_info ), MP_ROM_PTR (& esp32_idf_heap_info_obj ) },
240
+ #if CONFIG_FREERTOS_USE_TRACE_FACILITY
241
+ { MP_ROM_QSTR (MP_QSTR_idf_task_stats ), MP_ROM_PTR (& esp32_idf_task_stats_obj ) },
242
+ #endif
207
243
208
244
{ MP_ROM_QSTR (MP_QSTR_NVS ), MP_ROM_PTR (& esp32_nvs_type ) },
209
245
{ MP_ROM_QSTR (MP_QSTR_Partition ), MP_ROM_PTR (& esp32_partition_type ) },
0 commit comments