在这一章 我们使用函数创建了两个任务
/* Hello World Example
This example code is in the Public Domain (or CC0 licensed, at your option.)
Unless required by applicable law or agreed to in writing, this
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
#include "esp_log.h"
#include "driver/gpio.h"
static const char *TAG ="GPIO_BLINK";
#define LED_PIN 2
void gpio_config_init(void);
void gpio_toggle_level(gpio_num_t gpio_num);
void HeartbeatLED(void);
//任务1
static void task1(void* arg)
{
for(;;){
printf("TASK1 IS RUNNING!\n");
HeartbeatLED();
vTaskDelay(1000 / portTICK_RATE_MS);
}
}
//任务2
void task2(void *arg)
{
char i=0;
for(i=0;i<100;i++){
printf("[TASK2]NO.%d hello,world\n",i);
vTaskDelay(600 / portTICK_RATE_MS);
}
printf("[TASK2]Good bye i will die\n");
vTaskDelete(NULL);
}
void app_main()
{
printf("Hello world!\n");
ESP_LOGI(TAG,"LED BLINK");
printf("SDK Version:%s\n",esp_get_idf_version());
gpio_config_init();
//创建任务
xTaskCreate(task1, "task1_test", 512, NULL, 3, NULL);
xTaskCreate(task2,"task2_test",1024,NULL,5,NULL);
// xTaskCreate(spi_master_write_slave_task, "spi_master_write_slave_task", 2048, NULL, 3, NULL);
// gpio_set_level(GPIO_Pin_2,1);
// while(1)
// {
// vTaskDelay(1000 / portTICK_RATE_MS);
// }
}
// void get_boardver(void)
// {
// printf("SDK Version:%s\n",system_get_sdk_version());
// }
//GPIO 初始化代码
void gpio_config_init(void)
{
gpio_config_t gpio_conf;
gpio_conf.mode=GPIO_MODE_OUTPUT;
gpio_conf.pin_bit_mask=(1ULL << LED_PIN);
gpio_conf.pull_up_en=0;
gpio_conf.pull_down_en=0;
gpio_conf.intr_type=GPIO_INTR_DISABLE;
gpio_config(&gpio_conf);
// gpio_set_level(GPIO_Pin_2,1);
}
//GPIO翻转电平代码
void gpio_toggle_level(gpio_num_t gpio_num)
{
bool gpio_level = gpio_get_level(gpio_num);
gpio_set_level(gpio_num,!gpio_level);
printf("get vaal:%d val2:%d\n",gpio_level,(!gpio_level));
}
void HeartbeatLED(void)
{
gpio_set_level(LED_PIN,0);
oled_delay_ms(40);
gpio_set_level(LED_PIN,1);
oled_delay_ms(70);
gpio_set_level(LED_PIN,0);
oled_delay_ms(40);
gpio_set_level(LED_PIN,1);
}
开始的时候 把任务2 的堆栈设置为512 导致无法运行 总是崩溃 如下所示
打印显示 task2有问题 经过多方查询解决 发现是堆栈的空间较小 将创建时任务时的堆栈从512 变成1024 打印正常
心跳灯正常
打印正常
100次后任务2 会删除