Chinaunix首页 | 论坛 | 博客
  • 博客访问: 699759
  • 博文数量: 255
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 2811
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-09 13:29
个人简介

IT业行者,行者无疆

文章分类

全部博文(255)

文章存档

2011年(121)

2010年(134)

我的朋友

分类: 嵌入式

2010-09-27 09:23:15

ARM在UC/OS II的移植日记(连载4)

from: http://fangheng1005.blog.163.com/blog/static/3291297200852493353569/


欧洲杯真是好看,我在想为什么奇迹总是人家的呢?你看人家土耳其,连干那么多的强队,进入四强,你说人家是运气,我看不是,运气是眷顾有实力的人的,你再看我们家的男足,那是没得说,你看准吐血,所以我相信实力是决定你未来的重要因素,运气只是另一部分,好好增强自己的实力吧,朋友,相信奇迹会是属于你的,或许当你有了实力之后,奇迹就变成一种必然了。

今天我们来看zlg移植过程中的其他文件吧,每个移植都有针对的移植结构,要会使用zlg的移植代码并可靠的运行,这部分代码是你必须理解的。

mem_c.scf文件

ROM_LOAD 0x0

内部ROM的起始地址,因为LPC系列的ROM地址是从0x000000开始的
{
ROM_EXEC 0x00000000

可执行代码存放的起始地址,即你所写的代码编译成二进制之后往ROM存放的起始代码
{
Startup.o (vectors, +First)

文件Startup存放在ROM的第一个块,即Startup文件存放在低地址单元,这是你启动代码的存放位置
      * (+RO)
}

    IRAM 0x40000000

RAM的起始地址是0x40000000,这是针对LPC系列来说的,如果其他芯片不是这样请修改
{
Startup.o (MyStacks)
* (+RW,+ZI)
}

    HEAP +0 UNINIT
{
Startup.o (Heap)
}

    STACKS 0x40002000 UNINIT

这是RAM的最高地址,LPC2131有8K的空间,所以为0x40002000,也要根据实际情况进行修改
{
Startup.o (Stacks)

Stacks区域的数据存放在最高地址单元中,这是用户堆栈
   }
}

如果你的程序是在内部ROM进行调试的话你可能要更改的数据为0x40002000与0x40000000,根据你芯片的RAM大小进行修改,其他的就不要修改了,默认就行。

 

CONFIG.H文件

typedef unsigned char  uint8;                  
typedef signed   char  int8;                   
typedef unsigned short uint16;                 
typedef signed   short int16;                  
typedef unsigned int   uint32;                 
typedef signed   int   int32;                  
typedef float          fp32;                   
typedef double         fp64;                   

以上定义的数据类型就是zlg自己习惯用的数据类型,嘿嘿,好像是陈明计先生在自己写的Small RTOS for 51的操作系统中也是定义这种数据类型,但是个人还是感觉UC/OS II定义的数据类型比较爽!呵呵!

 

#define Fosc            11059200                    //Crystal frequence,10MHz~25MHz,should be the same as actual status.
//应当与实际一至晶振频率,10MHz~25MHz,应当与实际一至
#define Fcclk           (Fosc * 4)                  //System frequence,should be (1~32)multiples of Fosc,and should be equal or less  than 60MHz.
//系统频率,必须为Fosc的整数倍(1~32),且<=60MHZ
#define Fcco            (Fcclk * 4)                 //CCO frequence,should be 2、4、8、16 multiples of Fcclk, ranged from 156MHz to 320MHz.
//CCO频率,必须为Fcclk的2、4、8、16倍,范围为156MHz~320MHz
#define Fpclk           (Fcclk / 4) * 1             //VPB clock frequence , must be 1、2、4 multiples of (Fcclk / 4).
          //VPB时钟频率,只能为(Fcclk / 4)的1、2、4倍

Fosc 所定义的频率就是你外部晶振的频率啦,其实频率不一定是在10MHz~25MHz的范围,因为这个代码移植使用了PLL模块,故必须在这个范围,具体的规定请看LPC系列芯片的介绍,其他的你默认就可以啦。但是你要清楚你的VPB时钟是多大,因为后面的程序中外设的时钟就是这个时钟。

 

(待续连载5)

阅读(562) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~