FreeRTOS移植PIC18F25K22全过程.docx

上传人:b****5 文档编号:8330754 上传时间:2023-01-30 格式:DOCX 页数:13 大小:481.05KB
下载 相关 举报
FreeRTOS移植PIC18F25K22全过程.docx_第1页
第1页 / 共13页
FreeRTOS移植PIC18F25K22全过程.docx_第2页
第2页 / 共13页
FreeRTOS移植PIC18F25K22全过程.docx_第3页
第3页 / 共13页
FreeRTOS移植PIC18F25K22全过程.docx_第4页
第4页 / 共13页
FreeRTOS移植PIC18F25K22全过程.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

FreeRTOS移植PIC18F25K22全过程.docx

《FreeRTOS移植PIC18F25K22全过程.docx》由会员分享,可在线阅读,更多相关《FreeRTOS移植PIC18F25K22全过程.docx(13页珍藏版)》请在冰豆网上搜索。

FreeRTOS移植PIC18F25K22全过程.docx

FreeRTOS移植PIC18F25K22全过程

文档属性:

FreeRTOS移植PIC18F25K22流程

项目编号及名称:

嵌入式开发

保密级别:

文档编号及名称:

FreeRTOS移植PIC18F25K22流程

版本:

1.0

文档责任人:

傅雷

日期:

2014年9月17日

版本历史

日期

版本

修改描述

作者

审核

批准人

审核人

拟制人

批准日期

审核日期

拟制日期

 

2014-9

浙江大学现代制造工程研究所

版权所有

0声明

该文档版仅供同学们学习参考,移植后的代码没有经过严格的测试,请勿随意移植到工程应用中,由此引起的事故责任,作者概不负责。

OS版权所有:

FreeRTOSV6.0.2-Copyright(C)2010RealTimeEngineersLtd.

文档版权所有:

mymyray3同学

1准备

1.1硬件和编译环境

1.1.1开发板

硬件选用PIC18F25K22,在淘宝上可以买到开发板,LIXUE工作室出品的。

价格在140左右。

1.1.2IDE

编译环境为MPLABIDEV8.87

C编译器为MCC18,版本号为3.38

(以上编译环境均由开发板中的光盘提供)

1.1.3仿真器

PICkit3,同一家店买的

1.2FreeRTOS相关移植文件准备

1.2.1下载移植文件

在Microchip官网下载通用移植文件

我是选了下面这个,点击download即可下载,

解压后里面存在如下文件,

1.2.2查找有用的文件

下载到的FreeRTOS为6.0.4版本

1)找到三个.c文件

如上图所示,解压后,主要的文件在FreeRTOS\Source文件夹中,如下所示:

其中list.c,queue.c,tasks.c无需修改,作为主要的FreeRTOS的文件,

2)找到与.c文件对应的.h文件

如下图所示,与之对应的在FreeRTOS\Source\include文件夹中:

找到list.h,queue.h,tasks.h,也无需修改。

3)另外还有用的文件包括FreeRTOS.h,portable.h,projdef.h

4)找到heap_1.c

找到FreeRTOS\Source\portable\MemMang文件夹里面

5)移植修改文件

主要包括port.cportmacro.h,在找到FreeRTOS\Source\portable\MPLAB\PIC18F文件夹里面

6)其他文件

在FreeRTOS_C18\FreeRTOSPrimerEjemplo文件夹中包含了主体的Demo工程文件,关注FreeRTOSConfig.h,还有两个.lkr链接文件。

2示例Demo说明

点开FreeRTOS_C18\FreeRTOSPrimerEjemplo文件夹中的.mcw工程文件,发现提示丢失文件,如下所示,其实是定位出现文件,依次对应步骤1.2.2中的各个文件夹位置查找,重新定位即可,定位好之后,编译即可通过,

这个Demo示例针对的是PIC18F4620芯片,和我们的芯片出现偏差,但是经过文件定位编译以后,确实可以进行仿真运行,工程环境中提供了一个sim虚拟仿真器运行,若没有实际的开发板,读者可以进行虚拟仿真,也可以进行学习。

3修改

3.1修改芯片

在菜单Configure->SelectDevice中选择

3.2添加lkr文件

3.2.1说明

该文件.lkr为链接文件,这个文件非常重要,用来分配ROM,RAM,EEPROM,SFR这些地址,一般的工程不用额外添加,但是由于FreeRTOS的中需要用到大量的大数据,而PIC18F系列独特的把RAM以256个字节为一个bank进行分解,容易造成数据错误。

3.2.2原始lkr文件查找

原始的lkr文件在MCC18的安装目录下,本系统由于是先安装了MCC18V3.00版本,然后再升级到V3.38版本,因此寻找该lkr的文件夹的目录为

原始文件如下:

双击点开后呈现的内容为:

//File:

18f25k22_g.lkr

//GenericlinkerscriptforthePIC18F25K22processor

#DEFINE_CODEEND_DEBUGCODESTART-1

#DEFINE_CEND_CODEEND+_DEBUGCODELEN

#DEFINE_DATAEND_DEBUGDATASTART-1

#DEFINE_DEND_DATAEND+_DEBUGDATALEN

LIBPATH.

#IFDEF_CRUNTIME

#IFDEF_EXTENDEDMODE

FILESc018i_e.o

FILESclib_e.lib

FILESp18f25k22_e.lib

#ELSE

FILESc018i.o

FILESclib.lib

FILESp18f25k22.lib

#FI

#FI

#IFDEF_DEBUGCODESTART

