1 /* 2 Test FreeRTOS support for core dump. 3 */ 4 5 #include <stdio.h> 6 #include "soc/cpu.h" 7 #include "freertos/FreeRTOS.h" 8 #include "freertos/task_snapshot.h" 9 #include "unity.h" 10 #include "sdkconfig.h" 11 12 #define TEST_MAX_TASKS_NUM 32 13 14 /* simple test to check that in normal conditions uxTaskGetSnapshotAll does not generate exception */ 15 TEST_CASE("Tasks snapshot", "[freertos]") 16 { 17 TaskSnapshot_t tasks[TEST_MAX_TASKS_NUM]; 18 UBaseType_t tcb_sz; 19 #ifndef CONFIG_FREERTOS_UNICORE 20 int other_core_id = xPortGetCoreID() == 0 ? 1 : 0; 21 #endif 22 23 // uxTaskGetSnapshotAll is supposed to be called when all tasks on both CPUs are 24 // inactive and can not alter FreeRTOS internal tasks lists, e.g. from panic handler 25 unsigned state = portSET_INTERRUPT_MASK_FROM_ISR(); 26 #ifndef CONFIG_FREERTOS_UNICORE 27 esp_cpu_stall(other_core_id); 28 #endif 29 UBaseType_t task_num = uxTaskGetSnapshotAll(tasks, TEST_MAX_TASKS_NUM, &tcb_sz); 30 #ifndef CONFIG_FREERTOS_UNICORE 31 esp_cpu_unstall(other_core_id); 32 #endif 33 portCLEAR_INTERRUPT_MASK_FROM_ISR(state); 34 35 printf("Dumped %d tasks. TCB size %d\n", task_num, tcb_sz); 36 TEST_ASSERT_NOT_EQUAL(0, task_num); 37 TEST_ASSERT_NOT_EQUAL(0, tcb_sz); 38 } 39