FreeRTOS移植到标准库

源码下载

1:从官网获取freeRTOS源码

freeRTOS官网

2:FreeRtos源码文件阐述

3:移植FreeRtos源码

FreeRTOS移植步骤
1:添加FreeRTOS源码,将FreeRTOS源码添加到基础工程,头文件等路径
2:添加FreeRTOSConfig.h文件,添加FreeRTOSConfig.h配置文件
3:修改SYSTEM文件夹,主要包含sys,delay,和usart
4:修改中断相关文件, 修改Systick中断,SVC中断,PendSV中断
5:添加应用程序,验证移植是否成功

1 -> 在基础例程中创建一个freeRTOS文件夹,该文件夹包含三个子文件夹,分别是ins,src,port分别用于存放freeRTOS的c语言文件,头文件和RTOS的内存操作文件。

在例程src文件夹复制粘贴源码目录下的c语言文件

src文件夹粘贴后的结果展示

 在例程inc文件中复制粘贴源码中的头文件,该文件包含在源码中的include文件夹中

粘贴后的结果展示

后面还有两个文件夹一个是FreeRTOS的内存管理文件在\FreeRTOS\Source\portable\MemMang路径下共有5个,我们使用到的主要是heap_4.c文件,一个是FreeRTOS的RVDS文件夹里面包含的是不同芯片的移植文件我们F103C8T6选择的是ARM_CM3下的两个c文件,把heap_4.c文件和ARM_CM3下的文件复制到我们移植例程的port文件夹中

 

 复制后结果展示

 

2 -> 在freeRTOS这个文件夹路径下添加FreeRTOS的配置文件

 FreeRTOS问价夹的路径是\FreeRTOS\Demo\CORTEX_STM32F103_Keil

 

3 -> 打开项目例程将文件的路径添加进去(这个组文件是我们自己创建的)

 把组文件中包含的子文件全部添加到keil的工程目录中去

4:配置FreeRTOSConfig

在FreeRTOSConfig文件中把这三行配置文件添加进去

#define xPortPendSVHandler  PendSV_Handler
#define vPortSVCHandler     SVC_Handler
#define xPortSysTickHandler SysTick_Handler

打开stm32f10x_it.c源文件注释掉以下三行代码

测试main.c文件中编写测试用例(暂时还不需要知道这个代码表示的是什么意思仅用于测试)

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "freeRTOS.h"
#include "task.h"TaskHandle_t myTaskHandler;
void myTask(void * arg){while(1){GPIO_ResetBits(GPIOA, GPIO_Pin_1);  vTaskDelay(500);GPIO_SetBits(GPIOA, GPIO_Pin_1); vTaskDelay(500);}
}int main(void)
{/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);		//开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);						//将PA1和PA2引脚初始化为推挽输出/*设置GPIO初始化后的默认电平*/GPIO_SetBits(GPIOA, GPIO_Pin_1);				//设置PA1和PA2引脚为低电平xTaskCreate(myTask,"myTask",512,NULL,2,&myTaskHandler);vTaskStartScheduler();while(1){}
}

编译

使用st-link将程序下载到F103最下系统班上查看结果:有实验现象FreeRTOS移植成功


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/600055.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Taro打包生成不同目录

使用taro init创建taro项目时,taro默认打包目录是: /config/index.js outputRoot:dist默认的目录,编译不同平台代码时就会覆盖掉,为了达到多端同步调试的目的,这时需要修改默认生成目录了,通过查看官方文…

蓝桥杯练习系统(算法训练)ALGO-958 P0704回文数和质数

资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 一个数如果从左往右读和从右往左读数字是完全相同的,则称这个数为回文数,比如898,1221,15651都是回文数。编写…

打包与发布iOS应用的完整指南

摘要 本文旨在指导开发者如何准备工作、打包和发布iOS应用。详细介绍了生成请求证书文件、生成APP开发证书及发布证书、生成APP ID、添加调试设备、生成描述文件等步骤。同时,结合案例演示和实际操作,帮助读者更好地理解和应用这些步骤。通过本文&#…

数据结构初阶:栈和队列

栈 栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。 栈中的数据元素遵守后进先出 LIFO ( Last In First Out )的原则。…

JMeter+Ant+Jenkins构建接口报告(无人驾驶版)

展示结果: uc浏览器打开测试报告,绿色显示脚本结果 搭建操作步骤如下 1.jemter写好脚本 2.下载并配置ant环境变量:加上activation.jar、commons-lang3-3.8.1.jar、mail.jar 这3个包 mail.jar需要引用到jmeter 3.下载安装Jenkins 并进行构建…

基于单片机三相温度测量控制系统设计

**单片机设计介绍,基于单片机三相温度测量控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机三相温度测量控制系统设计概要主要包括系统组成、温度测量原理、控制逻辑、软件设计以及测试与验证等…

OPC UA遇见chatGPT

最近opc 基金会将召开一个会议,主题是”OPC UA meets IT“。由此可见,工业自动化行业也开始研究和评估chatGPT带来的影响了。 本文谈谈本人对OPC UA 与chatGPT结合的初步实验和思考。 构建OPC UA 信息模型 chatGPT 的确非常强大了,使用自然…

在虚拟机尝试一次用启动盘重装系统

在虚拟机尝试一次用启动盘重装系统 没有自己重装过系统,也不敢对自己的笔记本下手,用虚拟机重装玩玩试试。 先设置成u盘启动 从boot中选择相应的创建的硬盘即可(刚刚突然发现图片不能上传了,经过乱七八糟的尝试后,开一…

docker使用arthas基本教程

供参考也是自己的笔记 docker容器下使用遇到的问题:大致是连接不上1号进程 我这边主要的问题是用户权限问题,docker容器使用aaa用户启动,那个在docker容器内,需要使用aaa用于启动 docker 容器如何使用arthas #实现下载好arthas …

Vscode中配置Eslint自动修复并保存代码

在settings.json中进行修改,加入以下代码即可,文件保存之后,自动修复一些ESLint报错的代码。 {"editor.codeActionsOnSave": {"source.fixAll.eslint": true,"eslint.autoFixOnSave": true} }

下半年跨境电商全球市场持续扩大,掌握测评自养号技术将迎来新机遇

2024年跨境电商在下半年有望继续保持稳健增长,市场将更加国际化、便捷化和智能化,为消费者和卖家带来更多机遇和发展空间。 全球化市场持续扩大,随着全球市场的进一步开放和互联网的普及,跨境电商将继续拓展到更多的国家和地区。消…

一篇文章教你正确解锁 代理ip 的使用方式,包含两个实战案例

目录 一、引言 二、代理IP基础知识 1、代理IP的定义 2、代理IP的分类 3、代理IP的获取 三、代理IP的正确使用方式 1、选择合适的代理IP 2、配置代理IP 3、代理IP的轮换与验证 4、遵守法律法规和道德规范 四、实战案例一:使用代理IP进行网络爬虫 1、获取…