嵌入式实时系统FreeRTOS--ppt课件

上传人:路开 文档编号:320680099 上传时间:2022-07-01 格式:PPT 页数:152 大小:3.24MB
返回 下载 相关 举报
嵌入式实时系统FreeRTOS--ppt课件_第1页
第1页 / 共152页
嵌入式实时系统FreeRTOS--ppt课件_第2页
第2页 / 共152页
嵌入式实时系统FreeRTOS--ppt课件_第3页
第3页 / 共152页
嵌入式实时系统FreeRTOS--ppt课件_第4页
第4页 / 共152页
嵌入式实时系统FreeRTOS--ppt课件_第5页
第5页 / 共152页
点击查看更多>>
资源描述

《嵌入式实时系统FreeRTOS--ppt课件》由会员分享,可在线阅读,更多相关《嵌入式实时系统FreeRTOS--ppt课件(152页珍藏版)》请在金锄头文库上搜索。

1、嵌 入 式 实 时 系 统 - -F r e e R T O S1PPT课件1、FreeRTOS简介 FreeRTOS是一个嵌入式系统使用的开源实时系统。是一个嵌入式系统使用的开源实时系统。 FreeRTOS小巧,简单,易用。能支持许多不同硬件小巧,简单,易用。能支持许多不同硬件 架构以及交叉编译器。架构以及交叉编译器。 此系统可以免费进行商业应用,被大量公司与科研公司此系统可以免费进行商业应用,被大量公司与科研公司用于嵌入式产品的开发。用于嵌入式产品的开发。 支持的处理器架构:支持的处理器架构:ARM7,ARM9,COLTEX-m3、AVR、PIC等。等。 2PPT课件1、FreeRTOS简

2、介n嵌入式系统:嵌入式系统:n一个专门设计用来做一些简单事情的计算机系统,一个专门设计用来做一些简单事情的计算机系统,如电视遥控器,车载如电视遥控器,车载GPS,电子手表,或者起搏,电子手表,或者起搏器这类。嵌入式系统比通用计算机系统更小更慢,器这类。嵌入式系统比通用计算机系统更小更慢,通常也更便宜。通常也更便宜。n如:低端:一个运行速度为如:低端:一个运行速度为25MHz的的8位位CPU, 几几KB的内存。的内存。n 高端:一个运行速度为高端:一个运行速度为750MHz的的32位位 CPU,一个,一个GB左右的内存,和几个左右的内存,和几个GB的闪存。的闪存。3PPT课件1、FreeRTOS

3、简介n实时(实时(RT)n软实时:按照任务的优先级,尽可能快地完成操软实时:按照任务的优先级,尽可能快地完成操作即可作即可 。n硬实时:硬实时要求在规定的时间内必须完成操硬实时:硬实时要求在规定的时间内必须完成操作作 。4PPT课件1、FreeRTOS简介系统基本架构系统基本架构其代码可以分解为三个主要区块:其代码可以分解为三个主要区块:任务任务通讯通讯硬件接口硬件接口任务:大约任务:大约50%的的FreeRTOS的核心代码的核心代码5PPT课件1、FreeRTOS简介通讯:大约通讯:大约40%的的FreeRTOS核心代码是用来处理核心代码是用来处理通讯的。任务和中断使用队列互相发送数据,并通

4、讯的。任务和中断使用队列互相发送数据,并且使用信号灯和互斥来发送临界资源的使用情况。且使用信号灯和互斥来发送临界资源的使用情况。硬件接口:大约有硬件接口:大约有6%的的FreeRTOS的核心代码,的核心代码,在硬件无关的在硬件无关的FreeRTOS内核与硬件相关的代码内核与硬件相关的代码间扮演着垫片的角色。间扮演着垫片的角色。6PPT课件2、任务简介2.1任务函数任务函数 任务是由任务是由C语言函数实现的。任务函数其必须返语言函数实现的。任务函数其必须返回回void, 而且带有一个而且带有一个void指针参数。其函数原指针参数。其函数原型参见程序清单型参见程序清单1。void ATaskFun

5、ction( void *pvParameters ); 程序清单程序清单1 任务函数原型任务函数原型7PPT课件2.1任务函数任务函数注意事项:注意事项: FreeRTOS 任务不允许以任何方式从实现函数中返回任务不允许以任何方式从实现函数中返回它们绝不能有一条它们绝不能有一条”return”语句,也不能执行到函数语句,也不能执行到函数末尾。如果一个任务不再需要,可以显式地将其删除末尾。如果一个任务不再需要,可以显式地将其删除(void vTaskDelete( xTaskHandlepxTaskToDelete );)。)。8PPT课件2.1任务函数任务函数创建任务创建任务:创建任务使用创

