当前位置: 首页 > news >正文

【ARM】应用ArmDS移植最小FreeRTOS系统

【更多软件使用问题请点击亿道电子官方网站】

一、文档背景

FreeRTOS(Free Real-Time Operating System)是一个开源的实时操作系统内核,广泛应用于嵌入式系统。它具有小巧、灵活、低功耗等特点,支持多任务调度、信号量、队列等实时操作系统基本功能。

将FreeRTOS移植到特定硬件平台上是实现嵌入式系统应用的重要步骤。移植过程包括配置内核、初始化硬件、实现基本任务调度等。通过移植,开发者可以在目标硬件平台上运行FreeRTOS,从而开发基于FreeRTOS的嵌入式应用。

二、 解决的问题或者进行问题分析

步骤一:准备开发环境

1、安装开发工具:确保你已经安装了 Arm Development Studio。

2、下载库文件:从 ST 官方网站下载 STM32F7 的 HAL 库,并从 FreeRTOS 官方网站获取 FreeRTOS 11 源码。

步骤二:创建项目

1、创建 ArmDS 项目:

2、打开 Arm Development Studio,选择 "File" > "New Project"。

3、选择 "STM32F769NIHx" 作为目标器件。

步骤三:添加 FreeRTOS 源文件

1、将 FreeRTOS 源文件添加到项目中:

2、在项目属性中,确保添加 FreeRTOS 相关头文件的路径。例如,右键点击项目 -> Properties -> C/C++ General -> Paths and Symbols -> Includes

3、创建并配置 FreeRTOSConfig.h:

步骤四:编写示例任务和 LED 控制

1、初始化硬件和 LED 引脚:

2、在项目中,创建一个新的 C 文件(例如 main.c)

步骤五:编译和下载

1、编译项目:在 Arm Development Studio 中,编译项目以确保没有错误。

2、下载到开发板:使用调试工具(如 ULINK或Dstream),将编译好的程序下载到 STM32F769 开发板上。

步骤六:调试和验证

1、调试程序:通过调试工具运行程序,检查任务是否正常运行。

2、验证功能:观察 LED 是否按照预期闪烁,确认 FreeRTOS 任务调度正常。

三、 如何应用ArmDS移植最小FreeRTOS系统

1.创建一个名称为“FreeRTOS11_Porting”的项目,配置如图3-1所示:

图3-1

2.根据硬件的实际情况,选择对应的处理器,如图3-2所示:

图3-2

3.只添加“Startup”与“Core”组件,如图3-3所示:

图3-3

4.创建两个目录:UserCode与FreeRTOS11Kernel,并创建main.c文件,添加初始化代码,如图3-4所示:

图3-4 

5.将FreeRTOS的源文件添加到项目中,如图3-5所示:

  • 复制FreeRTOS源码目录中的以下文件到你的项目中:

    • FreeRTOS/Source/tasks.c

    • FreeRTOS/Source/list.c

    • FreeRTOS/Source/portable/[compiler]/ARM_CM7/r0p1/port.c

    • FreeRTOS/Source/portable/MemMang/heap_4.c(或其他你选择的内存管理器)

    • FreeRTOS/Source/include目录下的所有头文件

    • FreeRTOS/Source/portable/[compiler]/ARM_CM7/r0p1/portmacro.h

图3-5

6.打开工程的属性窗口,添加几个头文件的路径,如图3-6所示:

图3-6

7.创建并配置 FreeRTOSConfig.h,如图3-7所示:

图3-7

8.编译项目,如图3-8所示:

图3-8

四、验证FreeRTOS已移植到STM32F769开发板上

1、用仿真器Ulink或Dstream仿真器,连接好开发板,如图4-1所示:

图4-1

2、把AXF文件下载到开发板上,运行或调试,并查看开发板上LED灯的情况,如图4-2所示:

图4-2

五、讨论分析

1.S文件的中断向量函数中的“WEAK”字符的作用是什么?

图5-1

解答:

在C语言或汇编语言中,“WEAK”字符主要用于定义一个弱符号(Weak Symbol)。弱符号是一种特殊的符号,其定义允许在链接过程中被同名的强符号(Strong Symbol)覆盖。这在嵌入式系统开发中非常有用,尤其是在定义中断处理程序(Interrupt Service Routine,ISR)时。这种机制提高了代码的灵活性和模块化,是嵌入式系统开发中常用的技术。

