/** * 这个文件是对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(); }