Skip to content

Commit 64adae9

Browse files
Add simplified switching test catching task swap problem
1 parent e4e205f commit 64adae9

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// Released to the public domain
2+
#include <FreeRTOS.h>
3+
#include <task.h>
4+
#include <map>
5+
#define STACK_SIZE 512
6+
#define CORE_0 (1 << 0)
7+
#define CORE_1 (1 << 1)
8+
9+
std::map<eTaskState, const char *> eTaskStateName { {eReady, "Ready"}, { eRunning, "Running" }, {eBlocked, "Blocked"}, {eSuspended, "Suspended"}, {eDeleted, "Deleted"} };
10+
void ps() {
11+
int tasks = uxTaskGetNumberOfTasks();
12+
TaskStatus_t *pxTaskStatusArray = new TaskStatus_t[tasks];
13+
unsigned long runtime;
14+
tasks = uxTaskGetSystemState( pxTaskStatusArray, tasks, &runtime );
15+
Serial.printf("# Tasks: %d\n", tasks);
16+
Serial.printf("%-3s %-16s %-10s %s %s\n", "ID", "NAME", "STATE", "PRIO", "CYCLES");
17+
for (int i = 0; i < tasks; i++) {
18+
Serial.printf("%2d: %-16s %-10s %4d %lu\n", i, pxTaskStatusArray[i].pcTaskName, eTaskStateName[pxTaskStatusArray[i].eCurrentState], (int)pxTaskStatusArray[i].uxCurrentPriority, pxTaskStatusArray[i].ulRunTimeCounter);
19+
}
20+
delete[] pxTaskStatusArray;
21+
}
22+
23+
static TaskHandle_t l[16];
24+
25+
void loop() {
26+
ps();
27+
delay(1000);
28+
}
29+
30+
#define LOOP(z) \
31+
void loop##z(void *params) {\
32+
(void) params;\
33+
while (true) {\
34+
srand(z);\
35+
int sum = 0;\
36+
for (int i = 0; i < 500000; i++) sum+= rand();\
37+
Serial.printf("L%d: %08x\n", z, sum);\
38+
delay(1000 + z * 10);\
39+
}\
40+
}
41+
42+
LOOP(0);
43+
LOOP(1);
44+
LOOP(2);
45+
LOOP(3);
46+
47+
48+
void setup() {
49+
xTaskCreate(loop0, "loop0", STACK_SIZE, NULL, 1, &l[0]);
50+
vTaskCoreAffinitySet(l[0], CORE_0);
51+
// xTaskCreate(loop1, "loop1", STACK_SIZE, NULL, 1, &l[1]);
52+
// vTaskCoreAffinitySet(l[1], CORE_0);
53+
// xTaskCreate(loop2, "loop2", STACK_SIZE, NULL, 1, &l[2]);
54+
// vTaskCoreAffinitySet(l[2], CORE_0);
55+
// xTaskCreate(loop3, "loop3", STACK_SIZE, NULL, 1, &l[3]);
56+
// vTaskCoreAffinitySet(l[3], CORE_1);
57+
}

0 commit comments

Comments
 (0)