/* The example of ESP8266_RTOS_SDK
*
* This sample code is in the public domain.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "esp_log.h"
#include "esp_system.h"
#include "esp_err.h"
//static const char *TAG = "main";
/**
* TEST CODE BRIEF
*
* This example will show you how to use xTaskCreate:
*
**/
//時間稼ぎ
void ConsumptionTick(int delay) {
TickType_t startTick;
TickType_t endTick;
TickType_t nowTick;
startTick = xTaskGetTickCount();
endTick = startTick + delay;
//printf("startTick=%d
endTick=%d\n",startTick,endTick);
while(1) {
nowTick =
xTaskGetTickCount();
if (nowTick > endTick)
break;
}
}
// Task Body
void taskEntry(void *pvParameters)
{
UBaseType_t prio;
TickType_t nowTick;
prio = uxTaskPriorityGet( NULL );
nowTick = xTaskGetTickCount();
ESP_LOGI(pcTaskGetName(0),"[%u] start
Priority=%d",nowTick,(int)prio);
ConsumptionTick(200);
nowTick = xTaskGetTickCount();
ESP_LOGI(pcTaskGetName(0),"[%u]
end",nowTick);
vTaskDelete( NULL );
}
void app_main(void)
{
BaseType_t xReturned;
TaskHandle_t xHandle1 = NULL;
TaskHandle_t xHandle2 = NULL;
UBaseType_t prio;
TickType_t nowTick;
prio = uxTaskPriorityGet( NULL );
nowTick = xTaskGetTickCount();
ESP_LOGI(pcTaskGetName(0),"[%u] start
Priority=%d",nowTick,(int)prio);
ESP_LOGI(pcTaskGetName(0),"SDK
version:%s", esp_get_idf_version());
ESP_LOGI(pcTaskGetName(0),"portTICK_PERIOD_MS=%u[ms]",portTICK_PERIOD_MS);
ESP_LOGI(pcTaskGetName(0),"configMAX_PRIORITIES=%d",configMAX_PRIORITIES);
#if 1
// myTask1を優先度=2で起動
// myTask2を優先度=2で起動
xReturned = xTaskCreate(taskEntry,
"myTask1", 1024, NULL, 2, &xHandle1);
if( xReturned == pdPASS ) {
ESP_LOGI(pcTaskGetName(0),"myTask1 xTaskCreate success");
}
xReturned = xTaskCreate(taskEntry,
"myTask2", 1024, NULL, 2, &xHandle2);
if( xReturned == pdPASS ) {
ESP_LOGI(pcTaskGetName(0),"myTask2 xTaskCreate success");
}
#endif
#if 0
// myTask1を優先度=2で起動
// myTask2を優先度=4で起動
xReturned = xTaskCreate(taskEntry,
"myTask1", 1024, NULL, 2, &xHandle1);
if( xReturned == pdPASS ) {
ESP_LOGI(pcTaskGetName(0),"myTask1 xTaskCreate success");
}
xReturned = xTaskCreate(taskEntry,
"myTask2", 1024, NULL, 4, &xHandle2);
if( xReturned == pdPASS ) {
ESP_LOGI(pcTaskGetName(0),"myTask2 xTaskCreate success");
}
#endif
#if 0
// myTask1を優先度=2で起動
// 自分自身をDelay
// myTask2を優先度=4で起動
xReturned = xTaskCreate(taskEntry,
"myTask1", 1024, NULL, 2, &xHandle1);
if( xReturned == pdPASS ) {
ESP_LOGI(pcTaskGetName(0),"myTask1 xTaskCreate success");
}
// delay 10mSec
vTaskDelay(10 / portTICK_PERIOD_MS);
xReturned = xTaskCreate(taskEntry,
"myTask2", 1024, NULL, 4, &xHandle2);
if( xReturned == pdPASS ) {
ESP_LOGI(pcTaskGetName(0),"myTask2 xTaskCreate success");
}
#endif
}
|