【极海APM32F407 Tiny Board】移植FreeRTOS系统
[复制链接]
本帖最后由 TL-LED 于 2023-5-26 11:49 编辑
这篇来学习下freeRTOS系统在开发板下的移植。
一、源码下载
源码下载地址:https://www.freertos.org/zh-cn-cmn-s/a00104.html
下载最新源码
二、添加文件
在上篇创建的工程项目中增加freeRTOS相关的文件
2.1、freeRTOS源码复制到项目文件夹下
2.2、项目中添加 freeRTOS源码
项目中添加源码C文件
项目中添加硬件接口文件
项目中添加内存管理文件
三、修改和配置文件
3.1、上面步骤文件添加完成后,指定头文件位置
3.2、编译工程
修改完成后,执行下编译,有下面报错,这是配置文件是复制例程板子的文件,需要根据开发板的硬件进行修改。
3.3、移植过程中的报错
报错内容:
修改方法:
将中断函数中的下面函数注释掉
freeRTOS系统中已经定义了SVC和PendSV中断函数,需要在中断函数中注释掉
屏蔽freeRTOS配置文件中的定义,使用SDK中断里面的systick 中断函数。
修改下面文件
再次编译工程
正常没有报错,上面就是移植freeRTOS的过程。
四、创建任务
4.1、main.c
#include "main.h"
#include "usart.h"
#include "FreeRTOS.h"
#include "task.h"
#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)
{
SysTick_Init();
init_usart(115200);
printf("apm32f407-freeRTOS-test\r\n");
init_led();
led2_off();
led3_on();
//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);
vTaskStartScheduler();
while(1);
}
//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);
}
}
五、硬件连接
板子上link带的串口不能用,使用串口模块连接到J3和J5
六、程序运行
6.1、串口输出内容
6.2、运行视频
320
七、程序源码
|