6、建任务使用FreeRTOS的的API函数函数xTaskCreate()。 程序清单程序清单29PPT课件2.1任务函数任务函数n参数介绍参数介绍 :npvTaskCode 一个指向任务的实现函数的指针一个指向任务的实现函数的指针(效果上仅仅是函数效果上仅仅是函数n名名)。npcName 具有描述性的任务名。这个参数不会被具有描述性的任务名。这个参数不会被FreeRTOS使用。其使用。其只是单只是单n纯地用于辅助调试。纯地用于辅助调试。usStackDepth 当任务创建时,内核会分为每个当任务创建时,内核会分为每个任务分配属于任务自己的唯一状态。任务分配属于任务自己的唯一状态。nusStack

7、Depth值用于告诉内核为它分配多大的栈空间。值用于告诉内核为它分配多大的栈空间。n这个值指定的是栈空间可以保存多少个字这个值指定的是栈空间可以保存多少个字(word),而不是多少个字,而不是多少个字n节节(byte)。比如说,如果是。比如说,如果是32位宽的栈空间,传入的位宽的栈空间,传入的usStackDepthn值为值为100,则将会分配,则将会分配400字节的栈空间字节的栈空间(100 * 4bytes)。n。10PPT课件n参数:参数:npvParameters 任务函数接受一个指向任务函数接受一个指向void的指针的指针(void*)。 pvParameters的值即是传递到任务中

8、的值。的值即是传递到任务中的值。nuxPriority 指定任务执行的优先级。指定任务执行的优先级。优先级的取值范围可以从最低优先级优先级的取值范围可以从最低优先级0到最高优先级到最高优先级(configMAX_PRIORITIES 1)。nconfigMAX_PRIORITIES 是一个由用户定义的常量是一个由用户定义的常量。npxCreatedTask 用于传出任务的句柄。这个句柄将在用于传出任务的句柄。这个句柄将在API调用中对该创建出调用中对该创建出来的任务进行引用,比如改变任务优先级,或者删除任务。如果应用程序中来的任务进行引用,比如改变任务优先级,或者删除任务。如果应用程序中不会用

9、到这个任务的句柄,则不会用到这个任务的句柄,则pxCreatedTask可以可以n被设为被设为NULL11PPT课件n返回值返回值 n有两个可能的返回值:有两个可能的返回值:n1.pdTRUE n表明任务创建成功。表明任务创建成功。n2.errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY n由于内存堆空间不足,由于内存堆空间不足,FreeRTOS无法分配足够的空间来无法分配足够的空间来保存任务结构数据和任务栈,因此无法创建任务。保存任务结构数据和任务栈,因此无法创建任务。n第五章将提供更多有关内存管理方面的信息。第五章将提供更多有关内存管理方面的信息。12PPT课件2.

10、1任务函数任务函数例例1. 创建任务创建任务本例演示了创建并启动两个任务的必要步骤。本例演示了创建并启动两个任务的必要步骤。两个任务内容:两个任务内容:周期性地打印输出字符串。周期性地打印输出字符串。两者在创建时指定了相同的优先级。两者在创建时指定了相同的优先级。13PPT课件任务一:周期性输出任务一:周期性输出: Task 1 is runningrn14PPT课件任务二:周期性输出任务二:周期性输出: Task 2 is runningrn15PPT课件main()函数:简单地创建这两个任务,然后启动调函数:简单地创建这两个任务,然后启动调度器度器16PPT课件运行结果:运行结果: 图一图

11、一 17PPT课件2.1任务函数任务函数任务分配分析:任务分配分析:图图2中看到两个任务在同时运行,事实上这两个任务中看到两个任务在同时运行,事实上这两个任务由于优先级相同,而且在一个处理器上运行,其由于优先级相同,而且在一个处理器上运行,其实是在交替运行。实是在交替运行。真实的执行流程所图真实的执行流程所图3所示所示18PPT课件 2.1任务函数任务函数 图二19PPT课件2.1任务函数任务函数 上例中上例中main()函数在启动调度器之前先完成两个任务函数在启动调度器之前先完成两个任务 的创建。当然也可以从一个任务中创建另一个任务。的创建。当然也可以从一个任务中创建另一个任务。 我们可以先

