FreeRTOS移植PIC18F25K22全过程.docx
- 文档编号:8330754
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:13
- 大小:481.05KB
FreeRTOS移植PIC18F25K22全过程.docx
《FreeRTOS移植PIC18F25K22全过程.docx》由会员分享,可在线阅读,更多相关《FreeRTOS移植PIC18F25K22全过程.docx(13页珍藏版)》请在冰豆网上搜索。
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女士,一直支持我的工作,在我学习遇到困难时,给予最大的鼓励和支持
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FreeRTOS 移植 PIC18F25K22 全过程