嵌入式实时系统freertos

嵌入式实时系统freertos

ID:22089068

大小:3.12 MB

页数:152页

时间:2018-10-22

嵌入式实时系统freertos_第1页
嵌入式实时系统freertos_第2页
嵌入式实时系统freertos_第3页
嵌入式实时系统freertos_第4页
嵌入式实时系统freertos_第5页
资源描述:

《嵌入式实时系统freertos》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、嵌入式实时系统--FreeRTOS1、FreeRTOS简介FreeRTOS是一个嵌入式系统使用的开源实时系统。FreeRTOS小巧,简单,易用。能支持许多不同硬件架构以及交叉编译器。此系统可以免费进行商业应用,被大量公司与科研公司用于嵌入式产品的开发。支持的处理器架构:ARM7,ARM9,COLTEX-m3、AVR、PIC等。1、FreeRTOS简介嵌入式系统:一个专门设计用来做一些简单事情的计算机系统,如电视遥控器,车载GPS,电子手表,或者起搏器这类。嵌入式系统比通用计算机系统更小更慢,通常也更便宜。如:低端:一个运行速度为25MHz的8位CP

2、U,几KB的内存。高端:一个运行速度为750MHz的32位CPU,一个GB左右的内存,和几个GB的闪存。1、FreeRTOS简介实时(RT)软实时:按照任务的优先级,尽可能快地完成操作即可。硬实时:硬实时要求在规定的时间内必须完成操作。1、FreeRTOS简介系统基本架构其代码可以分解为三个主要区块:任务通讯硬件接口●任务:大约50%的FreeRTOS的核心代码1、FreeRTOS简介●通讯:大约40%的FreeRTOS核心代码是用来处理通讯的。任务和中断使用队列互相发送数据,并且使用信号灯和互斥来发送临界资源的使用情况。●硬件接口:大约有6%的F

3、reeRTOS的核心代码,在硬件无关的FreeRTOS内核与硬件相关的代码间扮演着垫片的角色。2、任务简介2.1任务函数任务是由C语言函数实现的。任务函数其必须返回void,而且带有一个void指针参数。其函数原型参见程序清单1。voidATaskFunction(void*pvParameters);程序清单1任务函数原型2.1任务函数注意事项:FreeRTOS任务不允许以任何方式从实现函数中返回——它们绝不能有一条”return”语句,也不能执行到函数末尾。如果一个任务不再需要,可以显式地将其删除(voidvTaskDelete(xTaskHa

4、ndlepxTaskToDelete);)。2.1任务函数创建任务:创建任务使用FreeRTOS的API函数xTaskCreate()。程序清单22.1任务函数参数介绍:pvTaskCode一个指向任务的实现函数的指针(效果上仅仅是函数名)。pcName具有描述性的任务名。这个参数不会被FreeRTOS使用。其只是单纯地用于辅助调试。usStackDepth当任务创建时,内核会分为每个任务分配属于任务自己的唯一状态。usStackDepth值用于告诉内核为它分配多大的栈空间。这个值指定的是栈空间可以保存多少个字(word),而不是多少个字节(byt

5、e)。比如说,如果是32位宽的栈空间,传入的usStackDepth值为100,则将会分配400字节的栈空间(100*4bytes)。。参数:pvParameters任务函数接受一个指向void的指针(void*)。pvParameters的值即是传递到任务中的值。uxPriority指定任务执行的优先级。优先级的取值范围可以从最低优先级0到最高优先级(configMAX_PRIORITIES–1)。configMAX_PRIORITIES是一个由用户定义的常量。pxCreatedTask用于传出任务的句柄。这个句柄将在API调用中对该创建出来的任

6、务进行引用,比如改变任务优先级,或者删除任务。如果应用程序中不会用到这个任务的句柄,则pxCreatedTask可以被设为NULL返回值有两个可能的返回值:1.pdTRUE表明任务创建成功。2.errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY由于内存堆空间不足,FreeRTOS无法分配足够的空间来保存任务结构数据和任务栈,因此无法创建任务。第五章将提供更多有关内存管理方面的信息。2.1任务函数例1.创建任务本例演示了创建并启动两个任务的必要步骤。两个任务内容:周期性地打印输出字符串。两者在创建时指定了相同的优先级。任务一:

7、周期性输出:"Task1isrunningr任务二:周期性输出:"Task2isrunningr"main()函数:简单地创建这两个任务,然后启动调度器运行结果:图一2.1任务函数任务分配分析:图2中看到两个任务在同时运行,事实上这两个任务由于优先级相同,而且在一个处理器上运行,其实是在交替运行。真实的执行流程所图3所示2.1任务函数图二2.1任务函数上例中main()函数在启动调度器之前先完成两个任务的创建。当然也可以从一个任务中创建另一个任务。我们可以先在main()中创建任务1,然后在任务1中创建任务2.这样需要在任务一中添加以下

8、语句:xTaskCreate(vTask2,"Task2",1000,NULL,1,NULL);2.1任务函数关于使用xT

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。