12、在我们可以先在main()中创建任务中创建任务1,然后在任务,然后在任务1中创中创建任务建任务2这样需要在任务一中添加以下语句:这样需要在任务一中添加以下语句: xTaskCreate( vTask2, Task 2, 1000, NULL, 1, NULL );20PPT课件2.1任务函数任务函数n关于使用关于使用xTaskCreate()时任务函数的参数时任务函数的参数问题问题n例例1中的两个任务几乎完全相同,唯一的区中的两个任务几乎完全相同,唯一的区别就是打印输出的字符串。这种重复性可别就是打印输出的字符串。这种重复性可以通过创建同一个任务代码的两个实例来以通过创建同一个任务代码的两个实

13、例来去除。去除。n这时任务参数就可以用来传递各自打印输这时任务参数就可以用来传递各自打印输出的字符串。出的字符串。21PPT课件我们仍然调用两次xTaskCreate(),但其,但其pvParameters(第四个)(第四个) 参数变为了两个不同的指针,两个指针分别指向各自需要打印输出的文本。22PPT课件2.2任务调度任务的调度方法:任务的调度方法:通过对任务设置优先级进行优先级抢占式调度。通过对任务设置优先级进行优先级抢占式调度。每个任务都赋予了一个优先级。每个任务都赋予了一个优先级。每个任务都可以存在于一个或多个状态。每个任务都可以存在于一个或多个状态。在任何时候都只有一个任务可以处于运

14、行状态。在任何时候都只有一个任务可以处于运行状态。调度器总是在所有处于就绪态的任务中选择具调度器总是在所有处于就绪态的任务中选择具有最高优先级的任务来执行。有最高优先级的任务来执行。23PPT课件2.2任务调度优先级:优先级: xTaskCreate() API函数的参数函数的参数uxPriority(即第五个(即第五个参数)为创建的任务赋予了一个初始优先级。参数)为创建的任务赋予了一个初始优先级。 常量常量configMAX_PRIORITIES在在(FreeRTOSConfig.h文件中)的值,即是系统最多可具文件中)的值,即是系统最多可具有的优先级数目。有的优先级数目。0到到(confi

15、gMAX_PRIORITES 1) 函数优先级可以调用函数优先级可以调用vTaskPrioritySet() API函数进行函数进行修改。修改。24PPT课件2.2任务调度n关于优先级为零的任务介绍:关于优先级为零的任务介绍:n 当创建的任务都处于阻塞态时(很多时候都会有这种当创建的任务都处于阻塞态时(很多时候都会有这种情况出现),这种状态下所有的任务都不可运行,但处理情况出现),这种状态下所有的任务都不可运行,但处理器总是需要代码来执行器总是需要代码来执行所以至少要有一个任务处于运所以至少要有一个任务处于运行态。行态。n 为了保证这一点,当调用为了保证这一点,当调用vTaskStartSch

16、eduler()时,时,调度器会自动创建一个空闲任务(非常短小的循环)。调度器会自动创建一个空闲任务(非常短小的循环)。n空闲任务拥有最低优先级空闲任务拥有最低优先级(优先级优先级0),这样不会妨碍具有更,这样不会妨碍具有更高优先级的应用任务进入运行态。高优先级的应用任务进入运行态。25PPT课件2.2任务调度n图中任务一(图中任务一(Task1)任务二()任务二(Task2)都设置有定时阻)都设置有定时阻塞,任务二的优先级高于任务一的优先级,在两个任务都塞,任务二的优先级高于任务一的优先级,在两个任务都被阻塞的时候,空闲任务被阻塞的时候,空闲任务(idle)开始执行。开始执行。n 图三图三26PPT课件2.2任务调度n空闲任务钩子函数:空闲任务钩子函数:n 通过空闲任务钩子函数通过空闲任务钩子函数(或称回调,或称回调,hook, or call-back),可以直接在空闲任务中添加应用程序,可以直接在空闲任务中添加应用程序相关的功能。空闲任务钩子函数会被空闲任务每相关的功能。空闲任务钩子函数会被空闲任务每循环一次就自动调用一次。循环一次就自动调用一次。n 空闲任务钩子函数有很多用途,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号