硬件平台:CC2530-F256

开发环境:IAR 8051(版本号 8.10)

參考:

1、《CC2530 User's Guide.pdf》(swru191c)

2、《IAR C/C++ Compiler Reference Guide.pdf》

3、《IAR Linker and Library Tools.pdf》

一、CC2530代码空间介绍

CC2530-F256有着256K的Flash,其代码存储空间如图2-2(来自CC2530User‘s
Guide)所看到的,可是51单片机仅仅支持64K的訪问空间。

于是CC2530便採用Bank映射的方式,地址空间0x0000-0x7FFF,作为ROOT,用于存放启动代码等,地址空间0x8000-0xFFFF用于映射不同的Bank(0~7),如图4(来自IARC/C++
Compiler Reference Guide)所看到的,须要訪问某个Bank的数据或代码时,将该Bank映射到地址空间0x8000-0xFFFF。

映射不同Bank时,需使用FMAP寄存器。

注:

CC2530 ROM的不同地址:

物理地址:0x00000~0x3FFFF

Bank地址:

Bank0:0x00000~0x07FFF

Bank1:0x18000~0x1FFFF

Bank2:0x28000~0x2FFFF

Bank3:0x38000~0x3FFFF

Bank4:0x48000~0x4FFFF

Bank5:0x58000~0x5FFFF

Bank6:0x68000~0x6FFFF

Bank7:0x78000~0x7FFFF

二、CC2530存储空间使用

IAR中CC2530的有两种代码模式,Near和Banked。当中Banked模式是ZStack使用的模式,ZStack的ROM使用大约在100多KB。当中Near是普通的51单片机模式,仅仅支持64KB的訪问范围。

在文件夹8051\src\lib中有一个iar_banked_code_support.s51文件用于程序执行时自己主动切换Bank。

測试代码例如以下:

__code const char code0_buf[10000]@0x48000 = {0, 1};

#pragma location="BANK4"
void demo1_code()
{
TRACE("FMAP: %02x\r\n", FMAP);
TRACE("%02x %02x\r\n", code0_buf[0], code0_buf[1]);
} __code const char code1_buf[10000]@0x58000 = {2, 3}; #pragma location="BANK5"
void demo2_code()
{
TRACE("FMAP: %02x\r\n", FMAP);
TRACE("%02x %02x\r\n", code1_buf[0], code1_buf[1]);
}

当中BANK5,BANK4是连接配置文件”lnk51ew_CC2530F256_banked.xcl“定义的segment。执行结果例如以下:

串口打印的调试信息例如以下:

CC2530存储空间——Code的更多相关文章

  1. CC2530之Flash映射

    标准51系列内核的逻辑空间为哈佛结构,也就是说,程序空间和地址空间是分开的.具体分为: CODE区:存放程序代码和一些常量信息,有16根地址总线,寻址范围为0x0000~0xFFFF,共计64K DA ...

  2. CC2530的Flash

    CC2530F256内部集成一个增强型8051单片机,拥有8 KB SRAM和256 KB内部Flash存储器.内部Flash主要用来保存程序代码和常量数据.由于传统8051代码存储空间寻址范围只有6 ...

  3. CC2530使用串口下载(SBL)

    工作环境: WIN7 64位 IAR 版本: 8.10.3 (8.10.3.10338) ZStack-CC2530-2.3.1-1.4.0协议栈,下载地址:http://download.csdn. ...

  4. AppBox升级进行时 - 拥抱Entity Framework的Code First开发模式

    AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. 从Subsonic到Entity Framework Subsonic最早发布 ...

  5. 转载扩展Windows Mobile模拟器存储空间的方法

    扩展Windows Mobile模拟器存储空间的方法 在Windows Mobile应用程序开发的初期,可以使用SDK自带的模拟器来进行调试,这给我们开发人员提供了一种方便的途径.一般的应用程序,占用 ...

  6. Entity Framework Code First 映射继承关系

    转载 http://www.th7.cn/Program/net/201301/122153.shtml Code First如何处理类之间的继承关系.Entity Framework Code Fi ...

  7. C语言编译数组中有的加code有的不加,有什么区别

    像uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};和uchar ds1302[]={0xfe,0xfd,0xfb,0xf7,0 ...

  8. CC2530 Debug ---CC2530 无启动之32K晶振

    今天焊接CC2530,其中有个模块下载程序(协议栈程序),无法创建也无法加入网络. 第一步先检查32MH 晶振是否启动,用basice 程序看uart,发现可以正常打印log. 第二步,在线调试,看看 ...

  9. Keil中 Program Size: Code RO-data RW-data ZI-data

    一般 MCU 包含的存储空间有:片内 Flash 与片内 RAM,RAM 相当于内存,Flash 相当于硬盘. 现在我们就一个STM32的工程为例子 linking... Program Size: ...

随机推荐

  1. dedecms 文章列表和频道列表同时调用

    演示效果:http://www.mypf110.com/qcd/ <div class="changshi_wrap"> {dede:channelartlist ro ...

  2. POJ1182 食物链 【并查集变种】

    挺简单的 N个元素扩展为 3*N个 i-A i-B i-C A吃B吃C吃A 挑战程序设计的89面 #include <cstdio> #include <cstdlib> #i ...

  3. Little Sympathy for Bear Stearns : NPR

    Little Sympathy for Bear Stearns : NPR Little Sympathy for Bear Stearns

  4. 2014年辛星解读Javascript之用DOM动态操纵HTML元�

    关于DOM,我们了解了能够用DOM操纵HTML的一些属性和样式,还能够为HTML元素绑定事件等等,那么接下来,我们将涉及到用DOM来动态的创建.删除HTML等一些操作,我的核心思路还是重实战,因此,代 ...

  5. poj3237(树链剖分)

    题目链接:http://poj.org/problem?id=3237 题目大意:指定一颗树上有3个操作: 1)询问操作,询问a点和b点之间的路径上最长的那条边的长度(即最大值): 2)取反操作,将a ...

  6. Redis的字典(dict)rehash过程源代码解析

    Redis的内存存储结构是个大的字典存储,也就是我们通常说的哈希表.Redis小到能够存储几万记录的CACHE,大到能够存储几千万甚至上亿的记录(看内存而定),这充分说明Redis作为缓冲的强大.Re ...

  7. Codeforces 4A-Watermelon(意甲冠军)

    A. Watermelon time limit per test 1 second memory limit per test 64 megabytes input standard input o ...

  8. sha1加密java代码

    sha1 加密 java代码 public static String getSha1(String str){ if(str==null||str.length()==0){ return null ...

  9. Linux下将UTF8编码批量转换成GB2312编码的方法

    Linux下将UTF8编码批量转换成GB2312编码的方法 在sqlplus中导入UTF8编码的sql脚本就会出现乱码错误,这时就需要将UTF8编码转换成GB2312编码,下面为大家介绍下在Linux ...

  10. 日版 Galaxy Note sc05d 涮机

    问题描写叙述:手机已坏.进不了系统 以下提供线涮刷机教程: 1.首先拔掉你的sd卡和sim卡.双清你的手机.可能有些版本号的机油没有双清模式,那就进到设置里边恢复出厂设置,然后关掉你的手机再开机.等到 ...