六、结论

为嵌入式系统开发者提供一个详尽的指南,利用ArmDS工具将FreeRTOS内核成功移植到目标硬件平台,从而实现可靠的实时操作系统应用。

————————————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

关于亿道电子

亿道电子技术有限公司(www.emdoor.cn)是国内资深的研发工具软件提供商,公司成立于2002年,面向中国广大的制造业客户提供研发、设计、管理过程中使用的各种软件开发工具,致力于帮助客户提高研发管理效率、缩短产品设计周期,提升产品可靠性。

相关文章:

【ARM】应用ArmDS移植最小FreeRTOS系统

【更多软件使用问题请点击亿道电子官方网站】 一、文档背景 FreeRTOS(Free Real-Time Operating System)是一个开源的实时操作系统内核,广泛应用于嵌入式系统。它具有小巧、灵活、低功耗等特点,支持多任务调度、信号量、队列等实…...

golang下载、上传文件MD5高效计算方法,利用io.TeeReader函数特性 实时计算文件md5签名

在go语言的开发中,当我们在操作下载或者上传文件对象时, 我们可以利用golang内置的io包中的 TeeReader函数特性,高效实时计算文件的md5值。 方法如下: TeeReader高效计算文件md5示例 保存上传文件,并使用文件的md5签…...

TreeMap实现根据值比较

前言&#xff1a; TreeMap普通的排序方法都是根据键来比较来排序&#xff0c;本篇文章实现两种方式实现值排序 1.使用 SortedSet 和 Stream API 如果你想要一个持久化的排序结果&#xff0c;你可以使用 SortedSet 结构来存储键值对的条目。 TreeSet<Map.Entry<String, …...

2024前端面试(内容持续更新)

Vue篇 data为什么是个函数&#xff1f; 在‌Vue中&#xff0c;‌data必须是一个‌函数&#xff0c;这是因为当data是函数时&#xff0c;每个组件实例化时都会调用该函数&#xff0c;返回一个新的数据对象&#xff0c;从而保证每个组件实例拥有独立的数据&#xff0c;避免数据冲…...

接口基础知识5:详解request headers(一篇讲完常见字段)

课程大纲 一、请求头的定义 HTTP请求头部&#xff08;HTTP Request Headers&#xff09;&#xff1a;HTTP协议中的一部分&#xff0c;用于在客户端和服务器之间传递附加信息。这些头部字段提供了关于请求、客户端环境、或请求的上下文的信息。 请求头是键值对的形式&#xff…...

mac的node使用

查看当前Node和npm版本 node -v npm -v安装"n"版本管理工具 sudo npm install -g n 更新node版本 sudo n stable // 稳定版本 sudo n lts // 最新稳定版本 sudo n latest // 最新版本 sudo n xx.xx // 更新到指定版本查看node版本安装集合 n ls切换对应node版…...

HTML - 简易版打字练习

1. 赛博朋克风格的视觉设计 颜色与渐变&#xff1a;通过linear-gradient设置了背景的颜色渐变&#xff0c;使用高饱和度的霓虹色彩&#xff08;如橙色、绿色和蓝色&#xff09;来营造赛博朋克的视觉效果。这种配色方案是赛博朋克风格的典型元素。 立体感和阴影&#xff1a;使用…...

【生成式人工智能-四-chatgpt的训练过程-pretrain预训练自督导式学习督导式学习】

大模型是怎么被训练出来的具有人类智慧的 阶段一训练-自我学习-具备知识训练资料self-supervised learning&#xff08;自督导式学习&#xff09; 阶段二-怎么让模型具备人的智慧supervised learning 督导式学习预训练pretrain为什么要用预训练的模型&#xff1f;Adapter逆向工…...

期权价格的奥秘:深入理解影响因素

在金融市场中&#xff0c;期权作为一种衍生工具&#xff0c;为投资者提供了风险管理和资产增值的多种可能性。期权价格的波动往往令人着迷&#xff0c;但其背后的定价机制却充满了复杂性。本文将带您探索期权价格变化的奥秘&#xff0c;并尝试以浅显易懂的方式&#xff0c;解析…...

STM32-USART时序与寄存器状态分析

