一.关于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. 1 portBASE_TYPE xTaskCreate(
  2. 2 pdTASK_CODE pvTaskCode, //指向任务的实现函数的指针。效果上仅仅是函数名
  3. 3 const portCHAR * const pcNane,// 具有描述性的任务名。FreeRTOS不会使用它。
  4. 4 unsigned portSHORT usStackDepth,// 指定任务堆栈的大小
  5. 5 void *pvParameters, // 指针用于作为一个参数传向创建的任务
  6. 6 unsigned portBASE_TYPE uxPriority,//任务运行时的优先级
  7. 7 xTaskHandle *pvCreatedTask//用于传递任务的句柄,可以引用从而对任务进行其他操作。
  8. 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. CF1534F1题解

    首先,对于一个在第 \(i\) 行 \(j\) 列的沙子,如果他开始下降,他能够使哪些沙子下降呢? 很容易得知是第 \(j-1,j,j+1\) 列所有行号不小于 \(i\) 的沙子. 对于沙子 \(u ...

  2. 华夏基金X袋鼠云:基金业数字化转型,为什么说用户才是解题答案?

    "精准营销是以客户为中心,运用各种可利用的方式,在恰当的时间,以恰当的价格,通过恰当的渠道,向恰当的顾客提供恰当的产品." 这是学者许瑾在科特勒精准营销理论的基础上,从实践的角度对 ...

  3. 使用Xtrabackup 备份mysql数据库

    ##创建逻辑卷 [root@node1 ~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully create ...

  4. Python datetime获取当前年月日时分秒

    from datetime import datetime now_time = datetime.now() str_time = now_time.strftime("%Y-%m-%d ...

  5. 组合(n选k问题)

    #include "iostream.h" #include "string.h" int a[100]; void dfs(int n,int k) { if ...

  6. Nacos:Nacos与OpenFeign的对接使用

    Nacos(三):Nacos与OpenFeign的对接使用   上篇文章中,简单介绍了如何在SpringCloud项目中接入Nacos作为注册中心,其中服务消费者是通过RestTemplate+Rib ...

  7. XML常用解析API有哪几种?

    XML常用解析API有JAXP.JDOM.Dom4j等. JAXP是Java API for XML Processing的英文字头缩写,中文含义是:用于XML文档处理的使用Java语言编写的编程接口 ...

  8. 如何使用 Spring Boot 实现异常处理?

    Spring 提供了一种使用 ControllerAdvice 处理异常的非常有用的方法. 我们通过实现一个 ControlerAdvice 类,来处理控制器类抛出的所有异常.

  9. 为什么需要消息系统,mysql 不能满足需求吗?

    1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据 丢失风险.许多消息队列所采用的& ...

  10. Java 建造者Builder

    import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; import java.u ...