freertos简介与移植

freertos是一个可裁剪的小型rtos系统,特点:

  • 支持抢占式,合作式和时间片调度
  • saferos衍生自freertos,更完整
  • 提供了一个用于低功耗的tickless模式
  • 系统的组件在创建时可以选择动态或者静态的ram,例如任务,消息队列,信号量等等
  • 支持Corex-M系列MPU单元
  • 小巧简单,通常其内核占用4k-9k字节的空间
  • 高可移植性,主要由C语言编写
  • 支持实时任务和协程
  • 堆栈溢出检测
  • 创新时间组
  • 高效软件定时器

freertos编程风格(学习操作系统前了解风格有助于阅读源码)

新定义的数据类型:
来自普中教程

变量名命名:

如char型变量前缀是c,short型变量前缀是s,long型变量前缀是l,portBASE_TYPE类型变量前缀是x。其他例如数据结构,任务句柄,队列句柄等定义的变量名前缀也是x。
无符号型变量前缀加u,指针变量前缀加p,例如定义一个无符号char类型变量前缀会加uc,定义一个char类型指针变量时加前缀pc

函数名命名:

如果是私有的函数会加prv(private)前缀,从函数名可以看出他的返回值,定义文件名,和函数功能,例如vTaskPrioritySet()函数的返回值为v,在task.c这个文件中定义。

宏定义命名:

在宏定义名加小写字母前缀表明此定义所在的文件,例如port前缀在portable的h文件中,task前缀在task的h文件中,pd前缀在projdefs的h文件中,config前缀在FreeRTOSConfig的h文件中。
此外注意一些固定的宏:pdTRUE值为1,pdFALSE值为0,pdPASS值为1,pdFAIL值为0。

源码文件介绍:

FreeRTOS:Demo里是官方为各大芯片厂商写好的移植系统文件,极具参考价值。License里面是各种许可信息。Source里面源文件头文件include都是适用的,需要移植的C文件在portable文件里面,这里有不同的环境,内核该用的文件。Keil,GCC,IAR等等环境,RVDS是不同内核文件,主要是连接软硬件的接口文件。Memmarg是内存管理方式,推荐用heap4。

移植过程:
基础工程-》建文件夹freertos放系统文件源码,全部拷贝进来-》删掉portable中不需要的文件,例如keil里移植到stm32就只需要Keil,Memmarg,RVDS-》单击三色块,工程组添加freeRTOS_port和freeRTOS_core,前者添加内存管理文件Memmarg和接口文件RVDS(port文件),后者添加Source里面除了文件夹的所有源文件-》指定头文件路径:单击魔术棒选择c/c++,添加inclue和RVDS中的头文件-》编译检查错误-》将Demo里的或者已有的FreeRTOSconfig文件复制到工程头文件中-》编译检查错误:与中断相关的俩函数重复了,需要注释掉上面的空函数108和120行左右(图一)-》替换延时函数systick文件(->需要编写systick_Handler函数中的心跳函数先判断系统状态(图二))
在这里插入图片描述
图1(在stm32f10x_it.c文件里面)
在这里插入图片描述
图2
操作系统的时钟源是滴答定时器,在systick_init里根据芯片时钟初始化操作系统的时钟。基础实验里滴答定时器是APBH的八分频,也就是9MHz,这里要改为72MHz。一个微妙延时函数,两个毫秒延时函数其中ms要引发任务调度,xms不引发任务调度。(普中嗨小易P11)

移植过程常见错误:

  1. 直接复制工程,芯片型号错误
  2. 中断函数重定义
  3. SysTick_Handler函数未实现
  4. 在option里面未勾选use microlib选项
  5. 未添加头文件路径

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

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

相关文章

MARS: An Instance-aware, Modular and Realistic Simulator for Autonomous Driving

● MARS: An Instance-aware, Modular and Realistic Simulator for Autonomous Driving(基于神经辐射场的自动驾驶仿真器) ● https://github.com/OPEN-AIR-SUN/mars ● https://arxiv.org/pdf/2307.15058.pdf ● https://mp.weixin.qq.com/s/6Ion_DZGJ…

【新版】系统架构设计师 - 层次式架构设计理论与实践

个人总结,仅供参考,欢迎加好友一起讨论 文章目录 架构 - 层次式架构设计理论与实践考点摘要层次式体系结构概述表现层框架设计MVC模式MVP模式MVVM模式使用XML设计表现层表现层中UIP设计思想 中间层架构设计业务逻辑层工作流设计业务逻辑层设计 数据访问层…

代码随想录算法训练营第五十一天 |309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费、总结

一、309.最佳买卖股票时机含冷冻期 题目链接/文章讲解:代码随想录 视频讲解:动态规划来决定最佳时机,这次有冷冻期!| LeetCode:309.买卖股票的最佳时机含冷冻期_哔哩哔哩_bilibili 思考: 1.确定dp数组&…

MySQL SQL性能分析(SQL优化 一)

在开发和维护数据库应用程序时,优化SQL查询的性能是至关重要的。MySQL提供了一些强大的工具和技术,帮助我们进行SQL性能分析,找出潜在的瓶颈并进行相应的优化。 查看SQL的执行频率 show [ session| global ] status 命令查看服务器状态信息…

Android Live Edit 给 Android开发者带来的福音

Android Live Edit 是一个允许开发者实时更新模拟器和物理设备中的可组合内容的功能。 微信公众号【biglead】的每日提醒 随时随记 每日积累 此功能最大限度地减少了编写和构建应用程序之间的上下文切换,让开发者专注于编写代码更长时间而不会中断。 在AndroidStu…

