FreeRTOS+CubeMX编程实践
一.关于FreeRTOS
1.什么是FreeRTOS?
FreeRTOS是一个轻量级的操作系统。FreeRTOS提供的功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。FreeRTOS内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,CPU总是让处于就绪态的、优先级最高的任务先运行。FreeRT0S内核同时支持轮换调度算法,系统允许不同的任务使用相同的优先级,在没有更高优先级任务就绪的情况下,同一优先级的任务共享CPU的使用时间。 FreeRTOS的内核可根据用户需要设置为可剥夺型内核或不可剥夺型内核。当FreeRTOS被设置为可剥夺型内核时,处于就绪态的高优先级任务能剥夺低优先级任务的CPU使用权,这样可保证系统满足实时性的要求;当FreeRTOS被设置为不可剥夺型内核时,处于就绪态的高优先级任务只有等当前运行任务主动释放CPU的使用权后才能获得运行,这样可提高CPU的运行效率FreeRTOS对系统任务的数量没有限制。
2.FreeRTOS有哪些优点?
(1)FreeRTOS和裸机程序的比较
采用中断和查询结合的方式可以解决大部分裸机应用,但随着工程的复杂,裸机方式的缺点就暴露出来了。
必须在中断 (ISR) 内处理时间关键运算 内处理时间关键运算 ,并且需要很长执行时间 。
FreeRTOS相对于裸机程序多了一个调度器,是一个多线程的系统,可以提高程序执行的实时性。
(2)FreeRTOS免费,开源。
(3)比较容易上手。
二.通过CubeMX配置RTOS


其它的不用配置,直接生成就可以。

在调试程序的时候,可以在NVIC里面调整各个任务的优先级。
三.写FreeRTOS代码
在编写任务代码之前,先找到头文件task.h中是怎样定义函数的。
下面的这个是FreeRTOS的任务函数,也是我们编写程序中最常用的,最重要的。(大概只用这一个函数程序就可以正常的跑起来了)
1 portBASE_TYPE xTaskCreate(
2 pdTASK_CODE pvTaskCode, //指向任务的实现函数的指针。效果上仅仅是函数名
3 const portCHAR * const pcNane,// 具有描述性的任务名。FreeRTOS不会使用它。
4 unsigned portSHORT usStackDepth,// 指定任务堆栈的大小
5 void *pvParameters, // 指针用于作为一个参数传向创建的任务
6 unsigned portBASE_TYPE uxPriority,//任务运行时的优先级
7 xTaskHandle *pvCreatedTask//用于传递任务的句柄,可以引用从而对任务进行其他操作。
8 )
说明:1.这里的任务是指一个永远不会退出的C函数,通常是一个死循环。
2.pcNane其 只 是 单 纯 地 用 于 辅 助 调 试 。 应 用 程 序 可 以 通 过 定 义 常 量config_MAX_TASK_NAME_LEN 来定义任务名的最大长度—— 包括’\0’结束符。如果传入的字符串长度超过了这个最大值,字符串将会自动被截断。
3.usStackDepth这个值指定的是栈空间可以保存多少个字(word),而不是多少个字节(byte)。栈空间大小为usStackDepth*4(bytes)。
4.uxPriority优先级的取值范围可以从最低优先级0到最高优先级(configMAX_PRIORITIES–1)。
返回: 1.pdPASS 表明任务创建成功,准备运行。
2.errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY 由于内存堆空间不足,FreeRTOS 无法分配足够的空间来保存任务结构数据和任务栈,因此无法创建任务。
然后将这个函数应用在keil的多文件编程之中。
在任务文件的末尾定义一个要实现的task函数,将FreeRTOS函数的调用在这个函数里面封装起来。

然后将自己定义的这个函数在freertos.c里面调用。

