FreeRTOS移植PICFK全过程_第1页
FreeRTOS移植PICFK全过程_第2页
FreeRTOS移植PICFK全过程_第3页
FreeRTOS移植PICFK全过程_第4页
FreeRTOS移植PICFK全过程_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、文档属性:FreeRTOS移植PIC18F25K22流程项目编号及名称:嵌入式开发保密级别:文档编号及名称:FreeRTOS移植PIC18F25K22流程版 本:1.0文档责任人: 傅雷日期:2014年9月17日版本历史日 期版 本修 改 描 述作 者审 核批准人审核人拟制人批准日期审核日期拟制日期2014-9浙江大学现代制造工程研究所版权所有0 声明该文档版仅供同学们学习参考,移植后的代码没有经过严格的测试,请勿随意移植到工程应用中,由此引起的事故责任,作者概不负责。OS版权所有:FreeRTOS V6.0.2 - Copyright (C) 2010 Real Time Engineers

2、 Ltd.文档版权所有:mymyray3同学1 准备1.1 硬件和编译环境1.1.1 开发板硬件选用PIC18F25K22,在淘宝上可以买到开发板,LIXUE工作室出品的。价格在140左右。1.1.2 IDE编译环境为MPLAB IDE V8.87C编译器为MCC18,版本号为3.38(以上编译环境均由开发板中的光盘提供)1.1.3 仿真器PICkit3,同一家店买的1.2 FreeRTOS相关移植文件准备1.2.1 下载移植文件在Microchip官网下载通用移植文件我是选了下面这个,点击download即可下载,解压后里面存在如下文件,1.2.2 查找有用的文件下载到的FreeRTOS为6

3、.0.4版本1)找到三个.c文件如上图所示,解压后,主要的文件在FreeRTOSSource文件夹中,如下所示:其中list.c , queue.c ,tasks.c 无需修改,作为主要的FreeRTOS的文件,2)找到与.c文件对应的.h文件如下图所示,与之对应的在FreeRTOSSourceinclude文件夹中:找到list.h , queue.h ,tasks.h,也无需修改。3)另外还有用的文件包括FreeRTOS.h , portable.h ,projdef.h4)找到heap_1.c找到FreeRTOSSourceportableMemMang文件夹里面5)移植修改文件主要包括

4、port.c portmacro.h,在找到FreeRTOSSourceportableMPLABPIC18F文件夹里面6)其他文件在FreeRTOS_C18FreeRTOS PrimerEjemplo文件夹中包含了主体的Demo工程文件,关注FreeRTOSConfig.h,还有两个.lkr链接文件。2 示例Demo说明点开FreeRTOS_C18FreeRTOS PrimerEjemplo文件夹中的.mcw工程文件,发现提示丢失文件,如下所示,其实是定位出现文件,依次对应步骤1.2.2中的各个文件夹位置查找,重新定位即可,定位好之后,编译即可通过,这个Demo示例针对的是PIC18F462

5、0芯片,和我们的芯片出现偏差,但是经过文件定位编译以后,确实可以进行仿真运行,工程环境中提供了一个sim虚拟仿真器运行,若没有实际的开发板,读者可以进行虚拟仿真,也可以进行学习。3 修改3.1 修改芯片在菜单Configure->Select Device中选择3.2 添加lkr文件3.2.1 说明该文件.lkr为链接文件,这个文件非常重要,用来分配ROM,RAM,EEPROM,SFR这些地址,一般的工程不用额外添加,但是由于FreeRTOS的中需要用到大量的大数据,而PIC18F系列独特的把RAM以256个字节为一个bank进行分解,容易造成数据错误。3.2.2 原始lkr文件查找原始

6、的lkr文件在MCC18的安装目录下,本系统由于是先安装了MCC18 V3.00版本,然后再升级到V3.38版本,因此寻找该lkr的文件夹的目录为原始文件如下:双击点开后呈现的内容为:/ File: 18f25k22_g.lkr/ Generic linker script for the PIC18F25K22 processor#DEFINE _CODEEND _DEBUGCODESTART - 1#DEFINE _CEND _CODEEND + _DEBUGCODELEN#DEFINE _DATAEND _DEBUGDATASTART - 1#DEFINE _DEND _DATAEND

7、+ _DEBUGDATALENLIBPATH .#IFDEF _CRUNTIME #IFDEF _EXTENDEDMODE FILES c018i_e.o FILES clib_e.lib FILES p18f25k22_e.lib #ELSE FILES c018i.o FILES clib.lib FILES p18f25k22.lib #FI#FI#IFDEF _DEBUGCODESTART CODEPAGE NAME=page START=0x0 END=_CODEEND CODEPAGE NAME=debug START=_DEBUGCODESTART END=_CEND PROTE

