#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
void task_int(void *pvParameters)
{
int32_t
task_parameter = (int32_t)pvParameters;
ESP_LOGI(pcTaskGetName(0), "Start task_parameter=[%d] %p",
task_parameter, &task_parameter);
while(1) {
vTaskDelay(1);
}
vTaskDelete(
NULL );
}
void task_char(void *pvParameters)
{
char
*task_parameter = (char *)pvParameters;
ESP_LOGI(pcTaskGetName(0), "Start task_parameter=[%s] %p",
task_parameter, task_parameter);
while(1) {
vTaskDelay(1);
}
vTaskDelete(
NULL );
}
void app_main()
{
xTaskCreate(&task_int, "task0", 2048, NULL, 1, NULL);
vTaskDelay(1);
// 値が渡る
xTaskCreate(&task_int, "task1", 2048, (void *)100, 1,
NULL);
vTaskDelay(1);
// iparamの値が渡る
int32_t iparam;
iparam=200;
ESP_LOGI(pcTaskGetame(0), "iparam=%d %p", iparam,
&iparam);
xTaskCreate(&task_int, "task2", 2048, (void *)iparam,
1, NULL);
iparam=-200;
xTaskCreate(&task_int, "task3", 2048, (void *)iparam,
1, NULL);
vTaskDelay(10);
//
cparamのアドレスが渡る
char
cparam[32];
strcpy(cparam,"test1");
ESP_LOGI(pcTaskGetName(0), "cparam=%s %p", cparam,
cparam);
xTaskCreate(&task_char, "task11", 2048, (void
*)cparam, 1, NULL);
//
タスクを起動しないとアドレスの内容が変わってしまう
strcpy(cparam,"test2");
xTaskCreate(&task_char, "task12", 2048, (void
*)cparam, 1, NULL);
vTaskDelay(10);
strcpy(cparam,"test3");
xTaskCreate(&task_char, "task13", 2048, (void
*)cparam, 1, NULL);
vTaskDelay(10);
// アドレスが渡る
char *cptr1 =
"TEST";
ESP_LOGI(pcTaskGetName(0), "cptr1=%s %p", cptr1, cptr1);
xTaskCreate(&task_char, "task21", 2048, (void *)cptr1,
1, NULL);
char *cptr2 =
"TESTTEST";
ESP_LOGI(pcTaskGetName(0), "cptr2=%s %p", cptr2, cptr2);
xTaskCreate(&task_char, "task22", 2048, (void *)cptr2,
1, NULL);
//
スタック変数が解放されない様に、mainタスクは永久ループ
while(1) {
vTaskDelay(1);
}
} |