登录
首页 » Others » FreeRTOS中文入门手册

FreeRTOS中文入门手册

于 2020-12-09 发布
0 151
下载积分: 1 下载次数: 1

代码说明:

FreeRTOS中文入门手册方便初学者入门学习,讲的很好,很值得学习第一章任务管理Designed For Micr。 contr。11exs;概览附录中提供了使用源代码的实用信息小型多任务嵌入式系统简介不同的多任务系统有不同的侧重点。以工作站和桌面电脑为例:·早期的处理器非常昂贵,所以那时的多仟务用于实现在单处理器上支持多用户。这类系统中的调度算法侧重于让每个用户公平共享处理器时间。随着处理器功能越来越强大,价格却更偏宜,所以每个用户都可以独占一个或多个处理器。这类系统的调度算法则设计为计用户可以同时运行多个应用程序,而计算机也不会显得反应迟钝。例如某个用户可能同时运行了一个字处理程序,一个电子表格,一个邮件客户端和一个浏览器,并且期望每个应用程序任何时候都能对输入有足够快的响应时间。桌面电脑的输入处珒可以归类为软实时。为了保证用户的最佳体验,计算机对每个输入的响应应当限定在一个恰当的时间范围——但是如果响应时间超出了限定范闱,并不会让人觉得这合电脑无法使用。比如说,键盘操作必须在键按下后的某个时间内作出明显的提示。但如果按键提示超出了这个时间,会使得这个系统看起来响应人慢,而不致于说这台电脑不能使用。仅仅从单处理器运行多线程这一点来说,实时嵌入式系统中的多任务与桌面电脑的多任务从概念上来讲是相似的。但实时嵌入式系统的侧重点却不同于桌面电脑特别是当嵌入式系统期望提供硬实时行为的时候。硬实时功能必须在给定的时间限制之内完成——如果无法做到即意味着整个系统的绝对失败。汽车的安全气囊触发机制就是一个硬实吋功能的例子。安全气囊在撞击发生后给定时间限制内必须弹出。如果响应时间超出了这个时间限制,会使得驾驶员受到伤害,而这原本是可以避免的大多数嵌入式系统不仅能满足硬实时要求,也能满足软实时要求。Designed For Micr。 contr。11exs;术语说明在屮,每个执行线程都被称为任务。在嵌入式社区屮,对此并没有个公允的术语,但我更喜欢用任务而不是线程,因为从以前的经验米看,线程具有更多的特定含义本章的目的是让读者充分了解:在应用程序中,如何为各仟务分配处理时间。●在任意给定时刻,如何选择任务投入运行。●任务优先级如何影响系统行为。●任务存在哪些状态。此外,还期望能够让读者解:●如何实现一个任务。●如何创建一个或多个任务的实例●如何使用任务参数。如何改变一个已创建任务的优先级●如何删除任务。●如何实现周期性处理。空闲任务何时运行,可以用来干什么本章所介绍的概念是理解如何使用的基础,也是理解基于的应用程序行为方式的基础——因此,本章也是这本书中最为详尽的一章Designed For Micr。 contr。11exs;任务函数任务是由语言数实现的。唯一特别的只是任务的函数原犁,其必须返回而且带有一个指针参数。其数原型参见程序清单。void ATaskFunction( void *pvParameters )程序清单任务函数原型每个任务都是在自己权限氾围内的一个小程序。其具有程序入口,通常会运行在一个死循环中,也不会退出。一个典型的任务结构如程序清单所示。仟务不允许以任何方式从实现函数中返回一一它们绝不能有条语句,也不能执行到函数末尾。如果一个任务不再需要,可以显式地将其删除。这也在程序清单展现个任务函数可以用来创建若干个任务—创建出的任务均是独立的执行实例,拥有属于自己的栈空间,以及属于自己的自动变量栈变量,即任务函数本身定义的变量v。 d ATaskFunction(v。1d* pArameters)/*可以像普通函数一样定义变量。用这个函数创延的每个任务实例都有一个属于自己的 vAria1b1 eExamp1e变量。但如果 varial1e3 xample被定义为 static,这一点则不成立-这种情况下只存在一个变量,所有的任务实例将会共享这个变量。int ivariableExample =0;/*仨务通常实现在一个死循环中。*/for(ii)/*完成任务功能的代码将放在这里。*//*如果任务的具体实现会跳出上面的死循环,则此任务必须在函数运行完之前朋除。传入NUL参数表示删除的是当前任务*vTaskDelete( NULL程序清单典型的任务函数结构Designed For Micr。 contr。11exs;顶层任务状态应用程序可以包含多个任务。如果运行应用程序的微控制器只有一个核那么在任意给定时间,实际上只会有一个仼务被执行。这就意味着一个任务可以有一个或两个状态,即运行状态和非运行状态。我们先考虑这种最简单的模型——但请牢记这其实是过于简单,我们硝后将会看到非运行状态实际上又可划分为若千个子状态。当某个任务处于运行态时,处理器就正在执行它的代码。当一个任务处于非运行态时,该任务进行休眠,它的所有状态都被妥善保存,以便在下一次调试器决定让它进入运行态时可以恢复执行。当任务恢复执行时,其将精确地从离开运行态时正准备执行的那一条指令开始执行。A tasks that areOnly one tasknot currentcan be in theRunning are in theRunning state atNot Running Stateany one timeNot RunningRunning图顶层任务状态及状态转移任务从非运行态转移到运行态被称为切换入或切入或交换入相反,任务从运行态转移到非运行态被称为切换出或切出或交换出的调度器是能让任务切入切出的唯一实体。Designed For Micr。 contr。11exs;创建任务函数创建仟务使用的函数这可能是所有数中最复杂的函数,但不幸的是这也是我们第一个遇到的函数。但我们必须首先掌控任务因为它们是多任务系统中最基本的组件。本书中的所有示例程序都会用到,所以会有人量的例子可以参考。附录:描述川到的数据类型和命名约定。portBASE TYPE xTaskCreate( paTASK CODE pvTaskCodeconst signed port CHAR conist pcNameunsigned portSHORT usstackDepthunsigned portEASE TYPE uxPriorityxTaskHandle *pxCreatedTask程序清单函数原型表参数与返回值参数名描述任务只是永不退出的函数,实现常通常是个死循环。参数只一个指向任务的实现函数的指针效果上仅仅是函数名具有描述性的任务名。这个参数不会被使用。其只是单纯地用于辅助调试。识别一个具有可读性的名字总是比通过句柄来识别容易得多。应用程序可以通讨定义常量来定义任务名的最大长度—一包括结朿符。如果传入的字符串长度超过了这个最大值,字符串将会自动被截断。Designed For Micr。 contr。11exs;当任务创建时,内核会分为每个任务分配属于任务自己的唯一状态。值用于告诉内核为它分配多人的栈空间。这个值指定的是栈空间可以保存多少个字,而不是多少个字节比如说,如果是位宽的栈空间,传入的值为则将会分配字节的栈空间。栈深度乘以栈宽度的绩果万不能超过~个类型变量所能表达的最人值。应川程序通过定义常量来决定空闲任条任用的栈空间大小。在为微控制器架构提供的应用程序中,赋予此常量的值是对所有任务的最小建议值如果你的任务会使用大量栈空间,那么你应当赋予一个更大的值。没有任何简单的方法可以决定一个任务到底需要多大的栈空间。计算出来虽然是可能的,但人多数用户会先简单地赋予一个自认为合理的值,然后利用提供的特性来确证分配的空间既不欠缺也不浪费。第六章包括了一些信息,可以知道如何去查询任务使用了多少栈空问。仟务函数接受一个指向的指钅的值即是传递到任务中的值。这篇文档中的一些范例程序将会示范这个参数可以如何使用指定任务执行的优先级。优先级的取值范围可以从最低优先级到最高优先级是一个由用户定义的常量。优生级号并没有上限除了受限于采用的数据类型和系统的有效内存空间,但最妊使用实际需要的最小数值以避免内在浪费。如果的值超过了,将会导致实际赋给任务的优先级被自动封顶到最大合法值。Designed For Micr。 contr。11exs;用于传出任务的句柄。这个句枢将在调川中对该创建出来的任务进行引用,比如改变任务优先级,或者删除仟务。如果应用程序中不会用到这个任务的包柄,则川以被设为返回值有两个可能的返回值:表明任务创建成功。由于内存堆空间不足,无法分配足够的空间来保存任务结构数据和任务栈,因此无法创建任务。第五章将提供更多有关内存管理方面的信息。例创建任务附录:包含一些关于示例程序生成工具的信息。本例演示了创建并启动两个任务的必要步骤。这两个任务只是周期性地打印输出守符串,采用原始的空循环方式来产生周期延迟。两者在创建时指定了相同的优先级,并且在实现上除输出的字符串外完全一样—程序清单4和程序清单5是这两个仟务对应的实现代码。Designed For Micr。 contr。11ers;

下载说明:请别用迅雷下载,失败请重下,重下不扣分!

发表评论


0 个回复

  • 二维离散小波变换
    利用matlab程序实现二维离散小波变换,并对小波系数矩阵进行重构,进而在程序的编辑过程中理解二维离散小波变换和重构的原理和实现。同时利用不同的小波和边缘延拓方法,对小波系数矩阵的能量、均值、方差、信噪比等统计量进行分析比较,更深入的了解小波变换。
    2020-12-02下载
    积分:1
  • 零件交易中心管理系统
    数据库系统概念课程设计,自己做的,再修改一下就可以用了
    2020-12-01下载
    积分:1
  • 几种直方图均衡化图像增强算法
    用于图像增强的几种直方图均衡化算法的Matlab实现,包括RMSHE和MMBEBHE,Histogram and Local Histogram Equalization。
    2021-05-06下载
    积分:1
  • CCA 特征融合 降维
    CCA 特征融合 降维 matlab程序实现 多元统计应用
    2020-11-28下载
    积分:1
  • LDPC码译码matlab代码
    本资源是基于matlab平台对LDPC码编译码原理的仿真,编码采用PEG算法,译码采用l和积译码,有详细注释。有问题欢迎留言讨论。
    2020-12-12下载
    积分:1
  • 电动汽车动力电池组管理系统设计.pdf
    分析了电动汽车电池管理系统干扰形成的原因,在此基础上针对干扰源从硬件和软件两方面提出了一些抗干扰措施,在车辆实际运行中,电池管理系统能稳定、可靠的工作,实践证明这些抗干扰设计可行,有效。
    2019-10-14下载
    积分:1
  • Labview去处掉数组重复的元素
    this vi is capble to remove the duplicated elements in the labview array.
    2020-12-10下载
    积分:1
  • matlab音频播放与辑GUI
    播放wav格式的文件实时显示波形,可以暂停继续,高质量录音,音频编辑(剪辑,滤波),还有几个无关紧要的功能。附带exe文件,不过要安装matlab2012b的mcr。好不容易写的,给个积分吧。实在想要又没有分的就联系我,或者需要使用但遇到问题也可以联系我。QQ2670166943
    2020-12-11下载
    积分:1
  • ARMA模型的Matlab代码
    ARMA模型的Matlab代码,欢迎大家前来下载
    2020-11-28下载
    积分:1
  • 史上最全最详细的flink 中文教(千多页pdf).pdf
    最全最详细的flink 中文教程,详细介绍各个接口,并附带demo(一千多页pdf)最全最详细的flink 中文教程,详细介绍各个接口,并附带demo(一千多页pdf)执行配置1.5.7.1程序打包和分布式执行1.5.7.2并行执行1.5.73执行计划1.5.74重启策略1.5.7.5类库158FlinkCeP-Fink的复杂事件处理1.5.8.1风暴兼容性Beta158.2Gelly Flink Graph AP158.3图AP1.5.84迭代图处理1.5.8.4.1类库方法1.584.2图算法1.5.8.4.3图形生成器1.5.844二分图1584.5FlinkML- Flink的机器学习1.5.85快速入门指南1.5.8.5.1如何贡献5.8.5.2交义验证1.58.5.3Distance metrics5.8.54K-Nearest Neighbors关联158.55MinMax scaler1.5.8.5.6Multiple Linear regression1.5.8.5.7在管道的引擎盖下看158.5.8Polynomial Features158.59随机异常值选择1.5.8.5.10Standard scaler158.5.11Alternating Least squares1.5.8.5.12SVM using COCoA1.58.5.13最佳实践1.59AP迁移指南1.5.10部署和运营集群和部署1.6.1独立群集1.6.1.1YARN设置1.6.1.2Mesos设置1.6.1.3Kubernetes设置1.6.14Docker设置1.6.1.5亚马逊网络服务(AWS)1.6.1.6Google Compute Engine设置1.6.1.7MapR设置1.6.1.8Hadoop集成1.6.19JobManager高可用性(HA)1.6.2状态和容错16.3检查点1.6.3.1保存点1.6.3.2状态后台1.6.3.3调整检查点和大状态1.6.3.4配置1.64生产准备清单1.6.5命令行界面166Scala REPl1.6.7Kerberos身份验证设置和配置168SSL设置6.9文件系统1.6.10升级应用程序和Fnk版本1.6.11调试和监控度量1.7.1如何使用日志记录1.7.2历史服务器1.7.3监控检查点1.74监测背压1.7.5监控 REST AP1.7.6调试 Windows和事件时间1.7.7调试类加载1.7.8应用程序分析1.7.9Flink Development1.8将 Flink导入|DE1.8.1从 Source建立Fink8.2内幕组件堆栈1.9.1数据流容错19.2工作和调度19.3任务生命周期194文件系统19.55Apache Flink文档Apache Flink文档译者: flink. sob.cn在线阅读●PDF格式EP∪B格式●MOB格式代码仓库本文档适用于 Apache Flink17 SNAPSHOT版。这些页面的建立时间为09/08/18,中部标准时同07:53:00°Apache Flink是一个用于分布式流和批处理数据处理的开源平台Fnk的核心是流数据流引擎’为数据流上的分布式计算提供数据分发’通信和容错。 Flink在流引擎之上构建批处理’覆盖本机达代支持,托管内存和程序优化。第一步概念∶从Fink的教据流编程模型和分布式运行时环境的基本概念开始。这将有助于您了解文档的其他部分·包括设置和编程指南σ我们建议您先闖读这些部分教程:o实现并运行 Data strean应用程序o设置本地Fink群集编程指南:您可以阅读我们关于基本AP|概念和 Data Stream A門或 Data Set APl的指南’以了解如何编写您的第一个Fink程序。部署在将Fink工作投入生产之前,请阅读生产准备清单发行说明发行说明涵盖了Fink版本之间的重要更改。如果您计划将Fink设置升级到更高版本,请仔细阅读这些说明。Fink1.6发行说明Fink1.5发行说明。外部资源6Apache Flink文档● Flink Forward: Flink forward网站和 You tube上提供了以往会议的讲座。使用 Apache Flink进行强大的流处理是一个很好的起点●培训∷数据工匠的培训材料包括幻灯片·练习和示例解決方案。·博客: Apache Flink和数据工匠博客发布了有关Fink的频繁深入的技术文章概念概念数据流编程模型数据流编程模型译者: flink. sob.cn抽象层次Flink提供不同级别的抽象来开发流/批处理应用程序SQLHigh-level LanguageTable AplDeclarative dslDataStream/Data Set APICore aplsStateful Stream ProcessingLoW-level building blockstreams, state, [event] time)●最低级抽象只提供有状态流。它通过卩 rocess Function嵌入到 Datastream aF丨中。它允许用户自由处理来自一个或多个流的事件,并使用一致的容错状态此外,用户可以注册事件时间和处理时间回调,允许程序实现复杂的计算实际上,大多数应用程序不需要上逑低级抽象,而是针对 Core a叫编程,如Data stream AP(有界/无界流)和 Data set ap(有界数据集)。这些流畅的A門提供了用于数据处理的通用构建坎’例如各种形式的用户指定的转换’连接’聚合’窗口’状态等。在这些AP丨中处理的数据类型在相应的编程语言中表示为类低级尸 rocess function与 Data stream A尸/集成’因此只能对某些算子操作进行低级抽象。该数据集A尸隈提供的有限数据集的其他原语,如循环/迭代。●该 Table ap是为中心的声明性DSL表,其可被动态地改变的表(表示流时)。该 Table a門遵循(扩展)关系模型:表有一个模式连接(类似于在关系数据库中的表)和A門|提供可比的算子操作·如选择,项目,连接,分组依据’聚合等 Table a門程序以声明方式定乂应该执行的逻辑算子操作,而不是准确指定算子操作代码的外观。虽然 Table ap丨可以通过各种类型的用户定义西数进行扩展’但它的表现力不如 Core AP’但使用更简洁(编写的代码更少)。此外, Table a門l程序还会通过优化程序·在执行之前应用优化规则。可以在衣和 Data strean/ Data set之同无缝转换’允许程序混合7 ble aP以及Data Stream u Data Set API数据流编程模型Flink提供的最高级抽象是SQL。这种抽象在语义和表达方面类似于7ab/eA門·但是将程序表示为SQL查询表达式。在SQL抽象与 Table apl紧密地相互作用’和SQL查询可以通过定义表来执行7ab/eA尸程序和数据流Flink程序的基夲构建块是流和转换。(请注意,Fink的 Data set a|中使用的Data Set也是内部流-稍后会详细介绍。)从概念上讲·流是(可能水无止境的数据记录流’而转换是将一个或多个流作为一个或多个流的算子操作。输入’并产生一个或多个输出流。执行时’Fink程序映射到流数据流’由流和转换算亍纽成σ毎个数据流都以一个或多个源开头,并以一个或多个接收器结東。数据流类似于任意有向无环图(DAG)°尽管通过迭代结构允许特殊形式的循环,但为了简单起见’我们将在大多数情况下对此进行掩饰。Datastream lines env. addsourceSourrenew FlinkKafkaconsumer>(.)Datastream Event> events =lines. map((line)-> carse(line)了FBs∫n?ato胃Datastrearrs-atis-.cs> statskerby (id"!fransformationtimewindow (Time, seconds(10)apply(new MyWNindowAggregationFurction();stas. addsink(new Rolling sink(path),SinkLsourceT! ansforratio门sinkperatorOperatorsOperatorkey By(/Sourcemap() window()SinkapplystreamStreaming Datarow通常,程序中的转換与数据流中的算子之同存在一对一的对应关系。但是,有时一个转换可能包含多个转换算子源流和接收器记录在流连接器和批处理连接器文档中。 Data Stream算子和 Data Set转换中记录了转换。10
    2020-11-04下载
    积分:1
  • 696518资源总数
  • 105117会员总数
  • 11今日下载