CODEPAGENAME=pageSTART=0x0END=_CODEEND

CODEPAGENAME=debugSTART=_DEBUGCODESTARTEND=_CENDPROTECTED

#ELSE

CODEPAGENAME=pageSTART=0x0END=0x7FFF

#FI

CODEPAGENAME=idlocsSTART=0x200000END=0x200007PROTECTED

CODEPAGENAME=configSTART=0x300000END=0x30000DPROTECTED

CODEPAGENAME=devidSTART=0x3FFFFEEND=0x3FFFFFPROTECTED

CODEPAGENAME=eedataSTART=0xF00000END=0xF000FFPROTECTED

#IFDEF_EXTENDEDMODE

DATABANKNAME=gpreSTART=0x0END=0x5F

#ELSE

ACCESSBANKNAME=accessramSTART=0x0END=0x5F

#FI

DATABANKNAME=gpr0START=0x60END=0xFF

DATABANKNAME=gpr1START=0x100END=0x1FF

DATABANKNAME=gpr2START=0x200END=0x2FF

DATABANKNAME=gpr3START=0x300END=0x3FF

DATABANKNAME=gpr4START=0x400END=0x4FF

#IFDEF_DEBUGDATASTART

DATABANKNAME=gpr5START=0x500END=_DATAEND

DATABANKNAME=dbgsprSTART=_DEBUGDATASTARTEND=_DENDPROTECTED

#ELSE//nodebug

DATABANKNAME=gpr5START=0x500END=0x5FF

#FI

DATABANKNAME=sfr15START=0xF38END=0xF5FPROTECTED

ACCESSBANKNAME=accesssfrSTART=0xF60END=0xFFFPROTECTED

#IFDEF_CRUNTIME

SECTIONNAME=CONFIGROM=config

#IFDEF_DEBUGDATASTART

STACKSIZE=0x100RAM=gpr4

#ELSE

STACKSIZE=0x100RAM=gpr5

#FI

#FI

需要将文件修改成如下,主要就是把RAM中原来的几个bank合并在一起即可。

还要注意各个地址的起始,地址起始需要参看PIC18F25K22的datasheet中的第5章“程序存储器构成”

主要要注意红色方框中的地址,地址的起始一定要正确裁剪,lkr的修改我个人也是参考了demo中4620的lkr边摸索边修改的

3.3工程架构

工程架构主要如上图所示,除了添加了1.2.2步骤中所讲的文件外,还需要添加如下文件:

1)MCC18的库函数:

timer.h和t1open.c

这两个函数主要用于作为FreeRTOS的定时用,

2)自行编写的串口模块函数:

EUSART_SCI.c和EUSART_SCI.h

这个是作为运行时候串口输出的基本模块函数。

3)main.c文件

这个肯定不能少。

3.4文件修改

3.4.1FreeRTOS移植到PIC18Fxx的两个文件

大多数书上和论坛上讲到的需要移植的两个文件:

port.c,portmacro.h

由于这个官方下载的demo案例以及修改好,其实反而不用去修改,需要修改的是一些细节地方

3.4.2FreeRTOSConfig.h

1)注意修改CPU的时钟频率,这块板子是4M的晶振,且没有倍频,则修改4000000

2)修改configTOTAL_HEAP_SIZE,原始demo文件中是1024,是因为PIC18F4620的RAM是4KB,而25k22只有1536Byte,因此必须裁剪到512.

3)务必注意configMINIMAL_STACK_SIZE建议不要修改了,之前就因为贪图改到50,启动任务都没法启动。

下面有些函数是需要用到的,如本移植例程中就会用到函数vTaskDelayUntil以及vTaskDelay,因此需要把这一位置1,其他的看情节,需要的置1,

3.4.3main函数的配置位修改

原来的Demo采用4620芯片,而25k22芯片的配置位设置有些偏差,具体如下

编译完以后查看一下使用量,RAM的容量比较吃紧,建议至少使用PIC18F46K22,这个芯片提供4KB的RAM,会比较好一些。

但个人整体感觉PIC18F系列的这个单片机RAM容量偏小,用过的飞思卡尔MC9S12XD系列RAM最多有20K,比较充足。

4运行FreeRTOS

4.1硬件对应说明

采用了LIXUE开发板上两组LED灯,引脚分别对应RA4和RA5。

输出1则亮灯。

RS232串口采用了USART模块,RC7为RXD,RC6为TXD。

芯片外界4M晶振,不倍频

4.2任务创建

4.2.1main函数

创建了两个任务,主要包括task0和task1,

4.2.2task0说明

创建task0时需要注意,4为优先级,开辟的内存空间其宏定义在3.4.2中说明,大小为105,但是笔者之前曾经因为无知,将该值修改为50,导致任务不能正常运行。

其中,task0的功能为每2秒闪烁一下RA5对应的LED灯,同时由串口输出一个字符串:

"thisistask0"

4.2.3task1说明

其中,task1的功能为每2秒闪烁一下RA4对应的LED灯,同时由串口输出一个字符串:

"thisistask1"

4.3特别说明

一定要注意任务创建时留有足够的内存

5感谢

感谢LIXUE同学3年来对我单片机学习的支持,虽然未曾谋面,但是他提供的工程资料完备,demo代码简明清晰,非常具有入门指导意义。

感谢Microchip公司提供的demo代码,大大降低了我一直的难度。

感谢Zjut的Dr.Bill提供了一个非常好的学习环境。

特别感谢Dearfyy女士,一直支持我的工作,在我学习遇到困难时,给予最大的鼓励和支持

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1