在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → FreeRTOS实时内核实用指南(中文)

FreeRTOS实时内核实用指南(中文)

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:2.44M
  • 下载次数:21
  • 浏览次数:159
  • 发布时间:2021-02-15
  • 实例类别:一般编程问题
  • 发 布 人:好学IT男
  • 文件格式:.pdf
  • 所需积分:2
 

实例介绍

【实例简介】
这篇文章的英文原版我是在www.FreeRTOS.net上下载得到的。其实我并没有决定 是否要在系统中使用FreeRTOS,虽然我想要的也仅仅是一个实时内核,当然更重要的是免费。之所以翻译这篇文章倒不是因为FreeRTOS有多么优秀,完全是因为这篇文章还不算太长。而且FreeRTOS.net仿佛致力于这个内核在国内的推广,也做了不少中文化的工作。所以我是打算利用工作之余,边看边译,到读完这篇文档,也就有个中文版了。如果FreeRTOS.net不弃的话,我倒是情愿放到这个网站上与大家共享
http://www.freertos.org 第一章 任务管理 Designed For Micr。 contr。11ers o 2009 Richard Barry. Distribution or publication in any form is strictly prohibited http://www.freertos.org 1.1概览 附录中提供了使用 FreeRTOS源代码的实用信息] 小型多任务嵌入式系统简介 不同的多任务系统有不同的侧重点。以工作站和桌面电脑为例: 早期的处理器非常昂贵,所以那时的多任务用于实现在单处理器|:支持多用户。这 类系统中的调度算法侧重于让每个用户”公平共享”处理器时间。 随着处埋器功能越来越强大,价格却更偏宜,所以每个用户都可以独占一个或多个 处理器。这类系统的调度算法则设计为让用户可以同时运行多个应用程序,而计算 机也不会显得反应迟钝。例如某个用户可能同时运行了一个字处理程序,一个电子 表格,一个邮件客户端和一个WEB浏览器,并且期望每个应用程序任何时候都能 对输入有足够快的响应时间。 桌面电脑的输入处理可以归类为”软实时”。为了保证用户的最佳体验,计算机对每 个输入的响应应当限定在一个恰当的时间范围—但是如果响应时间超出了限定范围 并个会让人觉得这台电脑无法使用。比如说,键盘操作必须在键按下后的某个时间内作 出明显的提示。但如果按键提示超出了这个时间,会使得这个系统看起来响应太慢,而 不致于说这台电脑不能使用。 仅仅从单处理器运行多线程这一点来说,实时嵌入式系统中的多任务与桌面电脑的 多任务从概念上来讲是相似的。但实时嵌入式系统的侧重点却不同于桌面电脑—特别 是当嵌入式系统期望提供”硬实时”行为的时候 硬实时功能必须在给定的时间限制之内完成—如果无法做到即意味着整个系统 的绝对失败。汽车的安全气囊触发杋制就是个硬实吋功能的例了。安全气囊在撞击发 生后给定时间限制内必须弹出。如果响应时间超出了这个时间限制,会使得驾驶员受到 伤害,而这原本是可以避免的。 大多数嵌入式系统不仅能满足硬实时要求,也能满足软实时要求。 Designed For Micr。 contr。11ers o 2009 Richard Barry. Distribution or publication in any form is strictly prohibited http://www.freertos.org 术语说明 在 FreeRTOS屮,每个执行线程都被称为'仁务”。在嵌入式社区屮,对此并没有 个公允的术语,但我更喜欢用”任务”而不是"线程”,因为从以前的经验来看,线程具有 更多的特定含义。 本章的目的是让读者充分了解: 在应用程序中, FreeRTOs如何为各任务分配处理时间。 ●在任意给定时刻, Freer○S如何选择任务投入运行。 ●任务优先级如何影响系统行为 任务存在哪些状态。 此外,还期望能够让读者解 如何实现一个任务。 如何创建一个或多个任务的实例 ●如何使用任务参数。 如何改变一个已创建任务的优先级。 ●如何删除任务 ●如何实现周期性处理 空闲任务何时运行,可以用来干什么。 本革所介绍的概念是理解如何使用 FreeRTOS的基础,也是理解基于 FreeRTOS 的应用程序行为方式的基础——因此,本章也是这本书中最为详尽的一章。 FreeRTOS Designed For Micr。 contr。11ers o 2009 Richard Barry. Distribution or publication in any form is strictly prohibited http://www.freertos.org 12任务函数 任务是由C语言函数实现的。唯一特别的只是任务的函数原犁,其必须返回void, 而且带有一个void指针参数3其数原型参见程序清单1。 void AtaskFunction( void *pvParameters 程序清单1任务函数原型 每个任务都是在自己权限氾围内的一个小程序。其具有程序入口,通常会运行在 个死循环中,也不会退出。一个典型的任务结构如程序清单2所示。 FreeRTOS任务不允许以任何方式从实现函数中返回一一它们绝不能有一 条" return”语句,也不能执行到函数末尾。如果一个任务不再需要,可以显式地将其删 除。这也在程序清单2展现。 个任务函数可以用来创建若干个任务—创建出的任务均是独立的执行实例,拥 有属于自己的栈空间,以及属于自己的自动变量(栈变量),即任务函数本身定义的变量 v。1 d AtaskFunction(v。1d* parameters) *可以像普通函数一样定义变量。用这个函数创建的每个任务实例都有一个属于自己的 VAria1b1 eExample变 量。但如果 vArial1e3 ample被定义为 static,这一点则不成立-这种情况下只存在一个变量,所有的任务实 例将会共享这个变量。*/ int ivariableExample =0 任务通常实现在一个死循环中 for(ii) /*完成任务功能的代码将放在这里。*/ /*如果任务的具体实现会跳出上面的死循环,则此任务必须在函数运行完之前朋除。传入NUL参数表示删除 的是当前任务* ⅴ TaskDelete(NULL) 程序清单2典型的任务函数结构 FreeRTOS Designed For Micr。 contr。11ers o 2009 Richard Barry. Distribution or publication in any form is strictly prohibited http://www.freertos.org 1.3顶层任务状态 应用程序叫以包含多个任务。如果运行应用程序的微控制器只有一个核(core),那 么在任意给定时间,实际上只会有一个任务被执行。这航意味着一个任务可以有一个或 两个状态,即运行状态和非运行状态。我们先考虑这种最简单的模型—但请牢记这其 实是过于简单,我们硝后将会看到非运行状态实际上又可划分为若干个子状态。 当某个任务处于运行态时,处理器就正在执行它的代码。当一个任务处于非运行态 时,该任务进行休眠,它的所有状态都被妥善保存,以便在下一次调试器决定让它进入 运行态时可以恢复执行。当任务恢复执行时,其将精确地从离开运行态时正准备执行的 那一条指令开始执行 All tasks that are Only one task not currentl can be in the Running are in the Running state at Not Running state any one time Not Running Running 图1顶层任务状态及状态转移 任务从非运行态转移到运行态被称为”切换入或切入( switched in)”或”交换入 ( swapped in)”。相反,任务从运行态转移到非运行态被称为”切换出或切出( switched out)"或”交换岀( swapped ou)。 FreeRTOS的调度器是能让任务切入切出的唯一实体 Designed For Micr。 contr。11ers o 2009 Richard Barry. Distribution or publication in any form is strictly prohibited http://www.freertos.org 14创建任务 TAsk create()AP|函数 创建任务使用 FreERTOS的AP函数 xTaskcreate(这可能是所有AP函数中最 复杂的函数,但不幸的是这也是我们第一个遇到的AP函数。但我们必须首先掌控任务 因为它们是多任务系统中最基本的组件。本书中的所有示例程序都会用到 tAsk Create(),所以会有人量的例子可以参考。 附录5:描述用到的数据类型和命名约定。 portBASE TYPE xTaskCreate( paTASK CODE pvTaskCode const signed port CHAR const pcName unsigned portSHORT usStackDepth vold *pvParameters r unsigned portBASE TYPE uxPriority, xTaskHandle *pxCreatedTask )i 程序清单3 XTask create0AP函数原型 表1× TaskCreate()参数与返回值 参数名 描述 pvTaskCode 任务只是永不退出的C函数,实现常通常是个死循环。参数 pv Task Code只个指向任务的实现函数的指针(效果上仅仅是函数 名) pcName 具有描述性的任务名。这个参数不会被 FreeRTOS使用。其只是单 纯地用于辋助调试。识别一个具有可读性的名字总是比通过句柄来 识别容易得多。 应用程序可以通过定义常量 config_ MAX TASK NAME LEN来定 义任务名的最大长度——包括"0结束符。如果传入的字符串长度超 过了这个最大值,字符串将会自动被截断。 FreeRTOS Designed For Micr。 contr。11ers o 2009 Richard Barry. Distribution or publication in any form is strictly prohibited http://www.freertos.org us Stack Depth当任务创建时,内核会分为每个任务分配属于任务自己的唯一状态 us Stack Depth值用于告诉内核为它分配多大的栈空间。 这个值指定的是栈空间可以保存多少个字(wod,而不是多少个字 节(byte)。比如说,如果是32位宽的栈空间,传入的 unStack Depth 值为100,则将会分配400字节的栈空间(100*4byes)。栈深度乘 以栈宽度的结果千万不能超过一个szet类型变量所能表达的最大 值。 应用程序通过定义常量 config| NIMAL STACK SIZE来决定空闲 任务任用的栈空间大小。在 FreeRTOS为微控制器架构提供的 Demo应用程序中,赋予此常量的值是对所有任务的最小建议值。 如果你的任务会使用大量栈空间,那么你应当赋予一个更大的值 没有任何简单的方法可以决定一个任务到底需要多人的栈空间。计 算出来虽然是可能的,但人多数用户会先简单地赋予一个自认为合 理的值,然后利用 FreeRTOS提供的特性来确证分配的空间既不欠 缺也不浪费。第六章包括了一些信息,可以知道如何去查询任务使 用了多少栈空问。 paRameters任务喲数接受一个指向void的指针(vod)。 paRameters的值即 是传递到任务中的值。这篇文档中的一些范例程序将会示范这个参 数可以如何使用。 uxPriority 指定任务执行的优先级。优先级的取值范围可以从最低优先级0到 最高优先级( configMAX PRIORITIES-1)。 configMAX PR|OR|TES是一个由用户定义的常量。优先级号并没 有上限(除了受限于采用的数据类型和系统的有效内存空间),但最 好使用实际需要的最小数值以避免内存浪费。如果 uxPriority的值 超过了( config MAX_PR|oRTS-1),将会导致实际赋给任务的优 先级被自动封顶到最大合法值。 FreeRTOS Designed For Micr。 contr。11ers o 2009 Richard Barry. Distribution or publication in any form is strictly prohibited http://www.freertos.org px Created Task px Created Task用于传出任务的句柄。这个句柄将在AP调用中对 该创建出来的任务进行引用,比如改变任务优先级,或者删除任务 如果应用程序中不会用到这个任务的句柄,则 pX Created Task可以 被设为NULL。 返回值 有两个可能的返回值: pdTRUE 表明任务创建成功 2. errCOULD NOT ALLOCATE REQUIRED MEMORY 由于内存堆空间不足, FreeRTOS无法分配足够的空间来保存任务 结构数据和任务栈,因此无法创建任务。 第五章将提供更多有关内存管理方面的信息。 例1.创建任务 附录1:包含一些关于示例程序生成工具的信息 本例演示了创建并启动两个任务的必要步骤。这两个任务只是周期性地打印输出字 符串,采用原始的空循环方式来产生周期延迟。两者在创建时指定了相同的优先级,并 且在实现上除输出的字符串外完仝一杵—一程序清单4和程序清单5是这两个仟务对应 的实现代码。 10 Designed For Microcontrollers o 2009 Richard Barry. Distribution or publication in any form is strictly prohibited 【实例截图】
【核心代码】

标签:

实例下载地址

FreeRTOS实时内核实用指南(中文)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警