FreeRTOS+CubeMX编程实践的更多相关文章
- 高性能javascript学习笔记系列(5) -快速响应的用户界面和编程实践
参考高性能javascript 理解浏览器UI线程 用于执行javascript和更新用户界面的进程通常被称为浏览器UI线程 UI线程的工作机制可以理解为一个简单的队列系统,队列中的任务按顺序执行 ...
- 高性能JavaScript 编程实践
前言 最近在翻<高性能JavaScript>这本书(2010年版 丁琛译),感觉可能是因为浏览器引擎的改进或是其他原因,书中有些原本能提高性能的代码在最新的浏览器中已经失效.但是有些章节的 ...
- Method Swizzling和AOP(面向切面编程)实践
Method Swizzling和AOP(面向切面编程)实践 参考: http://www.cocoachina.com/ios/20150120/10959.html 上一篇介绍了 Objectiv ...
- 编程实践中C语言的一些常见细节
对于C语言,不同的编译器采用了不同的实现,并且在不同平台上表现也不同.脱离具体环境探讨C的细节行为是没有意义的,以下是我所使用的环境,大部分内容都经过测试,且所有测试结果基于这个环境获得,为简化起见, ...
- 第二章 C语言编程实践
上章回顾 宏定义特点和注意细节 条件编译特点和主要用处 文件包含的路径查询规则 C语言扩展宏定义的用法 第二章 第二章 C语言编程实践 C语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ...
- 试读《JavaScript语言精髓与编程实践》
有幸看到iteye的活动,有幸读到<JavaScript语言精髓与编程实践_第2版>的试读版本,希望更有幸能完整的读到此书. 说来读这本书的冲动,来得很诡异,写一篇读后感,赢一本书,其实奖 ...
- Python GUI编程实践
看完了<python编程实践>对Python的基本语法有了一定的了解,加上认识到python在图形用户界面和数据库支持方面快捷,遂决定动手实践一番. 因为是刚接触Python,对于基本的数 ...
- [Java 并发] Java并发编程实践 思维导图 - 第一章 简单介绍
阅读<Java并发编程实践>一书后整理的思维导图.
- 《编写可维护的JavaScript》之编程实践
最近读完<编写可维护的JavaScript>,让我受益匪浅,它指明了编码过程中,需要注意的方方面面,在团队协作中特别有用,可维护性是一个非常大的话题,这本书是一个不错的起点. 本书虽短,却 ...
随机推荐
- javascript、css3曲线运动示例记录
想做一个加入购物车的曲线动效,网上找到两个demo,分别是js和css3实现的. js:https://www.cnblogs.com/wangmeijian/p/5824176.html jquer ...
- 微信小程序刚注册快速达到1000uv
一.什么是微信小程序uv UV:是累计独立访问,1个微信号就是一个uv,多次访问不算 大家想提升微信小程序uv都是为了开通流量主 二.流量主开通标准 达到1000uv就可以开通:严重违纪不 ...
- DAViCal 跨站请求伪造漏洞
受影响系统:DAViCal DAViCal <= 1.1.8描述:CVE(CAN) ID: CVE-2019-18346 DAViCal是一款日历共享服务器. DAViCal 1.1.8及之前版 ...
- Linux三剑客命令使用(持续更新)
(本文档内容部分来源于网络) awk删除文件第一列 1.采用awk awk '{$1="";print $0}' file 2.采用sed sed -e 's/[^]* //' f ...
- 使用tc配置后端设备,来限制虚拟机网卡带宽
如果通过tc来限制虚拟机网卡接收方向带宽呢,实际上使用tc对接收方向限制的不够好,使用tc ingress可以限制接收,但是功能不够多,而且会形成丢包问题.一般是采用将流量重定向到一个虚拟设备ifb上 ...
- CTF--这好像不是文件上传
打开题目F12看到一个被注释的跳转. 访问可以知道是一个文件包含 经过测试,该文件禁止了input.data关键字.并禁止了phar://协议. 使用php://filter读取题目源码得到 http ...
- 写fstable
mountpoint 就是挂载点./. /usr. swap 都是系统安装时分区的默认挂载点. 如果你要挂载一个新设备,你就要好好想想了,因为这个新设备将作为文件系统永久的一部分,需要根据FSSTND ...
- 【网鼎杯】jocker--部分代码加壳逆向处理
Main函数,用户输入flag,长度为24位 Wrong函数进行了简单的异或操作 Omg函数进行异或操作,根据提示来看应该是假check Encrypt无法生成伪代码 发现有加壳以及自修改,下断点动调 ...
- 100行代码实现HarmonyOS“画图”应用,eTS开发走起!
本期我们给大家带来的是"画图"应用开发者Rick的分享,希望能给你的HarmonyOS开发之旅带来启发~ 介绍 2021年的华为开发者大会(HDC2021)上,HarmonyOS ...
- 垃圾收集器G1和CMS ,以及老年代和新生代的比例设置
首先 1.G1是包括年轻代和年老代的GC 2.CMS是年老代GC 3.二者在某些时候都需要FullGC(serial old GC)的辅助 ###CMS收集器:CMS(ConCurrent Mark ...