【AT32A403A 车规MCU开发板】 FreeRTOS移植
[复制链接]
学习下在AT32A403开发板上移植FreeRTOS系统。
一、FreeRTOS源码下载
源码下载地址:https://www.freertos.org/zh-cn-cmn-s/a00104.html
二、代码移植
将源代码添加到项目
三、创建任务程序
3.1、fun_task.c
#include "main.h"
#define START_TASK_PRO 1
#define START_STK_SIZE 128
TaskHandle_t StartTask_Handler;
#define TASK1_PRIO 4
#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;
#define TASK3_PRIO 5
#define TASK3_STK_SIZE 128
static TaskHandle_t Task3Task_Handler = NULL;
void start_task(void *pvParameters);
void gui_task(void *pvParameters);
void task1(void *pvParameters);
void task2(void *pvParameters);
void task3(void *pvParameters);
void task_create(void)
{
//start_task
xTaskCreate((TaskFunction_t )start_task,
(const char* )"start_task",
(uint16_t )START_STK_SIZE,
(void* )NULL,
(UBaseType_t )START_TASK_PRO,
(TaskHandle_t* )&StartTask_Handler);
vTaskStartScheduler();
}
void start_task(void *pvParameters)
{
taskENTER_CRITICAL();
//task1
xTaskCreate((TaskFunction_t )task1,
(const char* )"task1",
(uint16_t )TASK1_STK_SIZE,
(void* )NULL,
(UBaseType_t )TASK1_PRIO,
(TaskHandle_t* )&Task1Task_Handler);
//task2
xTaskCreate((TaskFunction_t )task2,
(const char* )"task2",
(uint16_t )TASK2_STK_SIZE,
(void* )NULL,
(UBaseType_t )TASK2_PRIO,
(TaskHandle_t* )&Task2Task_Handler);
//task3
xTaskCreate((TaskFunction_t )task3,
(const char* )"task3",
(uint16_t )TASK3_STK_SIZE,
(void* )NULL,
(UBaseType_t )TASK3_PRIO,
(TaskHandle_t* )&Task3Task_Handler);
taskEXIT_CRITICAL();
vTaskDelete(StartTask_Handler);
}
//task1
void task1(void *pvParameters)
{
while (1)
{
printf("task1 run ...\r\n");
led2_tog();
vTaskDelay(1000);
}
}
//task2
void task2(void *pvParameters)
{
while (1)
{
printf("task2 run ...\r\n");
led3_tog();
vTaskDelay(500);
}
}
//task3
void task3(void *pvParameters)
{
while (1)
{
//printf("task3 run ...\r\n");
led4_tog();
button_ticks();
vTaskDelay(5);
}
}
3.2、main.c
#include "main.h"
int main(void)
{
system_clock_config();
delay_init();
init_usart(115200);
init_led();
//init_eint();
init_key();
task_create();
while(1)
{
}
}
创建了3个任务,第3个任务调用按键处理。
四、程序运行
4.1、开发板运行后,串口输出
4.2、操作按键,串口输出
4.3、LED指示灯状态
leds
|