freertos简介与移植

news2024/11/27 7:30:51

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

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

相关文章

python之阈值分割

阈值分割法是一种基于区域的图像分割技术,原理是把图像像素点分为若干类。图像阈值化分割是一种传统的最常用的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术。它特别适用于目标和背景占据不同灰度级范…

python之股票财务分析

#import akshare as ak import pandas as pd import matplotlib.pyplot as plt symbol1"资产负债表" symbol2"利润表" symbol3"现金流量表" #df1ak.stock_financial_report_sina(stock"601633",symbolsymbol1) #df2ak.stock_financial…

Linux CentOS7 vim多窗口编辑

我们在用vim编辑文件时,有各种需求。如有时需要在多个文件之间来回操作,一会关闭一个文件,一会再打开另外一个文件,这样来回操作显得太笨拙。有时,vim编辑多行的大文件,来回查看、编辑前面一部分及最后一部…

《从零开始的Java世界》03面向对象(进阶)

《从零开始的Java世界》系列主要讲解Javase部分,从最简单的程序设计到面向对象编程,再到异常处理、常用API的使用,最后到注解、反射,涵盖Java基础所需的所有知识点。学习者应该从学会如何使用,到知道其实现原理全方位式…

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

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

使用 ClassFinal 对 java class 文件进行加密防止反编译

ClassFinal 是一款 java class文件安全加密工具,支持直接加密 jar 包或 war 包,无需修改任何项目代码,兼容 spring-framework;可避免源码泄漏或字节码被反编译 特点 无需修改原项目代码,只要把编译好的jar/war包用本工…

媒体梦工厂AI智聊:轻松提升工作效率的智能助手

在信息爆炸的时代,如何快速、准确地获取和处理信息,成为提高工作效率的关键。媒体梦工厂最新推出的AI智聊功能,为您提供了全新的解决方案,让您在工作和生活中轻松提升效率。 首先,我们要进入好简单批量智剪的主页面&am…

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…

2023年10月报价:腾讯云服务器租用价格表_轻量_CVM_GPU

阿里云服务器10月报价表来了&#xff0c;和9月份价格差不多&#xff0c;再等一个月就到腾讯云双十一优惠活动了&#xff0c;腾讯云百科先来说说10月腾讯云服务器优惠价格表&#xff1a;轻量应用服务器2核2G3M带宽95元一年、2核4G5M带宽218元一年、2核2G4M带宽三年价540元一年、…

绘制李萨如图,数据保存excel,txt

前置 看到网络上绘制的这么漂亮的数学图形&#xff0c;觉得能够用一个代码绘制全部的这些图形&#xff0c;就能提高不少效率&#xff0c;所以于是就心血来潮&#xff1a; 这是一个绘制李萨如图并保存数据的Python代码示例。下面是每行注释的详细解释&#xff1a; import os …

面试5g通信工程师对方要看芝麻信用分靠谱吗

大家好&#xff0c;我是网络工程师成长日记实验室的郑老师&#xff0c;您现在正在查看的是网络工程师成长日记专栏&#xff0c;记录网络工程师日常生活的点点滴滴 有个大兄弟说&#xff0c;他在深圳龙岗去面试5G网络优化工程师。对方说刚入职多少钱&#xff0c;工作一段时间多少…

内网信息收集

1.内网基本步骤 2.收集本机信息 3.查询当前用户 4.判断域存在不 看域名和ip是不是一个内网 5.查看域内主机 6.扫描域内主机端口 7.收集域内基本信息 8.查找域控 9.查看域内用户和管理员信息 10.定位域管理员 11.查看域管理进程 12.域管理员方法 13.利用powershell收集…

SpringCloud Alibaba - 基于 FeignClient 整合 Sentinel,实现“线程隔离”和“熔断降级”

目录 一、FeignClient 整合 Sentinel 1.1、整合原因 1.2、实现步骤 1.2.1、修改 OrderService 中的 application.yml 文件 1.2.2、给 FeignClient 编写失败后的降级逻辑 二、线程隔离 2.1、线程隔离的两种方式 2.1.1、线程池隔离 2.1.2、信号量隔离&#xff08;Sentin…

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

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

FPGA行业应用二:通用仪器行业

通用仪器指的是电子测试技术中涉及的仪器仪表&#xff0c;如&#xff1a;万用表&#xff0c;示波器&#xff0c;信号发生器&#xff0c;波形发生器&#xff0c;频谱分析仪&#xff0c;功率计&#xff0c;电源&#xff0c;等…… 用于测量&#xff0c;测试&#xff0c;控制&…

C语言编译与链接过程详解

C语言编译与链接过程详解 源文件 main.c #include <stdio.h>extern int data; extern int add(int a,int b);int a1; int a2 0; int a3 10;static int b1; static int b2 0; static int b3 20;int main() {int c1;int c2 0;int c3 30;static int d1;static int …

QQ通信协议

不管UDP还是TCP&#xff0c;最终登陆成功之后&#xff0c;QQ都会有一个TCP连接来保持在线状态。这个TCP连接的远程端口一般是80&#xff0c;采用UDP方式登陆的时候&#xff0c;端口是8000。因此&#xff0c;假如你所在的网络开放了80端口&#xff08;80端口是最常用端口。。就是…

轻松掌握二叉树和堆(保姆级详解,小白必看系列)

目录 一、前言 二、二叉树的概念和结构 &#x1f34e;二叉树的概念 &#x1f350;特殊的二叉树&#xff08;重点&#xff09; &#x1f349;二叉树的性质 &#xff08;超重点------面试做题会用&#xff09; &#x1f353;二叉树的概念选择题 &#x1f34c;二叉树的存储…

三、逻辑代数基础

1.简介 在数字电路中&#xff0c;我们用两种数码1和0来表示一个信号的两种不同的逻辑状态。 例如&#xff1a;用1表示开关闭合&#xff0c;电路导通&#xff1b;用0表示开关打开&#xff0c;电路断开。 这两种对立的逻辑关系就称之为二值逻辑。 当两种数码表示不同的逻辑状态…

Acwing 845. 八数码

Acwing 845. 八数码 知识点题目描述思路讲解代码展示 知识点 BFS 题目描述 思路讲解 分析一下y总的思路&#xff0c;也相当于做个课堂笔记吧&#xff08;这也太巧妙了吧&#xff0c;讲解视频不到20分钟&#xff0c;我愣是半天没想出来 1、题目的目标 2、移动情况 移动方式…