一、时序分析 在UART&#xff08;通用异步收发传输&#xff09;通信中&#xff0c;信号线上的状态分为两种&#xff1a;逻辑1&#xff08;高电平&#xff09;和逻辑0&#xff08;低电平&#xff09;。在空闲状态下&#xff0c;数据线应保持逻辑高电平。UART协议中的各个信号位具…...

从零安装pytorch并在pycharm中使用

背景介绍 目前主流使用的工具有Facebook搞的pythorch和谷歌开发的tensorflow两种&#xff0c;二者在实现理念上有一定区别&#xff0c;pytorch和人的思维模式与变成习惯更像&#xff0c;而tensorflow则是先构建整体结构&#xff0c;然后整体运行&#xff0c;开发调试过程较为繁…...

开源AI工具FastGPT和RagFlow对比

FastGPT和RagFlow都是基于大型语言模型&#xff08;LLM&#xff09;的先进AI系统&#xff0c;它们在多个方面有着各自的特点和优势。 以下是对两者性能的详细对比&#xff1a; 一、系统架构与功能 FastGPT&#xff1a; 数据收集&#xff1a;通过从互联网上收集大量的文本数…...

第N2周:NLP中的数据集构建

对于初学者&#xff0c;NLP中最烦人的问题之一就数据集的构建问题&#xff0c;处理不好就会引起shape问题&#xff08;各种由于shape错乱导致的问题&#xff09;。这里给出一个模版&#xff0c;大家可根据这个模版来构建。 torch.utils.data是PyTorch中用于数据加载和预处理的…...

AI助力浮雕创作!万物皆可浮雕?Stable Diffusion AI绘画【浮雕艺术】之文生浮雕!

前言 对于浮雕艺术&#xff0c;其实并不了解。但有幸能和“细辛”前辈结识&#xff0c;对浮雕有了简单的了解&#xff0c;浮雕图案的传统方式是先由画师画出图&#xff0c;然后由雕刻师雕刻。画师画图归为浮雕的设计阶段&#xff0c;画师会绘制出浮雕的设计图&#xff0c;‌这为…...

你觉得大模型时代该出现什么?

大模型的概念都火了两年了&#xff0c;之前各种媒体吹嘘大模型的出现是类似“蒸汽机时代”、“iPhone时刻”等等。那为什么我们期待的结果都没出现呢&#xff1f;咱们先一起回顾下历史。 1、蒸汽机时代 1.1、蒸汽机历史 许多人都在讨论大模型时代好像只是概念在火&#xff0…...

JS【详解】事件委托

事件委托的简介 事件委托&#xff08;Event Delegation&#xff09;是 JS 处理事件的一种技术&#xff1a;不直接在目标元素上设置事件监听器&#xff0c;而是在其父元素或祖先元素上设置监听器&#xff0c;然后利用事件冒泡机制来捕获和处理事件。 事件委托的好处 减少内存占用…...

谈对象系列:C++类和对象

文章目录 一、类的定义1.1类定义的格式类的两种定义方法结构体&#xff1a; 1.2访问限定符1.3类域 二、实例化2.1变量的声明和定义2.2类的大小计算空类的大小&#xff08;面试&#xff09;&#xff1a; 三、this指针小考题 一、类的定义 1.1类定义的格式 使用class关键字&…...

设计模式20-备忘录模式

设计模式20-备忘录 动机定义与结构定义结构 C代码推导优缺点应用场景总结备忘录模式和序列化备忘录模式1. **动机**2. **实现方式**3. **应用场景**4. **优点**5. **缺点** 序列化1. **动机**2. **实现方式**3. **应用场景**4. **优点**5. **缺点** 对比总结 动机 在软件构建过…...

绘制echarts-liquidfill水球图

文章目录 一、效果图二、步骤1.安装插件2.引入2.主要代码2.素材图片 总结 一、效果图 二、步骤 1.安装插件 npm install echarts npm install echarts-liquidfillecharts5的版本与echarts-liquidfill3兼容&#xff0c;echarts4的版本与echarts-liquidfill2兼容,安装的时候需要…...

应急响应:D盾的简单使用.

什么是应急响应. 一个组织为了 应对 各种网络安全 意外事件 的发生 所做的准备 以及在 事件发生后 所采取的措施 。说白了就是别人攻击你了&#xff0c;你怎么把这个攻击还原&#xff0c;看看别人是怎么攻击的&#xff0c;然后你如何去处理&#xff0c;这就是应急响应。 D盾功…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...