基于STM32F107的FreeRTOS移植

基于STM32F107的FreeRTOS移植

ID:38283479

大小:232.23 KB

页数:6页

时间:2019-05-29

基于STM32F107的FreeRTOS移植_第1页
基于STM32F107的FreeRTOS移植_第2页
基于STM32F107的FreeRTOS移植_第3页
基于STM32F107的FreeRTOS移植_第4页
基于STM32F107的FreeRTOS移植_第5页
资源描述:

《基于STM32F107的FreeRTOS移植》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第8章基于STM32F107的FreeRTOS移植本章以FreeRTOS在STM32F107上的移植为主要内容,介绍移植的主要工作内容,及移植过程需要注意的事项。8.1概述FreeRTOS的实现主要由list.c、queue.c、croutine.c和tasks.c4个文件组成。list.c是一个链表的实现,主要供给内核调度器使用;queue.c是一个队列的实现,支持中断环境和信号量控制;croutine.c和task.c是两种任务的组织实现。协程(英文为croutine)是采用各任务共享同一个堆栈,使RAM的需求进一步缩小,但也正因如此,他的使用受到相对严格的限制。而

2、task则是传统的实现,各任务使用各自的堆栈,支持完全的抢占式调度。FreeRTOS的主要功能可以归结为以下几点:ß优先级调度、相同优先级任务的轮转调度,同时可设成可剥夺内核或不可剥夺内核ß任务可选择是否共享堆栈(co-routines&tasks),并且没有任务数限制ß消息队列,二值信号量,计数信号量,递归互斥体ß时间管理ß内存管理与UC/OS-II一样,FreeRTOS在STM32的移植大致由3个文件实现,一个.h文件定义编译器相关的数据类型和中断处理的宏定义;一个.c文件实现任务的堆栈初始化、系统心跳的管理和任务切换的请求;一个.s文件实现具体的任务切换。在本次移

3、植中,使用的编译软件为IAREWARM6.3。8.2FreeRTOS移植8.2.1portmacro.h头文件PORTMACRO.H头文件主要包括两部分内容。第一部分定义了一系列内核代码中用到的数据类型。FreeRTOS与uC/OS-II一样,并不直接使用char、int等这些原生数据类型,而是将其重新定义为一系列以port开头的新类型。这样的好处在于,在不同架构的处理器移植时,仅需针对处理器的位宽对这些数据类型做相应的调整,而无需繁琐地从头至尾修改源代码。第二部分包含了实现FreeRTOS移植所需要定义的函数。包括与架构相关的定义、内核调度、临界区管理、任务优化等。1

4、.数据类型定义定义编译器相关的各种数据类型。在uC/OS-II的移植代码中,通常采用typedef来定义新的267类型,而FreeRTOS的作者似乎更喜欢用宏定义#define。虽然typedef和#define能够实现相同的功能,但也有细微的区别,typedef由编译器解释,而非预处理器执行,并且仅限于对数据类型进行定义。尽管如此,typedef在其受限范围内比#define更为灵活。下面是相应的代码片段。#defineportCHARchar#defineportFLOATfloat#defineportDOUBLEdouble#defineportLONGlong

5、#defineportSHORTshort#defineportSTACK_TYPEunsignedportLONG#defineportBASE_TYPElong2.架构相关的定义定义与处理器或控制器架构相关的宏定义。条件编译中的代码是针对处理器的字长为16位,工程配置时应在FreeRTOSConfig.h中将宏定义改为“#defineconfigUSE_16_BIT_TICKS1”,若处理器字长为32位,宏定义为“#defineconfigUSE_16_BIT_TICKS0”。宏portSTACK_GROWTH定义了堆栈的生长方向。对于不同的嵌入式操作系统,堆栈的生

6、长方向定义可能不同,在移植时应予以明确。portSTACK_GROWTH定义为1表示堆栈是正向生长的,-1为逆向生长的。一般来说堆栈都是倒生的。Cortex-M3的堆栈增长方向为高地址向低地址增长,因此这里定义为-1。portTICK_RATE_MS表示的是Tick间间隔多少ms,只在应用代码中可能会用到。如使用vTaskDelay延时函数可实现任务定时间间隔地执行,调用方法如下。vTaskDelay(250/portTICK_RATE_MS);vTaskDelay传递参数中的250表示系统使当前任务处于阻塞态,并维持250ms。portBYTE_ALIGNMENT在u

7、C/OS-II是不需要的,FreeRTOS的代码中在分配任务堆栈空间时实现SRAM访问的字节对齐。/*SYSTEMTICK的长度。如果是16位以下的处理器置1;如果是32位处理器,则置0。*/#if(configUSE_16_BIT_TICKS==1)/*16位处理器及16位以下处理器*/typedefunsignedportSHORTportTickType;#defineportMAX_DELAY(portTickType)0xffff#else268/*32位处理器*/typedefunsignedportLONGportTickT

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

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

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