嵌入式实时系统FreeRTOS.ppt

  1. 1、本文档共152页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式实时系统 --FreeRTOS 1、FreeRTOS简介 FreeRTOS是一个嵌入式系统使用的开源实时系统。 FreeRTOS小巧,简单,易用。能支持许多不同硬件 架构以及交叉编译器。 此系统可以免费进行商业应用,被大量公司与科研公司用于嵌入式产品的开发。 支持的处理器架构:ARM7,ARM9,COLTEX-m3、AVR、PIC等。 1、FreeRTOS简介 嵌入式系统: 一个专门设计用来做一些简单事情的计算机系统,如电视遥控器,车载GPS,电子手表,或者起搏器这类。嵌入式系统比通用计算机系统更小更慢,通常也更便宜。 如:低端:一个运行速度为25MHz的8位CPU, 几KB的内存。 高端:一个运行速度为750MHz的32位 CPU,一个GB左右的内存,和几个GB的闪存。 1、FreeRTOS简介 实时(RT) 软实时:按照任务的优先级,尽可能快地完成操作即可 。 硬实时:硬实时要求在规定的时间内必须完成操作 。 1、FreeRTOS简介 系统基本架构 其代码可以分解为三个主要区块: 任务 通讯 硬件接口 ●任务:大约50%的FreeRTOS的核心代码 1、FreeRTOS简介 ●通讯:大约40%的FreeRTOS核心代码是用来处理通讯的。任务和中断使用队列互相发送数据,并且使用信号灯和互斥来发送临界资源的使用情况。 ●硬件接口:大约有6%的FreeRTOS的核心代码,在硬件无关的FreeRTOS内核与硬件相关的代码间扮演着垫片的角色。 2、任务简介 2.1任务函数 任务是由C语言函数实现的。任务函数其必须返回void, 而且带有一个void指针参数。其函数原型参见程序清单1。 void ATaskFunction( void *pvParameters ); 程序清单1 任务函数原型 2.1任务函数 注意事项: FreeRTOS 任务不允许以任何方式从实现函数中返回——它们绝不能有一条”return”语句,也不能执行到函数末尾。如果一个任务不再需要,可以显式地将其删除 (void vTaskDelete( xTaskHandlepxTaskToDelete );)。 2.1任务函数 创建任务: 创建任务使用FreeRTOS的API函数xTaskCreate()。 程序清单2 2.1任务函数 参数介绍 : pvTaskCode 一个指向任务的实现函数的指针(效果上仅仅是函数 名)。 pcName 具有描述性的任务名。这个参数不会被FreeRTOS使用。其只是单 纯地用于辅助调试。usStackDepth 当任务创建时,内核会分为每个任务分配属于任务自己的唯一状态。 usStackDepth值用于告诉内核为它分配多大的栈空间。 这个值指定的是栈空间可以保存多少个字(word),而不是多少个字 节(byte)。比如说,如果是32位宽的栈空间,传入的usStackDepth 值为100,则将会分配400字节的栈空间(100 * 4bytes)。 。 参数: pvParameters 任务函数接受一个指向void的指针(void*)。 pvParameters的值即是传递到任务中的值。 uxPriority 指定任务执行的优先级。优先级的取值范围可以从最低优先级0到最高优先级(configMAX_PRIORITIES – 1)。 configMAX_PRIORITIES 是一个由用户定义的常量。 pxCreatedTask 用于传出任务的句柄。这个句柄将在API调用中对该创建出来的任务进行引用,比如改变任务优先级,或者删除任务。如果应用程序中不会用到这个任务的句柄,则pxCreatedTask可以 被设为NULL 返回值 有两个可能的返回值: 1.pdTRUE 表明任务创建成功。 2.errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY 由于内存堆空间不足,FreeRTOS无法分配足够的空间来保存任务结构数据和任务栈,因此无法创建任务。 第五章将提供更多有关内存管理方面的信息。 2.1任务函数 例1. 创建任务 本例演示了创建并启动两个任务的必要步骤。 两个任务内容: 周期性地打印输出字符串。 两者在创建时指定了相同的优先级。 任务一:周期性输出: "Task 1 is running\r\n 任务二:周期性输出: "Task 2 is running\r\n" main()函数:简单地创建这两

文档评论(0)

nuvem + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档