@@ -212,6 +212,39 @@ static mp_obj_t esp32_idf_heap_info(const mp_obj_t cap_in) {
212
212
}
213
213
static MP_DEFINE_CONST_FUN_OBJ_1 (esp32_idf_heap_info_obj , esp32_idf_heap_info ) ;
214
214
215
+ #if CONFIG_FREERTOS_USE_TRACE_FACILITY
216
+ static mp_obj_t esp32_idf_task_stats (void ) {
217
+ const size_t task_count_max = uxTaskGetNumberOfTasks ();
218
+ TaskStatus_t * task_array = m_new (TaskStatus_t , task_count_max );
219
+ uint32_t total_time ;
220
+ const size_t task_count = uxTaskGetSystemState (task_array , task_count_max , & total_time );
221
+
222
+ mp_obj_t task_list = mp_obj_new_list (0 , 0 );
223
+ for (size_t i = 0 ; i < task_count ; i ++ ) {
224
+ mp_obj_t task_data [] = {
225
+ mp_obj_new_str (task_array [i ].pcTaskName , strlen (task_array [i ].pcTaskName )),
226
+ mp_obj_new_int_from_uint (task_array [i ].xTaskNumber ),
227
+ MP_OBJ_NEW_SMALL_INT (task_array [i ].eCurrentState ),
228
+ MP_OBJ_NEW_SMALL_INT (task_array [i ].uxCurrentPriority ),
229
+ mp_obj_new_int_from_uint (task_array [i ].ulRunTimeCounter ),
230
+ mp_obj_new_int_from_uint (task_array [i ].usStackHighWaterMark ),
231
+ #if CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID
232
+ MP_OBJ_NEW_SMALL_INT (task_array [i ].xCoreID ),
233
+ #else
234
+ mp_const_none ,
235
+ #endif
236
+ };
237
+ mp_obj_t task = mp_obj_new_tuple (7 , task_data );
238
+ mp_obj_list_append (task_list , task );
239
+ }
240
+
241
+ m_del (TaskStatus_t , task_array , task_count_max );
242
+ mp_obj_t task_stats [] = { MP_OBJ_NEW_SMALL_INT (total_time ), task_list };
243
+ return mp_obj_new_tuple (2 , task_stats );
244
+ }
245
+ static MP_DEFINE_CONST_FUN_OBJ_0 (esp32_idf_task_stats_obj , esp32_idf_task_stats ) ;
246
+ #endif
247
+
215
248
static const mp_rom_map_elem_t esp32_module_globals_table [] = {
216
249
{ MP_ROM_QSTR (MP_QSTR___name__ ), MP_ROM_QSTR (MP_QSTR_esp32 ) },
217
250
@@ -226,6 +259,9 @@ static const mp_rom_map_elem_t esp32_module_globals_table[] = {
226
259
{ MP_ROM_QSTR (MP_QSTR_mcu_temperature ), MP_ROM_PTR (& esp32_mcu_temperature_obj ) },
227
260
#endif
228
261
{ MP_ROM_QSTR (MP_QSTR_idf_heap_info ), MP_ROM_PTR (& esp32_idf_heap_info_obj ) },
262
+ #if CONFIG_FREERTOS_USE_TRACE_FACILITY
263
+ { MP_ROM_QSTR (MP_QSTR_idf_task_stats ), MP_ROM_PTR (& esp32_idf_task_stats_obj ) },
264
+ #endif
229
265
230
266
{ MP_ROM_QSTR (MP_QSTR_NVS ), MP_ROM_PTR (& esp32_nvs_type ) },
231
267
{ MP_ROM_QSTR (MP_QSTR_Partition ), MP_ROM_PTR (& esp32_partition_type ) },
0 commit comments