Cstyle的札记,Freertos内核详解,第4.1篇

    因为手上有现成的板子,准备先移植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....... 
 下面我们来一步一步完成。

图片

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值