因为手上有现成的板子,准备先移植Freertos到S3C2440上练一下手,搜索了一下好像目前网络上和官方都没有支持这款soc,官方对三星的cpu好像一款支持的也没有,不知道为什么三星这么个大的半导体公司居然没有人帮忙移植。
准备工作如下:
1.从keil官网下载最新的MDK,并使用网上的注册机注册破解。
2.从Freertos官网下载最新的源代码
3.从Jlink官网下载最新的Jlink软件实现对flash的烧写及与MDK配合仿真。
4.安装好SI,BC,Notepad++等工具。
任何的有关处理器的编程,我们最新需要确认的是几个东西:
1.CPU工作状态和工作模式,我们这里是ARM920T的CPU,支持ARM状态(32bit),和THUMB状态(16bit);同时支持大端模式,小端模式;usr,irq,fiq,svc,abt,sys,und等各种模式。
2.内存的大小,类型,MMU状态,启动模式等。
3.选择不同的开发工具平台,如:MDK,gcc,iar等
我们的选择是先简单处理,选择ARM状态,svc模式,MMU关闭,NORflash启动(2MByte,
16bit位宽,0x00000000~0x200000),外部SDRAM(64MByte,32bit位宽,0x30000000~0x33ffffff),内部SRAM(4KByte,32bit,0x40000000~0x40001000),MDK。
移植步骤:
1.创建MDK工程,选择器件类型为s3c2440.
2.在Freertos源码的根目录下创建目录和文件,这里参考两个demo,一个是基于MDK的ARM7_LPC21xx主要参考其中对mdk的一些扩展语法,一个是ARM9_AT91SAM9XE_IAR参考其中的对arm9的相关体系结构
方面的移植,所以下面的几个文件基本是直接拷贝ARM7_LPC21xx的文件。
\ Source\portable\RVDS\ARM9_S3C2440
-port.c
-portasm.s
-portmacro.h
-portmarcro.inc
\Demo\ARM9_S3C2440_Keil
-ParTest
--partest.c
-serial
--serial.c
--serialISR.s
3.在project目录下创建项目子文件夹,添加进去Freertos的核心的与平台无关的几个源代码文件,list.c,croutine.c,event_groups.c,queue.c,task.c,timer.c,heap_2.c,以及port.c。也可以选择性的加入Demo\Common目录下的一些系统当中提供默认API的测试程序,根据硬件资源内存的大小选择full或者是minimal,在main方法当中可以调用这些预定义的测试方法来测试系统性能,当然最终的产品一般是不需要这些的。
4.在MKD当中设置好cc和link的路径,一般需要包含如下四个路径就可以了。
.
..\..\Source\include
..\Common\include
..\..\Source\portable\RVDS\ARM9_S3C2440
5.设置内存sct文件,这里直接用向导方式,按照上面的方式如下:
LR_IROM1 0x00000000 0x00200000 { ; load region size_region
ER_IROM1 0x00000000 0x00200000 { ; load address = execution address //2MByte NOR flash
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_RAM3 0x30000000 0x04000000 { ; RW data //64MByte SDRAM
.ANY (+RW +ZI)
}
RW_IRAM1 0x40000000 0x00001000 { //4KByte SRAM
.ANY (+RW +ZI)
}
}
6.完成了上面的步骤,一般来说就能编译过了,并且能够生成hex文件,如果发现有一些在main里面调用的函数api不能被调用到或者是找不到定义,可以先注释掉,因为这些不影响我们的移植。
7.现在我们来确定一些我们移植的目标:
a.LED flash,想办法在main里面在所有任务开始之前能够让咱们的程序跑起来,包括编译通过,hex生成,jtag烧录等,让板子上的LED能够闪烁,这一步成功的话表示我们的硬件没有问题,代码跑起来了。
b.修改port.c相关的文件,保证系统能够进行任务的切换,这个时候我们会创建几个任务,每个任务驱动LED用不同的频率闪烁,这一步如果成功基本上表示移植成功。
c.熟悉api及os的提供的其他服务。
d.发掘硬件的其他潜能,比如MMU等。
e.......
下面我们来一步一步完成。