071615b059
“Full” printf uses more stack space than “nano” printf, and more space than available in the idle task. This caused stack overflow in TLS delete test. Replacing printf with ets_printf.
58 lines
1.4 KiB
C
58 lines
1.4 KiB
C
#include <esp_types.h>
|
|
#include <stdio.h>
|
|
#include "rom/ets_sys.h"
|
|
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/task.h"
|
|
#include "freertos/semphr.h"
|
|
#include "freertos/queue.h"
|
|
#include "freertos/xtensa_api.h"
|
|
#include "unity.h"
|
|
#include "soc/uart_reg.h"
|
|
#include "soc/dport_reg.h"
|
|
#include "soc/io_mux_reg.h"
|
|
|
|
|
|
|
|
static void tskdelcb(int no, void *arg)
|
|
{
|
|
ets_printf("Delete callback: %d = %p!\n", no, arg);
|
|
}
|
|
|
|
|
|
static void tska(void *pvParameters)
|
|
{
|
|
vTaskSetThreadLocalStoragePointerAndDelCallback(xTaskGetCurrentTaskHandle(), 0, (void *)0xAAAAAAAA, tskdelcb);
|
|
while (1) {
|
|
vTaskDelay(10000000 / portTICK_PERIOD_MS);
|
|
}
|
|
}
|
|
|
|
static void tskb(void *pvParameters)
|
|
{
|
|
vTaskSetThreadLocalStoragePointerAndDelCallback(xTaskGetCurrentTaskHandle(), 0, (void *)0xBBBBBBBB, tskdelcb);
|
|
vTaskDelay(2000 / portTICK_PERIOD_MS);
|
|
TaskHandle_t a = (TaskHandle_t)pvParameters;
|
|
printf("Killing task A\n");
|
|
vTaskDelete(a);
|
|
while (1) {
|
|
vTaskDelay(10000000 / portTICK_PERIOD_MS);
|
|
}
|
|
}
|
|
|
|
|
|
// TODO: split this thing into separate orthogonal tests
|
|
TEST_CASE("Freertos TLS delete cb", "[freertos]")
|
|
{
|
|
TaskHandle_t a, b;
|
|
|
|
xTaskCreatePinnedToCore(tska , "tska" , 2048, NULL, 3, &a, 0);
|
|
xTaskCreatePinnedToCore(tskb , "tska" , 2048, a, 3, &b, 0);
|
|
|
|
// Let stuff run for 20s
|
|
vTaskDelay(5000 / portTICK_PERIOD_MS);
|
|
printf("Killing task B\n");
|
|
//Shut down b
|
|
vTaskDelete(b);
|
|
}
|
|
|