1337|6

410

帖子

3

TA的资源

纯净的硅(高级)

【极海APM32F407 Tiny Board】移植FreeRTOS系统 [复制链接]

本帖最后由 TL-LED 于 2023-5-26 11:49 编辑

这篇来学习下freeRTOS系统在开发板下的移植。

 

一、源码下载

源码下载地址:https://www.freertos.org/zh-cn-cmn-s/a00104.html

下载最新源码

001.png

二、添加文件

在上篇创建的工程项目中增加freeRTOS相关的文件

2.1、freeRTOS源码复制到项目文件夹下

003.png

004.png

2.2、项目中添加 freeRTOS源码

项目中添加源码C文件

005.png

项目中添加硬件接口文件

006.png

项目中添加内存管理文件

007.png

三、修改和配置文件

3.1、上面步骤文件添加完成后,指定头文件位置

008.png

3.2、编译工程

修改完成后,执行下编译,有下面报错,这是配置文件是复制例程板子的文件,需要根据开发板的硬件进行修改。

009.png

3.3、移植过程中的报错

报错内容:

010.png

修改方法:

将中断函数中的下面函数注释掉

freeRTOS系统中已经定义了SVC和PendSV中断函数,需要在中断函数中注释掉

011.png

012.png

屏蔽freeRTOS配置文件中的定义,使用SDK中断里面的systick 中断函数。

013.png 修改下面文件

014.png 015.png

再次编译工程

016.png 正常没有报错,上面就是移植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

100.png

六、程序运行

6.1、串口输出内容

101.png

6.2、运行视频

320

 

七、程序源码

apm32f407i_freeRTOS.rar (7.78 MB, 下载次数: 5)

最新回复

cortex就是这点好,把系统相关的都统一到硬件支持,移植就太方便了。   详情 回复 发表于 2023-5-29 17:48

回复
举报

5206

帖子

236

TA的资源

管理员

看着好顺利,厉害了,移植成功的代码是不是可以分享一下?

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

点评

可以的  详情 回复 发表于 2023-5-26 11:40

回复

5206

帖子

236

TA的资源

管理员

@caizhiwei 可以参考这个试试

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

回复

410

帖子

3

TA的资源

纯净的硅(高级)

nmg 发表于 2023-5-26 10:04 看着好顺利,厉害了,移植成功的代码是不是可以分享一下?

可以的


回复

266

帖子

0

TA的资源

一粒金砂(高级)

	/** Enable USART1 RXBNE interrput */
    //USART_EnableInterrupt(TINY_COM1, USART_INT_RXBNE);
    //USART_ClearStatusFlag(TINY_COM1, USART_FLAG_RXBNE);
    //NVIC_EnableIRQRequest(TINY_COM1_IRQn,1,0);

只要加入uart中断配置,FreeRTOS就卡死,不知道楼主遇到过没有?

点评

这个没有测试,我这里串口只发送不接收,就把接收中断屏蔽掉了。  详情 回复 发表于 2023-5-28 15:46
个人签名

gitee/casy


回复

410

帖子

3

TA的资源

纯净的硅(高级)

caizhiwei 发表于 2023-5-28 09:14 /** Enable USART1 RXBNE interrput */ //USART_EnableInterrupt(TINY_COM1, USART_INT_RXBNE); ...

这个没有测试,我这里串口只发送不接收,就把接收中断屏蔽掉了。


回复

7419

帖子

18

TA的资源

五彩晶圆(高级)

cortex就是这点好,把系统相关的都统一到硬件支持,移植就太方便了。

个人签名

默认摸鱼,再摸鱼。2022、9、28


回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表