一.关于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编程实践的更多相关文章

  1. 高性能javascript学习笔记系列(5) -快速响应的用户界面和编程实践

    参考高性能javascript 理解浏览器UI线程  用于执行javascript和更新用户界面的进程通常被称为浏览器UI线程  UI线程的工作机制可以理解为一个简单的队列系统,队列中的任务按顺序执行 ...

  2. 高性能JavaScript 编程实践

    前言 最近在翻<高性能JavaScript>这本书(2010年版 丁琛译),感觉可能是因为浏览器引擎的改进或是其他原因,书中有些原本能提高性能的代码在最新的浏览器中已经失效.但是有些章节的 ...

  3. Method Swizzling和AOP(面向切面编程)实践

    Method Swizzling和AOP(面向切面编程)实践 参考: http://www.cocoachina.com/ios/20150120/10959.html 上一篇介绍了 Objectiv ...

  4. 编程实践中C语言的一些常见细节

    对于C语言,不同的编译器采用了不同的实现,并且在不同平台上表现也不同.脱离具体环境探讨C的细节行为是没有意义的,以下是我所使用的环境,大部分内容都经过测试,且所有测试结果基于这个环境获得,为简化起见, ...

  5. 第二章 C语言编程实践

    上章回顾 宏定义特点和注意细节 条件编译特点和主要用处 文件包含的路径查询规则 C语言扩展宏定义的用法 第二章 第二章 C语言编程实践 C语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ...

  6. 试读《JavaScript语言精髓与编程实践》

    有幸看到iteye的活动,有幸读到<JavaScript语言精髓与编程实践_第2版>的试读版本,希望更有幸能完整的读到此书. 说来读这本书的冲动,来得很诡异,写一篇读后感,赢一本书,其实奖 ...

  7. Python GUI编程实践

    看完了<python编程实践>对Python的基本语法有了一定的了解,加上认识到python在图形用户界面和数据库支持方面快捷,遂决定动手实践一番. 因为是刚接触Python,对于基本的数 ...

  8. [Java 并发] Java并发编程实践 思维导图 - 第一章 简单介绍

    阅读<Java并发编程实践>一书后整理的思维导图.

  9. 《编写可维护的JavaScript》之编程实践

    最近读完<编写可维护的JavaScript>,让我受益匪浅,它指明了编码过程中,需要注意的方方面面,在团队协作中特别有用,可维护性是一个非常大的话题,这本书是一个不错的起点. 本书虽短,却 ...

随机推荐

  1. python3鸡兔同笼问题

    # 假设兔子有x只 for x in range(1,31): y = 30 - x if 4*x + 2*y == 90: print('兔子有%d只,鸡有%d只'%(x, y))

  2. [SPDK/NVMe存储技术分析]010 - 理解SGL

    在NVMe over PCIe中,I/O命令支持SGL(Scatter Gather List 分散聚合表)和PRP(Physical Region Page 物理(内存)区域页), 而管理命令只支持 ...

  3. MapReduce: Simplified Data Processing on Large Clusters 翻译和理解

    MapReduce: Simplified Data Processing on Large Clusters 概述 MapReduce 是一种编程模型,用于处理和生成大型数据集的相应实现.用户定义一 ...

  4. Ubuntu16.04安装、卸载宝塔软件

    宝塔是一款Linux可视化软件 1.一键安装 apt-get install wget && wget -O install.sh http://download.bt.cn/inst ...

  5. C++ 并发编程1

    一个简单的并发编程的举例 #include <iostream> #include <thread> using namespace std; void hello(){ co ...

  6. Lua协程的一个例子

    很久没记录笔记了,还是养成不了记录的习惯 下面是来自 programming in lua的一个协程的例(生产者与用户的例子) 帖代码,慢慢理解 -- Programming in Lua Corou ...

  7. 重写hashcode和equals方法

    重写hashcode和equals方法 简乐君 2019-05-07 21:55:43 35481 收藏 191分类专栏: Java 文章标签: equals() hashcode()版权 一.前言我 ...

  8. ConcurrentHashMap 的并发度是什么 ?

    ConcurrentHashMap 的并发度就是 segment 的大小,默认为 16,这意味着最多同时可以有 16 条线程操作 ConcurrentHashMap,这也是ConcurrentHash ...

  9. Redis 集群的主从复制模型是怎样的?

    为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所 以集群使用了主从复制模型,每个节点都会有 N-1 个复制品.

  10. JRE、JDK、JVM 及 JIT 之间有什么不同?

    JRE 代表 Java 运行时(Java run-time),是运行 Java 引用所必须的.JDK 代 表 Java 开发工具(Java development kit),是 Java 程序的开发工 ...