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

极海APM32F107V6 移植FreeRTOS+CMSIS-RTOS V2

一、FreeRTOS:嵌入式开发的利器

在当今嵌入式系统日益复杂的背景下,实时操作系统(RTOS)已成为许多项目的必备选择。FreeRTOS作为当前全球应用最广泛的嵌入式实时操作系统之一,其价值和必要性体现在多个方面:

1 、多任务管理的必要性


传统的裸机编程采用前后台系统(超级循环)方式,当系统功能复杂度增加时,会出现如下问题:

任务响应不及时:高优先级任务无法立即得到处理

程序结构混乱:各种功能耦合在一起,维护困难

资源利用率低:CPU时间被浪费在空等待上

FreeRTOS通过抢占式调度机制完美解决了这些问题,允许开发者将应用拆分为多个独立任务,每个任务具有明确的优先级,系统会自动根据优先级分配CPU时间,确保关键任务及时响应。

2、 FreeRTOS的独特优势


完全免费:商业使用无需支付版权费用,降低了项目成本

资源占用小:内核仅占用4-9KB ROM和相当少的RAM,适合资源受限的MCU

可移植性强:支持40多种处理器架构,包括极海APM32F107采用的Cortex-M3内核

生态丰富:拥有庞大的用户社区和丰富的第三方组件支持

可靠性高:经过多年市场验证,在各种严苛环境下稳定运行

二、CMSIS-RTOS V2接口

CMSIS-RTOS是ARM制定的嵌入式操作系统通用接口标准,其第二版(V2)相比直接使用FreeRTOS原生API具有显著优势:

  • 硬件无关性:使用CMSIS-RTOS V2 API编写的代码可以在不同RTOS之间移植,降低了厂商锁定风险

  • 代码标准化:统一的操作接口使项目代码更加规范,便于团队协作和维护

  • 功能扩展:提供了比FreeRTOS原生API更丰富的高级特性,如线程标志、事件记录等

AI帮我做的对比图:

三、极海SDK例程

然后有一个安装包

因为我不想在他这个sdk的文件夹操作,所以还是用回我之前改的工程吧

具体可以看:

极海APM32F107V6 gpio模拟串口-CSDN博客

四、FreeRTOS

1、路径添加

我这里一开始是用的sdk给的那个版本,后来我发现stm32cubemx生成的是v10的,我就替换成v10的了

2、添加相关文件

然后创建FreeRTOS文件夹,将这几个.c加进去

include文件加入FreeRTOSConfig.h,在例程那里有得复制

3、遇到注意项

编译版本要选version5的,我这电脑新装的v5.4.2的mdk,只有version6的,会报很多个portFORCE_INLINE的错误。

然后再编译,有几个重复定义的在apm32f10x_int.c和freertos文件中的port.c,把apm32f10x_int.c注释掉,保留port.c的就好

再编译就没有错误了。

五、使用CMSIS-RTOS V2

1、移植

之前用st的时候都是用的CMSIS-RTOS V2库,但是我搜了半天都找不到怎么获取CMSIS_RTOS_V2,所以我尝试了一下用stm32cubemx生成了一个stm32F107带freertos的工程,然后将工程目录下Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2直接复制到极海的工程里。

这里version要用 v1.8.5,不然cmsis_os2.c中引用的头文件会报错

rte勾选CMSIS CORE

添加路径

2、注意项

然后编译报错的话,FreeRTOSConfig.h中,对比一下stm32cubemx生成的工程里FreeRTOSConfig.h有什么要添加的,添加过去就好。

注意要加下边这个

六、程序编写

然后在main.c文件就可以用CMSIS-RTOS V2的方式来创建freertos的任务句柄

这里我加了一个测试任务

在main函数开启任务

任务函数:

七、验证

这里就是跑2个任务简单验证一下。

看着是可以的

注意注意!

我就是单纯的将stm32cubemx的CMSIS-RTOS V2复制过来,而且验证也就是跑了2个简单的任务,模仿有风险!

完全应用的话,我觉得需要对FreeRTOS和CMSIS-RTOS V2都很熟悉的人才行,但很遗憾我并不是。。还在努力中

后边我也继续沿用这个工程,看有什么问题。

http://www.dtcms.com/a/478899.html

相关文章:

  • Centos Stream 8 搭建Cas Server
  • 营销型网站建设优化汽车电商网站建设
  • 网站建设中最基本的决策南昌网站建设和推广
  • 网页设计网站如何添加链接家庭网站建设
  • ModuleNotFoundError: No module named ‘conda_token‘
  • 长春哪家做网站做的好网站建设员是做什么的
  • Milvus部署在T4 GPU上,Dify检索性能可以提升多少?
  • 南阳手机网站推广h5网页设计软件
  • 戴森球的物理模拟
  • 基于springboot社区养老服务平台的设计与实现(附源码)
  • 晨光科技 网站建设北京优化网站
  • 简易水位报警器方案开发案例
  • 公司网站建设费用计入什么科目做网站主页
  • 最长子串和分配苹果问题
  • Ubuntu设置共享文件夹
  • 网站开发一个多少钱系统网站推广方案怎么做
  • 制作网站需要懂哪些重生北京上大学开网吧做网站的小说
  • 二级域名iis建立网站免费企业邮箱排名
  • Linux程序设计从入门到实战(价值198元)课程下载
  • Leetcode 3709. Design Exam Scores Tracker
  • 告别环境配置难题:GISBox如何让DWG转GeoJSON零门槛上手
  • 国外网页网站设计如何修改wordpress登录页
  • 如需锦州网站建设网站备案前置审批表
  • 什么网站资源多东营最新通知
  • Docker图形化管理,轻松上手docker
  • C#利用.Net8.0新建站Mvc项目及支持Swagger服务的操作方法
  • 怎么做个手机版的网站吗购买网店
  • 网站做外链的具体步骤免费建站哪家性价比高
  • 波动率聚类现象对ETF网格密度配置的启示与应对策略
  • Vis-NIR 与 MIR 光谱的三种传感器融合及建模流程