8、CTED#ELSE CODEPAGE NAME=page START=0x0 END=0x7FFF#FICODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTEDCODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTEDCODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTEDCODEPAGE NAME=eedata START=0xF00000 END=0xF000FF PROTECTED#IFDEF _EXTENDEDM

9、ODE DATABANK NAME=gpre START=0x0 END=0x5F#ELSE ACCESSBANK NAME=accessram START=0x0 END=0x5F#FIDATABANK NAME=gpr0 START=0x60 END=0xFFDATABANK NAME=gpr1 START=0x100 END=0x1FFDATABANK NAME=gpr2 START=0x200 END=0x2FFDATABANK NAME=gpr3 START=0x300 END=0x3FFDATABANK NAME=gpr4 START=0x400 END=0x4FF#IFDEF _

10、DEBUGDATASTART DATABANK NAME=gpr5 START=0x500 END=_DATAEND DATABANK NAME=dbgspr START=_DEBUGDATASTART END=_DEND PROTECTED#ELSE /no debug DATABANK NAME=gpr5 START=0x500 END=0x5FF#FIDATABANK NAME=sfr15 START=0xF38 END=0xF5F PROTECTEDACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTED#IFDEF _CRUN

11、TIME SECTION NAME=CONFIG ROM=config #IFDEF _DEBUGDATASTART STACK SIZE=0x100 RAM=gpr4 #ELSE STACK SIZE=0x100 RAM=gpr5 #FI#FI需要将文件修改成如下,主要就是把RAM中原来的几个bank合并在一起即可。还要注意各个地址的起始,地址起始需要参看PIC18F25K22的datasheet中的第5章“程序存储器构成”主要要注意红色方框中的地址,地址的起始一定要正确裁剪,lkr的修改我个人也是参考了demo中4620的lkr边摸索边修改的3.3 工程架构工程架构主要如上图所示,除了添加

12、了1.2.2步骤中所讲的文件外,还需要添加如下文件:1)MCC18的库函数:timer.h和t1open.c这两个函数主要用于作为FreeRTOS的定时用,2)自行编写的串口模块函数:EUSART_SCI.c和EUSART_SCI.h这个是作为运行时候串口输出的基本模块函数。3)main.c文件这个肯定不能少。3.4 文件修改3.4.1 FreeRTOS移植到PIC18Fxx的两个文件大多数书上和论坛上讲到的需要移植的两个文件:port.c,portmacro.h由于这个官方下载的demo案例以及修改好,其实反而不用去修改,需要修改的是一些细节地方3.4.2 FreeRTOSConfig.h1

13、)注意修改CPU的时钟频率,这块板子是4M的晶振,且没有倍频,则修改40000002)修改configTOTAL_HEAP_SIZE,原始demo文件中是1024,是因为PIC18F4620的RAM是4KB,而25k22只有1536Byte,因此必须裁剪到512.3)务必注意configMINIMAL_STACK_SIZE建议不要修改了,之前就因为贪图改到50,启动任务都没法启动。下面有些函数是需要用到的,如本移植例程中就会用到函数vTaskDelayUntil以及vTaskDelay,因此需要把这一位置1,其他的看情节,需要的置1,3.4.3 main函数的配置位修改原来的Demo采用462

14、0芯片,而25k22芯片的配置位设置有些偏差,具体如下编译完以后查看一下使用量,RAM的容量比较吃紧,建议至少使用PIC18F46K22,这个芯片提供4KB的RAM,会比较好一些。但个人整体感觉PIC18F系列的这个单片机RAM容量偏小,用过的飞思卡尔MC9S12XD系列RAM最多有20K,比较充足。4 运行FreeRTOS4.1 硬件对应说明采用了LIXUE开发板上两组LED灯,引脚分别对应RA4和RA5。输出1则亮灯。RS232串口采用了USART模块,RC7为RXD,RC6为TXD。芯片外界4M晶振,不倍频4.2 任务创建4.2.1 main函数创建了两个任务,主要包括task0和task1,4.2.2 task0说明创建task0时需要注意,4为优先级,开辟的内存空间其宏定义在3.4.2中说明,大小为105,但是笔者之前曾经因为无知,将该值修改为50,导致任务不能正常运行。其中,task0的功能为每2秒闪烁一下RA5对应的LED灯,同时由串口输出一个字符串:"this is task0 "4.2.3 task1说明其中,task1的功能为每2秒闪烁一下RA4对应的LED灯,同时由串口输出

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论