FreeRTOS移植到标准库

news2024/11/28 10:46:06

源码下载

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.coloradmin.cn/o/1576952.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VRRP+MSTP+BFD

一、组网 二、要求 PC6(vlan 10内PC)访问1.1.1.1走JR-1——CORE1——MSR到1.1.1.1 PC7(vlan 20内PC)访问1.1.1.1走JR-2——CORE2——MSR到1.1.1.1 链路故障时切换路线,来回路径一致 三、配置步骤 SR bfd echo-sou…

Spring AI 来了,打造Java生态大模型应用开发新框架!

Spring AI 来了,打造Java生态大模型应用开发新框架! Spring AI 开发框架设计理念Spring AI 主要功能特性如下 Spring AI 应用开发案例案例一:基于大模型的对话应用开发案例二:RAG 检索增强应用开发案例三:Function Cal…

基于springboot的高校招生系统(含源码+sql+视频导入教程+文档+PPT)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot的高校招生系统1拥有两种角色:管理员和用户 管理员:学生管理、专业管理、报名管理、录取通知管理、招生公告管理等 用户:登录注册、报…

智慧园区革新之路:山海鲸可视化技术引领新变革

随着科技的飞速发展,智慧园区已成为城市现代化建设的重要组成部分。山海鲸可视化智慧园区解决方案,作为业界领先的数字化革新方案,正以其独特的技术优势和丰富的应用场景,引领着智慧园区建设的新潮流。 本文将带大家一起了解一下…

【linux】基础IO(三)

上一节基础IO我们着重理解了重定向与缓冲区,这节我们需要重点理解文件再磁盘中是怎样存储。以及上一节我们没有涉及到的知识。 stderr到时有什么用? 目录 fd-> 0 1 2:初步理解2怎样将错误与正确输出都打印在一个文件? 文件在硬…

【Vue】我的第一个组件

文章目录 项目简介 项目简介 项目根目录中的index.html是项目的入口文件 加载index.html,vite解析。指向的src下的ts文件或者js文件 最后通过vue3的createApp函数创建一个应用,并挂载到指定div下 App.vue结构说明 特别注意:script脚本内&#xff0…

23.oracle保留两位小数、小数点后不足两位的补0

to_char()函数:转化数字型指定小数点位数的用法/* to_char(0.1,fm9999990.00) */

缓存穿透问题

缓存穿透 :缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。 常见的两种解决方案: 1.缓存空对象 优点:实现简单,维护方便 缺点:占用…

Spring Cloud微服务入门(三)

服务注册与发现的概念 服务之间相互访问: 例如:用户中心与内容中心之间相互调用。 问题: 服务调用需要知道对方的服务地址,地址写在哪里? 如果服务是多个实例部署,该调用哪一个? 如果服务是多…

父组件明明使用了v-model,子组件竟然可以不用定义props和emit抛出事件,快来看看吧

前言 vue3.4增加了defineModel宏函数,在子组件内修改了defineModel的返回值,父组件上v-model绑定的变量就会被更新。大家都知道v-model是:modelValue和update:modelValue的语法糖,但是你知道为什么我们在子组件内没有写任何关于props的定义和…

以动态库链接库 .dll 探索结构体参数

Dev c C语言实现第一个 dll 动态链接库 创建与调用-CSDN博客 在写dll 插件中发现的函数指针用途和 typedef 的定义指针的用法-CSDN博客 两步之后,尝试加入结构体实现整体数据使用。 注意结构体 Ak 是相同的 代码如下 DLL文件有两个,dll.dll是上面提到…

[LeetCode][LCR178]训练计划 VI——使用位运算寻找数组中不同的数字

题目 LCR 178. 训练计划 VI 教学过程中,教练示范一次,学员跟做三次。该过程被混乱剪辑后,记录于数组 actions,其中 actions[i] 表示做出该动作的人员编号。请返回教练的编号。 示例 1: 输入:actions [5, …

帝国CMS模板源码整站安装说明(图文)

安装步骤 第一步:先把得到的文件解压缩,把文件通过FTP传到空间里。(请不要把类似www.lengleng.net这个文件夹传到FTP,请传这个大文件夹下面的所有文件夹和文件到空间根目录,请不要上传到2级目录,除非你自己…

kimi开放API使用了,来看如何使用

更多精彩内容在公众号。 kimi现在算是国内火得不行的AI工具。最近使用人太多,都经常出现响应不过来的情况。借助这波热潮,kimi顺势推出了API使用。 来看kimi的官方介绍使用。https://platform.moonshot.cn 文本生成模型 Moonshot的文本生成模型&#…

外包干了6天,技术明显进步

先说一下自己的情况,本科生,2019年我通过校招踏入了南京一家软件公司,开始了我的职业生涯。那时的我,满怀热血和憧憬,期待着在这个行业中闯出一片天地。然而,随着时间的推移,我发现自己逐渐陷入…

PWM 脉宽跟随方案介绍

1. 前言 数字电源产品在使用桥式电路拓扑或是多路交错控制中,有时会需要滞后臂的 PWM 脉宽严格跟随超前臂的 PWM 脉宽,或从路的 PWM 脉宽严格跟随主路的 PWM 脉宽,本文将介绍如何利用高精度定时器实现 PWM 输出脉宽跟随,一种使用…

设计模式浅析(十一) ·状态模式

设计模式浅析(十一) 状态模式 日常叨逼叨 java设计模式浅析,如果觉得对你有帮助,记得一键三连,谢谢各位观众老爷😁😁 状态模式 概念 状态模式 Java中的状态模式(State Pattern)是一种行为型…

Web漏洞-文件上传常见验证

后缀名:类型,文件头等 后缀名:黑白名单 文件类型:MIME信息 文件头:内容头信息 常见黑名单(明确不允许上传的格式后缀):asp、php、jsp、aspx、cgi、war (如果没有完整…

绿联 安装Frpc内网穿透并使用Nginx反向代理

绿联 安装Frpc内网穿透并使用Nginx反向代理 1、前言 服务器官网:雨云 - 新一代云服务提供商 本教程使用Frps与Frpc进行内网穿透,其中Frps需要自购服务器安装,若无法购买服务器则本教程对你无用; 另外还需拥有自己的域名&#xf…

什么是数据库?如何安装SQL Server(超详细版)

文章目录 什么是数据库数据库与数据库管理系统数据库系统之间的区别和联系数据库在生活中的应用 安装SQL Server数据库系统要求 安装步骤(超详细)安装前的准备 安装SSMS 什么是数据库 数据库,顾名思义,是存储数据的“仓库”。它不仅仅是简单的数据存储&…