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.xdnf.cn/news/147008.html

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

相关文章

快排三种递归及其优化,非递归和三路划分

个人主页:Lei宝啊 愿所有美好如期而遇 目录 快排简介: 快排的三种递归实现: Hoare: 挖坑: 双指针: 小区间优化: 三数取中优化: 快排非递归实现: 快排的三路划…

计算机网络(一):概述

参考引用 计算机网络微课堂-湖科大教书匠计算机网络(第7版)-谢希仁 1. 计算机网络在信息时代的作用 计算机网络已由一种通信基础设施发展成为一种重要的信息服务基础设施计算机网络已经像水、电、煤气这些基础设施一样,成为我们生活中不可或…

《CTFshow-Web入门》10. Web 91~110

Web 入门 索引web91题解总结 web92题解总结 web93题解 web94题解 web95题解 web96题解 web97题解 web98题解 web99题解总结 web100题解 web101题解 web102题解 web103题解 web104题解 web105题解总结 web106题解 web107题解 web108题解 web109题解 web110题解 ctf - web入门 索…

红外遥控器 数据格式,按下及松开判断

红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中。 同类产品的红…

iOS 视频压缩 mov转mp4 码率

最近还是因为IM模块的功能,IOS录制MOV视频发送后,安卓端无法播放,迫不得已兼容将MOV视频转为MP4发送。 其中mov视频包括4K/24FPS、4K/30FPS、4K/60FPS、720p HD/30FPS、1080p HD/30FPS、1080p HD/60FPS! 使用AVAssetExportSessi…

使用sqlmap获取数据步骤

文章目录 1.使用sqlmap获取所有数据库2.使用sqlmap获取当前连接数据库3.使用sqlmap获取当前数据库下所有表名4.使用sqlmap获取当前数据库下某个表下所有列名5.使用sqlmap获取当前数据库下某个表下指定字段的数据6.测试当前用户是否是管理员7.使用burpsqlmap批量检测8.脱库命令9…

zkLogin构建者的最佳实践和业务思考

随着zkLogin在Sui主网上线,构建者可以开始为其应用程序提供丝滑的帐户创建服务。与任何新技术集成一样,构建者需要考虑许多重要的问题,以降低风险并成功优化。 本文概述了其中一些考虑因素,并突出了zkLogin文档中提供的明确指导。…

二、机器学习基础知识:Python数据处理基础

文章目录 1、基本数据类型1.1 数字类型(Number)1.2 字符串类型(String)1.3 列表类型(List)1.4 元组类型(Tuple)1.5 字典类型(Dictionary)1.6 集合类型&#x…

掌动智能:替代JMeter的压力测试工具有哪些

JMeter是一个广泛使用的开源压力测试工具,但在实际应用中,也有一些其他优秀的替代品可供选择。本文将介绍几个可替代JMeter的压力测试工具,它们在功能、性能和易用性方面都具有独特优势,可以满足不同压力测试需求的选择。 一、Gat…

lvgl不能显示图片,但可以显示按键?

AT32F403A, IAR, ST7735S, LVGL8.3。 一、现象: 本来想着用LVGL做一个摄像头的显示功能 切换动态。可是死活实现不了功能。 因为移植好LVGL后,首先测试了显示按键,功能正常,以为是一切正常。在模拟器上调试效果完成后&#xf…

Scala第十三章节

Scala第十三章节 1. 高阶函数介绍 2. 作为值的函数 3. 匿名函数 4. 柯里化 5. 闭包 6. 控制抽象 7. 案例: 计算器 scala总目录 文档资料下载

IDEA git操作技巧大全,持续更新中

作者简介 目录 1.创建新项目 2.推拉代码 3.状态标识 5.cherry pick 6.revert 7.squash 8.版本回退 9.合并冲突 1.创建新项目 首先我们在GitHub上创建一个新的项目,然后将这个空项目拉到本地,在本地搭建起一个maven项目的骨架再推上去&#xff0…

Python集成开发环境(IDE):WingPro for Mac

WingPro for Mac是一款Python集成开发环境(IDE)软件,它提供了一系列强大的工具和功能,帮助Python开发人员提高开发效率和质量。 WingPro for Mac拥有直观的用户界面和强大的调试器,可以帮助用户快速定位问题和修复错误…

12链表-双指针

目录 LeetCode之路——21. 合并两个有序链表 分析: LeetCode之路——19. 删除链表的倒数第 N 个结点 分析: LeetCode之路——21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的…

宝塔反代openai官方API接口详细教程,502 Bad Gateway问题解决

一、前言 宝塔反代openai官方API接口详细教程,实现国内使用ChatGPT502 Bad Gateway问题解决, 此方法最简单快捷,没有复杂步骤,不容易出错,即最简单,零代码、零部署的方法。 二、实现前提 一台海外VPS服务…

网络安全——自学(黑客)方法

如果你想自学网络安全,首先你必须了解什么是网络安全!,什么是黑客!! 1.无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面性,例如 Web 安全技术,既有 Web 渗透2.也有 Web 防…

云原生之使用Docker部署RSS阅读器Huntly

云原生之使用Docker部署RSS阅读器Huntly 一、Huntly介绍1.1 Huntly简介1.2 Huntly功能 二、本次实践规划2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Huntly镜像五、部署Huntly5.1 创建挂…

Qt自定义菜单

Qt开发过程中,弹出菜单时我们一般使用QMenu,但是QMenu都是一条项固定的格式,如查想要自己的设计界面就没法使用默认的Action项了,因此我们得用自定义的QMenu。 本篇介绍使用自定义的QMenu设计出UI。我们使用QWidget QWidgetAction来实现。Q…

此芯科技加入百度飞桨硬件生态共创计划,加速端侧AI生态布局

近日,此芯科技(上海)有限公司(以下简称“此芯科技”)与百度签署硬件生态共创计划合作协议,正式加入由百度发起的硬件生态共创计划。双方将共同推动端侧AI和大模型在个人计算、车载计算以及元宇宙计算等领域…

拒绝水文!八大排序(二)【适合初学者】冒泡排序和选择排序

文章目录 冒泡排序选择排序 大家好,我是纪宁。 这篇文章介绍八大排序中思路最简单,但效率也是最低的两种排序算法! 冒泡排序 冒泡排序,可以说是每个人在接触编程时最先学会的一种排序。 冒泡排序基本思想 冒泡排序(…