嵌入式实时系统FreeRTOS.pptx
《嵌入式实时系统FreeRTOS.pptx》由会员分享,可在线阅读,更多相关《嵌入式实时系统FreeRTOS.pptx(152页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、会计学1嵌入式实时系统嵌入式实时系统FreeRTOS1、FreeRTOS简介简介 FreeRTOSFreeRTOS是一个嵌入式系统使用的开源实时系统。是一个嵌入式系统使用的开源实时系统。是一个嵌入式系统使用的开源实时系统。是一个嵌入式系统使用的开源实时系统。FreeRTOSFreeRTOS小巧,简单,易用。能支持许多不同硬件小巧,简单,易用。能支持许多不同硬件小巧,简单,易用。能支持许多不同硬件小巧,简单,易用。能支持许多不同硬件 架构以及交叉编译器。架构以及交叉编译器。架构以及交叉编译器。架构以及交叉编译器。此系统可以免费进行商业应用,被大量公司与科研公司用于嵌入式产品的开此系统可以免费进行
2、商业应用,被大量公司与科研公司用于嵌入式产品的开此系统可以免费进行商业应用,被大量公司与科研公司用于嵌入式产品的开此系统可以免费进行商业应用,被大量公司与科研公司用于嵌入式产品的开发。发。发。发。支持的处理器架构:支持的处理器架构:支持的处理器架构:支持的处理器架构:ARM7,ARM9,COLTEX-m3ARM7,ARM9,COLTEX-m3、AVRAVR、PICPIC等。等。等。等。第1页/共152页1、FreeRTOS简介简介n n嵌入式系统:嵌入式系统:嵌入式系统:嵌入式系统:n n一个专门设计用来做一些简单事情的计算机系统,如电视遥控器,一个专门设计用来做一些简单事情的计算机系统,如电
3、视遥控器,一个专门设计用来做一些简单事情的计算机系统,如电视遥控器,一个专门设计用来做一些简单事情的计算机系统,如电视遥控器,车载车载车载车载GPSGPS,电子手表,或者起搏器这类。嵌入式系统比通用计算机,电子手表,或者起搏器这类。嵌入式系统比通用计算机,电子手表,或者起搏器这类。嵌入式系统比通用计算机,电子手表,或者起搏器这类。嵌入式系统比通用计算机系统更小更慢,通常也更便宜。系统更小更慢,通常也更便宜。系统更小更慢,通常也更便宜。系统更小更慢,通常也更便宜。n n如:低端:一个运行速度为如:低端:一个运行速度为如:低端:一个运行速度为如:低端:一个运行速度为25MHz25MHz的的的的8
4、8位位位位CPUCPU,几几几几KBKB的内存。的内存。的内存。的内存。n n 高端:一个运行速度为高端:一个运行速度为高端:一个运行速度为高端:一个运行速度为750MHz750MHz的的的的3232位位位位 CPUCPU,一个,一个,一个,一个GBGB左右的左右的左右的左右的内存,和几个内存,和几个内存,和几个内存,和几个GBGB的闪存。的闪存。的闪存。的闪存。第2页/共152页1、FreeRTOS简介简介n n实时(实时(RT)n n软实时:按照任务的优先级,尽可能快地完成操作即可软实时:按照任务的优先级,尽可能快地完成操作即可软实时:按照任务的优先级,尽可能快地完成操作即可软实时:按照任
5、务的优先级,尽可能快地完成操作即可 。n n硬实时:硬实时要求在规定的时间内必须完成操作硬实时:硬实时要求在规定的时间内必须完成操作硬实时:硬实时要求在规定的时间内必须完成操作硬实时:硬实时要求在规定的时间内必须完成操作 。第3页/共152页1、FreeRTOS简介简介系统基本架构系统基本架构其代码可以分解为三个主要区块:其代码可以分解为三个主要区块:任务任务通讯通讯硬件接口硬件接口任务:大约任务:大约50%的的FreeRTOS的核心代码的核心代码第4页/共152页1、FreeRTOS简介简介 通讯:大约通讯:大约通讯:大约通讯:大约40%40%的的的的FreeRTOSFreeRTOS核心代码
6、是用来处理通讯的。任务和中核心代码是用来处理通讯的。任务和中核心代码是用来处理通讯的。任务和中核心代码是用来处理通讯的。任务和中断使用队列互相发送数据,并且使用信号灯和互斥来发送临界资断使用队列互相发送数据,并且使用信号灯和互斥来发送临界资断使用队列互相发送数据,并且使用信号灯和互斥来发送临界资断使用队列互相发送数据,并且使用信号灯和互斥来发送临界资源的使用情况。源的使用情况。源的使用情况。源的使用情况。硬件接口:大约有硬件接口:大约有硬件接口:大约有硬件接口:大约有6%6%的的的的FreeRTOSFreeRTOS的核心代码,在硬件无关的的核心代码,在硬件无关的的核心代码,在硬件无关的的核心代
7、码,在硬件无关的FreeRTOSFreeRTOS内核与硬件相关的代码间扮演着垫片的角色。内核与硬件相关的代码间扮演着垫片的角色。内核与硬件相关的代码间扮演着垫片的角色。内核与硬件相关的代码间扮演着垫片的角色。第5页/共152页2、任务简介、任务简介2.1任务函数任务函数 任务是由任务是由任务是由任务是由C C语言函数实现的。任务函数其必须返语言函数实现的。任务函数其必须返语言函数实现的。任务函数其必须返语言函数实现的。任务函数其必须返回回回回voidvoid,而且带有一个而且带有一个而且带有一个而且带有一个voidvoid指针参数。其函数原指针参数。其函数原指针参数。其函数原指针参数。其函数原
8、型参见程序清单型参见程序清单型参见程序清单型参见程序清单1 1。void ATaskFunction(void*pvParameters);void ATaskFunction(void*pvParameters);程序清单程序清单程序清单程序清单1 1 任务函数原型任务函数原型任务函数原型任务函数原型第6页/共152页2.1任务函数任务函数注意事项:注意事项:注意事项:注意事项:FreeRTOS FreeRTOS 任务不允许以任何方式从实现函数中返回任务不允许以任何方式从实现函数中返回任务不允许以任何方式从实现函数中返回任务不允许以任何方式从实现函数中返回它们绝不能有一条它们绝不能有一条它们
9、绝不能有一条它们绝不能有一条”return”return”语句,也不能执行到函数末尾。如果一个任务不再需要,可以显语句,也不能执行到函数末尾。如果一个任务不再需要,可以显语句,也不能执行到函数末尾。如果一个任务不再需要,可以显语句,也不能执行到函数末尾。如果一个任务不再需要,可以显式地将其删除式地将其删除式地将其删除式地将其删除(void vTaskDelete(xTaskHandlepxTaskToDelete);void vTaskDelete(xTaskHandlepxTaskToDelete);)。)。)。)。第7页/共152页2.1任务函数任务函数创建任务创建任务创建任务创建任务:创
10、建任务使用创建任务使用创建任务使用创建任务使用FreeRTOSFreeRTOS的的的的APIAPI函数函数函数函数xTaskCreate()xTaskCreate()。程序清单程序清单程序清单程序清单2 2第8页/共152页2.1任务函数任务函数n n参数介绍参数介绍参数介绍参数介绍 :n npvTaskCode pvTaskCode 一个指向任务的实现函数的指针一个指向任务的实现函数的指针一个指向任务的实现函数的指针一个指向任务的实现函数的指针(效果上仅仅是函数效果上仅仅是函数效果上仅仅是函数效果上仅仅是函数n n名名名名)。n npcName pcName 具有描述性的任务名。这个参数不会
11、被具有描述性的任务名。这个参数不会被具有描述性的任务名。这个参数不会被具有描述性的任务名。这个参数不会被FreeRTOSFreeRTOS使用。其只是单使用。其只是单使用。其只是单使用。其只是单n n纯地用于辅助调试。纯地用于辅助调试。纯地用于辅助调试。纯地用于辅助调试。usStackDepth usStackDepth 当任务创建时,内核会分为每个任务分配属于任务自己的当任务创建时,内核会分为每个任务分配属于任务自己的当任务创建时,内核会分为每个任务分配属于任务自己的当任务创建时,内核会分为每个任务分配属于任务自己的唯一状态。唯一状态。唯一状态。唯一状态。n nusStackDepthusSt
12、ackDepth值用于告诉内核为它分配多大的栈空间。值用于告诉内核为它分配多大的栈空间。值用于告诉内核为它分配多大的栈空间。值用于告诉内核为它分配多大的栈空间。n n这个值指定的是栈空间可以保存多少个字这个值指定的是栈空间可以保存多少个字这个值指定的是栈空间可以保存多少个字这个值指定的是栈空间可以保存多少个字(word)(word),而不是多少个字,而不是多少个字,而不是多少个字,而不是多少个字n n节节节节(byte)(byte)。比如说,如果是。比如说,如果是。比如说,如果是。比如说,如果是3232位宽的栈空间,传入的位宽的栈空间,传入的位宽的栈空间,传入的位宽的栈空间,传入的usStac
13、kDepthusStackDepthn n值为值为值为值为100100,则将会分配,则将会分配,则将会分配,则将会分配400400字节的栈空间字节的栈空间字节的栈空间字节的栈空间(100*4bytes)(100*4bytes)。n n。第9页/共152页n n参数:参数:参数:参数:n npvParameters pvParameters 任务函数接受一个指向任务函数接受一个指向任务函数接受一个指向任务函数接受一个指向voidvoid的指针的指针的指针的指针(void*)(void*)。pvParameterspvParameters的值即是传递到任务中的值。的值即是传递到任务中的值。的值即是
14、传递到任务中的值。的值即是传递到任务中的值。n nuxPriority uxPriority 指定任务执行的优先级。指定任务执行的优先级。指定任务执行的优先级。指定任务执行的优先级。优先级的取值范围可以从最低优先级优先级的取值范围可以从最低优先级优先级的取值范围可以从最低优先级优先级的取值范围可以从最低优先级0 0到最高优先级到最高优先级到最高优先级到最高优先级(configMAX_PRIORITIES 1)(configMAX_PRIORITIES 1)。n nconfigMAX_PRIORITIESconfigMAX_PRIORITIES 是一个由用户定义的常量。是一个由用户定义的常量。是
15、一个由用户定义的常量。是一个由用户定义的常量。n npxCreatedTask pxCreatedTask 用于传出任务的句柄。这个句柄将在用于传出任务的句柄。这个句柄将在用于传出任务的句柄。这个句柄将在用于传出任务的句柄。这个句柄将在APIAPI调用中对该创建出来的任务进行引用,比如改调用中对该创建出来的任务进行引用,比如改调用中对该创建出来的任务进行引用,比如改调用中对该创建出来的任务进行引用,比如改变任务优先级,或者删除任务。如果应用程序中不会用到这个任务的句柄,则变任务优先级,或者删除任务。如果应用程序中不会用到这个任务的句柄,则变任务优先级,或者删除任务。如果应用程序中不会用到这个任
16、务的句柄,则变任务优先级,或者删除任务。如果应用程序中不会用到这个任务的句柄,则pxCreatedTaskpxCreatedTask可以可以可以可以n n被设为被设为被设为被设为NULLNULL第10页/共152页n n返回值返回值返回值返回值 n n有两个可能的返回值:有两个可能的返回值:有两个可能的返回值:有两个可能的返回值:n n1.pdTRUE 1.pdTRUE n n表明任务创建成功。表明任务创建成功。表明任务创建成功。表明任务创建成功。n n2.errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY 2.errCOULD_NOT_ALLOCATE_REQUIRE
17、D_MEMORY n n由于内存堆空间不足,由于内存堆空间不足,由于内存堆空间不足,由于内存堆空间不足,FreeRTOSFreeRTOS无法分配足够的空间来保存任务结构数据和无法分配足够的空间来保存任务结构数据和无法分配足够的空间来保存任务结构数据和无法分配足够的空间来保存任务结构数据和任务栈,因此无法创建任务。任务栈,因此无法创建任务。任务栈,因此无法创建任务。任务栈,因此无法创建任务。n n第五章将提供更多有关内存管理方面的信息。第五章将提供更多有关内存管理方面的信息。第五章将提供更多有关内存管理方面的信息。第五章将提供更多有关内存管理方面的信息。第11页/共152页2.1任务函数任务函数
18、例例1.创建任务创建任务本例演示了创建并启动两个任务的必要步骤。本例演示了创建并启动两个任务的必要步骤。两个任务内容:两个任务内容:周期性地打印输出字符串。周期性地打印输出字符串。两者在创建时指定了相同的优先级。两者在创建时指定了相同的优先级。第12页/共152页任务一:周期性输出任务一:周期性输出任务一:周期性输出任务一:周期性输出:Task 1 is runningrn:Task 1 is runningrn第13页/共152页任务二:周期性输出任务二:周期性输出任务二:周期性输出任务二:周期性输出:Task 2 is runningrn:Task 2 is runningrn第14页/共
19、152页main()main()函数:简单地创建这两个任务,然后启动调度器函数:简单地创建这两个任务,然后启动调度器函数:简单地创建这两个任务,然后启动调度器函数:简单地创建这两个任务,然后启动调度器第15页/共152页运行结果:运行结果:运行结果:运行结果:图一图一图一图一 第16页/共152页2.1任务函数任务函数任务分配分析:任务分配分析:任务分配分析:任务分配分析:图图图图2 2中看到两个任务在同时运行,事实上这两个任务由于优先级相同,中看到两个任务在同时运行,事实上这两个任务由于优先级相同,中看到两个任务在同时运行,事实上这两个任务由于优先级相同,中看到两个任务在同时运行,事实上这两
20、个任务由于优先级相同,而且在一个处理器上运行,其实是在交替运行。而且在一个处理器上运行,其实是在交替运行。而且在一个处理器上运行,其实是在交替运行。而且在一个处理器上运行,其实是在交替运行。真实的执行流程所图真实的执行流程所图真实的执行流程所图真实的执行流程所图3 3所示所示所示所示第17页/共152页 2.1任务函数任务函数 图二图二图二图二第18页/共152页2.1任务函数任务函数 上例中上例中上例中上例中main()main()函数在启动调度器之前先完成两个任务函数在启动调度器之前先完成两个任务函数在启动调度器之前先完成两个任务函数在启动调度器之前先完成两个任务 的创建。当然也可以的创建
21、。当然也可以的创建。当然也可以的创建。当然也可以从一个任务中创建另一个任务。从一个任务中创建另一个任务。从一个任务中创建另一个任务。从一个任务中创建另一个任务。我们可以先在我们可以先在我们可以先在我们可以先在main()main()中创建任务中创建任务中创建任务中创建任务1 1,然后在任务,然后在任务,然后在任务,然后在任务1 1中创建任务中创建任务中创建任务中创建任务2 2这样需要在这样需要在这样需要在这样需要在任务一中添加以下语句:任务一中添加以下语句:任务一中添加以下语句:任务一中添加以下语句:xTaskCreate(vTask2,Task 2,1000,NULL,1,NULL);xTa
22、skCreate(vTask2,Task 2,1000,NULL,1,NULL);第19页/共152页2.1任务函数任务函数n n关于使用关于使用xTaskCreate()时任务函数的参数时任务函数的参数问题问题n n例例1中的两个任务几乎完全相同,唯一的区中的两个任务几乎完全相同,唯一的区别就是打印输出的字符串。这种重复性可别就是打印输出的字符串。这种重复性可以通过创建同一个任务代码的两个实例来以通过创建同一个任务代码的两个实例来去除。去除。n n这时任务参数就可以用来传递各自打印输这时任务参数就可以用来传递各自打印输出的字符串。出的字符串。第20页/共152页我们仍然调用两次我们仍然调用两
23、次我们仍然调用两次我们仍然调用两次xTaskCreate()xTaskCreate(),但其,但其,但其,但其pvParameterspvParameters(第四个)(第四个)(第四个)(第四个)参数变为了两个不同的指针,两个参数变为了两个不同的指针,两个参数变为了两个不同的指针,两个参数变为了两个不同的指针,两个指针分别指向各自需要打印输出的文本。指针分别指向各自需要打印输出的文本。指针分别指向各自需要打印输出的文本。指针分别指向各自需要打印输出的文本。第21页/共152页2.2任务调度任务调度任务的调度方法:任务的调度方法:任务的调度方法:任务的调度方法:通过对任务设置优先级进行优先级抢
24、占式调度。通过对任务设置优先级进行优先级抢占式调度。通过对任务设置优先级进行优先级抢占式调度。通过对任务设置优先级进行优先级抢占式调度。每个任务都赋予了一个优先级。每个任务都赋予了一个优先级。每个任务都赋予了一个优先级。每个任务都赋予了一个优先级。每个任务都可以存在于一个或多个状态。每个任务都可以存在于一个或多个状态。每个任务都可以存在于一个或多个状态。每个任务都可以存在于一个或多个状态。在任何时候都只有一个任务可以处于运行状态。在任何时候都只有一个任务可以处于运行状态。在任何时候都只有一个任务可以处于运行状态。在任何时候都只有一个任务可以处于运行状态。调度器总是在所有处于就绪态的任务中选择具
25、有最高优先级的任务调度器总是在所有处于就绪态的任务中选择具有最高优先级的任务调度器总是在所有处于就绪态的任务中选择具有最高优先级的任务调度器总是在所有处于就绪态的任务中选择具有最高优先级的任务来执行。来执行。来执行。来执行。第22页/共152页2.2任务调度任务调度优先级:优先级:优先级:优先级:xTaskCreate()APIxTaskCreate()API函数的参数函数的参数函数的参数函数的参数uxPriorityuxPriority(即第五个参数)为创建的任务赋(即第五个参数)为创建的任务赋(即第五个参数)为创建的任务赋(即第五个参数)为创建的任务赋予了一个初始优先级。予了一个初始优先级
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 实时 系统 FreeRTOS
限制150内