【VIM】VIm初步使用

玩转Vim-从放弃到入门_哔哩哔哩_bilibili

传输层协议—UDP协议

传输层协议—UDP协议 文章目录 传输层协议—UDP协议传输层再谈端口号端口号范围划分pidofnetstat UDP协议端格式UDP报文UDP特点UDP缓冲区基于UDP的应用层协议 传输层 在学习HTTP/HTTPS等应用层协议时,为了方便理解,可以简单认为HTTP将请求和响应直接发送…

643. 子数组最大平均数I(滑动窗口)

目录 一、题目 二、代码 一、题目 643. 子数组最大平均数 I - 力扣&#xff08;LeetCode&#xff09; 二、代码 class Solution { public:double findMaxAverage(vector<int>& nums, int k) {double Average INT_MIN;double sum nums[0];int left 0, right 0…

oracle-使用PLSQL工具自行修改用户密码

1、使用PLSQL工具&#xff0c;输入用户名和原密码登录&#xff0c;如下图 2、登录后&#xff0c;在会话下拉菜单中找到”Change password..” 3、在跳出的窗口中配置新密码&#xff0c;修改完成后单击”确认”&#xff0c;后退出PLSQL 4、重新打开PLSQL&#xff0c;使用新密码登…

竞赛 机器学习股票大数据量化分析与预测系统 - python 竞赛

文章目录 0 前言1 课题背景2 实现效果UI界面设计web预测界面RSRS选股界面 3 软件架构4 工具介绍Flask框架MySQL数据库LSTM 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 机器学习股票大数据量化分析与预测系统 该项目较为新颖&am…

Vue3 引入使用 vant组件详解

目录 Vue3 引入使用 vant组件详解1.安装2.引入2.1 全局引入2.2 按需引入2.2.1 vite项目:vite.config.js2.2.2 Webpack项目&#xff1a;webpack.config.js2.2.3 配置在vue.config.js中 3.使用 Vue3 引入使用 vant组件详解 Vant是一个强大的移动端组件库&#xff0c;目前Vant 官…

Android stdio的Gradle菜单栏无内容问题的解决方法

右边Gradle菜单栏里没有Tasks选项内容的问题 正常情况↓ 如果这个问题如果无法解决的话&#xff0c;Gradle打包就只能通过控制台输入命令来解决&#xff0c;但这无疑是把简单问题复杂化了&#xff0c;我们来看看怎么解决这个问题吧。 这里有几个方法提供&#xff0c;可以自行选…

网络-Ajax

文章目录 前言一、Ajax优点&#xff1a;缺点&#xff1a; 二、使用步骤XNLHttpRequest对象完整代码 总结 前言 本文主要记录Ajax技术的简介&#xff0c;以及用法。 一、Ajax Ajax是一组用于在Web浏览器和Web服务器之间进行异步通信的Web开发技术。 它代表着Asynchronous Java…

RocketMQ Dashboard说解

RocketMQ Dashboard 是 RocketMQ 的管控利器&#xff0c;为用户提供客户端和应用程序的各种事件、性能的统计信息&#xff0c;支持以可视化工具代替 Topic 配置、Broker 管理等命令行操作。 介绍​ 功能概览​ 面板功能运维修改nameserver 地址; 选用 VIPChannel驾驶舱查看 …

MeterSphere v2.10.X-lts 双节点HA部署方案

一、MeterSphere高可用部署架构及服务器配置 1.1 服务器信息 序号应用名称操作系统要求配置要求描述1负载均衡器CentOS 7.X /RedHat 7.X2C,4G&#xff0c;200GB部署Nginx&#xff0c;实现负载路由。 部署NFS服务器。2MeterSphere应用节点1CentOS 7.X /RedHat 7.X8C,16GB,200G…

【算法】动态规划

文章目录 概述背包问题01背包问题&#xff1a;代码示例部分背包代码示例 完全背包代码示例 多重背包代码示例 总结提升 概述 动态规划&#xff08;Dynamic Programming&#xff09;是一种通过将问题划分为相互重叠的子问题来解决问题的算法思想。其核心思想是通过保存已经计算…

【数据结构】AVL树(C++实现)

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;数据结构 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【数据…

c#设计模式-结构型模式 之 享元模式

&#x1f680;简介 享元模式&#xff08;Flyweight Pattern&#xff09;是一种用于性能优化的模式&#xff0c;其核心是运用共享技术来有效支持大量细粒度的对象。享元模式可以避免大量非常相似类的开销。在程序设计中&#xff0c;有时需要生成大量细粒度的类实例来表示数据。…

打开泰坦陨落2找不到msvcp120.dll无法执行代码/msvcr120.dll丢失修复方法

msvcp120.dll 是 Windows 操作系统中的一个动态链接库文件&#xff0c;对于许多程序和游戏的运行起着至关重要的作用。然而&#xff0c;有时候我们可能会遇到 msvcp120.dll 丢失的情况&#xff0c;导致电脑出现各种问题。本文将详细介绍 msvcp120.dll 丢失的四种解决方法&#…

MySQL进阶_3.性能分析工具的使用

文章目录 第一节、数据库服务器的优化步骤第二节、查看系统性能参数第三节、 慢查询日志第四节、 查看 SQL 执行成本第五节、 分析查询语句&#xff1a;EXPLAIN 第一节、数据库服务器的优化步骤 当我们遇到数据库调优问题的时候&#xff0c;可以按照以下流程进行分析。整个流程…