将freertos系统移植到STM32F423开发板。
一、下载源码
freertos源码下载地址:https://github.com/FreeRTOS/FreeRTOS
二、添加文件
将freertos源文件复制到项目文件夹
在项目工程中添加源文件
添加头文件路径
修改FreeRTOSConfig.h文件
三、程序
main.c
#include "at32f423_board.h"
#include "at32f423_clock.h"
#include "led/led.h"
#include "key/key.h"
#include "usart/usart.h"
#include "delay/delay.h"
#include "systick/systick.h"
#include "FreeRTOS.h"
#include "task.h"
#define START_TASK_PRIO 1
#define START_STK_SIZE 128
static TaskHandle_t StartTask_Handler = NULL;
#define TASK1_PRIO 2
#define TASK1_STK_SIZE 128
static TaskHandle_t Task1Task_Handler = NULL;
#define TASK2_PRIO 3
#define TASK2_STK_SIZE 128
static TaskHandle_t Task2Task_Handler = NULL;
void start_task(void *pvParameters);
void task1(void *pvParameters);
void task2(void *pvParameters);
int main(void)
{
system_clock_config();
SysTick_Init();
init_led();
init_key();
init_usart(115200);
printf("at32f423 board test! \r\n");
xTaskCreate((TaskFunction_t )start_task,
(const char* )"start_task",
(uint16_t )START_STK_SIZE,
(void* )NULL,
(UBaseType_t )START_TASK_PRIO,
(TaskHandle_t* )&StartTask_Handler);
vTaskStartScheduler();
return 0;
}
void start_task(void *pvParameters)
{
taskENTER_CRITICAL();
xTaskCreate((TaskFunction_t )task1,
(const char* )"task1",
(uint16_t )TASK1_STK_SIZE,
(void* )NULL,
(UBaseType_t )TASK1_PRIO,
(TaskHandle_t* )&Task1Task_Handler);
xTaskCreate((TaskFunction_t )task2,
(const char* )"task2",
(uint16_t )TASK2_STK_SIZE,
(void* )NULL,
(UBaseType_t )TASK2_PRIO,
(TaskHandle_t* )&Task2Task_Handler);
vTaskDelete(StartTask_Handler);
taskEXIT_CRITICAL();
}
//task1
void task1(void *pvParameters)
{
while (1)
{
printf("task1 run ...\r\n");
led2_tog();
vTaskDelay(500);
}
}
//task2
void task2(void *pvParameters)
{
while (1)
{
led3_tog();
printf("task2 run ...\r\n");
vTaskDelay(100);
}
}
四、程序运行
开发板运行后,串口输出
|