本帖最后由 noonezero 于 2024-2-28 08:50 编辑
本帖最后由 noonezero 于 2024-2-27 20:58 编辑
用法
BaseType_t xTaskCreate( TaskFunction_t pvTaskCode,
const char * const pcName,
const configSTACK_DEPTH_TYPE uxStackDepth,
void *pvParameters,
UBaseType_t uxPriority,
TaskHandle_t *pxCreatedTask
);
parameter |
description |
pvTaskCode |
永不退出的 C 函数,实现常通常是一个死循环。填要执行的函数名 |
pcName |
Task名称,自定义 |
uxStackDepth |
用于告诉内核为它分配多大的栈空间 |
pvParameters |
要传递的参数,为空指针 |
uxPriority |
是一个无符号的整形数,表示优先级的大小,数值越大优先级越大 |
pxCreatedTask |
用于传出任务的句柄 |
示例
#include <FreeRTOS.h>
#include <task.h>
#include "board.h"
#include "bflb_gpio.h" //gpio头文件
#include "log.h"
#define DBG_TAG "MAIN"
void task_led0(void){
struct bflb_device_s *gpio; // 初始化一个结构体指针作为外设句柄命名为gpio,
gpio = bflb_device_get_by_name("gpio");
// gpio初始化,第一个参数为句柄,第二个参数为pin,第三个为GPIO的配置,这里配置为输出、上拉、滤波打开、驱动等级0
bflb_gpio_init(gpio, GPIO_PIN_0, GPIO_OUTPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_3);
LOG_I("Hello task_led0\r\n");
while(1){
bflb_gpio_set(gpio, GPIO_PIN_0); // 将pin0设置为高电平
LOG_I("GPIO0 -> HIGH");
vTaskDelay(3000/portTICK_RATE_MS); // 总时间/单次tick时间
bflb_gpio_reset(gpio, GPIO_PIN_0);
LOG_I("GPIO0 -> LOW");
vTaskDelay(3000/portTICK_RATE_MS); // 总时间/单次tick时间
}
}
void task_led1(void){
struct bflb_device_s *gpio; // 初始化一个结构体指针作为外设句柄命名为gpio,
gpio = bflb_device_get_by_name("gpio");
// gpio初始化,第一个参数为句柄,第二个参数为pin,第三个为GPIO的配置,这里配置为输出、上拉、滤波打开、驱动等级0
bflb_gpio_init(gpio, GPIO_PIN_1, GPIO_OUTPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_3);
LOG_I("Hello task_led1\r\n");
while(1){
bflb_gpio_set(gpio, GPIO_PIN_1); // 将pin0设置为高电平
LOG_I("GPIO1 -> HIGH");
vTaskDelay(1000/portTICK_RATE_MS); // 总时间/单次tick时间
bflb_gpio_reset(gpio, GPIO_PIN_1);
LOG_I("GPIO1 -> LOW");
vTaskDelay(1000/portTICK_RATE_MS); // 总时间/单次tick时间
}
}
int main(void)
{
board_init();
LOG_I("FreeRTOS begin!\r\n");
// 创建任务
xTaskCreate(task_led0, (char*)"blink0", 1024, NULL, 1, NULL);
xTaskCreate(task_led1, (char*)"blink1", 1024, NULL, 1, NULL);
// 启动调度器
vTaskStartScheduler();
}
小安派S1引脚
执行效果
总结
点灯演示视频没法上传,贴LOG日志,效果一样
本次例程创建两个点灯任务,任务优先级为1,任务对应小安派的IO1和IO0,
IO0,3s亮,3s灭
IO1,1s亮,1s灭
实现了两个io不同频率点灯
本次例程中延时使用vTaskDelay,用来延时,
具体用法见下篇帖子
如果有代码问题,请留言,工程文件会放在评论区,大家自取 |