You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
1.7 KiB
94 lines
1.7 KiB
/**
|
|
* 这个文件是对FreeRTOS的封装创建及调用的地方
|
|
* 在这里添加你的任务
|
|
*/
|
|
#include "mytask.h"
|
|
|
|
#define func _Noreturn __HIGH_CODE void // 重命名修饰,避免麻烦
|
|
|
|
TaskHandle_t xLedTaskHandle = NULL;
|
|
|
|
func Task_LED(void *pvParameters)
|
|
{
|
|
Array_Create(arr, 10);
|
|
Array_Push(&arr, 1);
|
|
|
|
|
|
Gpio_Init(PB_4, GPIO_ModeOut_PP_20mA);
|
|
while (1)
|
|
{
|
|
Gpio_Inverse(PB_4);
|
|
vTaskDelay(1000);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief 串口输出接受到的信息
|
|
*/
|
|
TaskHandle_t xUartTaskHandle = NULL;
|
|
|
|
func Task_UART(void *pvParameters)
|
|
{
|
|
GpioPin_t gpio = PB_23;
|
|
Gpio_Init(gpio, GPIO_ModeIN_PU);
|
|
while (1)
|
|
{
|
|
uint8_t cmd = 0;
|
|
if (Api_GetUartData(1, &cmd))
|
|
{
|
|
printf("cmd:%d\r\n", cmd);
|
|
}
|
|
if (!Gpio_Read(gpio))
|
|
{
|
|
vTaskDelay(100);
|
|
if (!Gpio_Read(gpio))
|
|
{
|
|
printf("软件复位\r\n");
|
|
while (!Gpio_Read(gpio));
|
|
SYS_ResetExecute();
|
|
}
|
|
|
|
}
|
|
vTaskDelay(1);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief 创建任务
|
|
*
|
|
* @return
|
|
*/
|
|
static void CreateTask(void)
|
|
{
|
|
// 创建出啊口任务
|
|
BaseType_t pass = myTaskCreate(Task_UART, "Task_UART", 256, NULL, Priority_HIGH, &xUartTaskHandle);
|
|
if (pass != pdPASS)
|
|
{
|
|
while (1);
|
|
}
|
|
// 创建LED任务
|
|
pass = myTaskCreate(Task_LED, "LED", 128, NULL, Priority_LOW, &xLedTaskHandle);
|
|
if (pass != pdPASS)
|
|
{
|
|
printf("Task_LED create fail\r");
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief Freertos初始化
|
|
*
|
|
*/
|
|
void MyRtos_Init(void)
|
|
{
|
|
// 进入临界区
|
|
taskENTER_CRITICAL();
|
|
// 创建任务
|
|
CreateTask(); //进去创建任务
|
|
// 退出临界区
|
|
taskEXIT_CRITICAL();
|
|
|
|
vTaskStartScheduler();
|
|
}
|
|
|