CC2530存储空间——Code

硬件平台: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

时间: 2024-10-21 19:02:24

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

CC2530之Flash映射

标准51系列内核的逻辑空间为哈佛结构,也就是说,程序空间和地址空间是分开的.具体分为: CODE区:存放程序代码和一些常量信息,有16根地址总线,寻址范围为0x0000~0xFFFF,共计64K DATA区:存放运行中的数据,8根地址总线,寻址范围为0x00~0xFF,共计256个字节,其中,低128字节可直接寻址,高128字节可间接寻址. XDATA:外部数据存储器,间接寻址,16根地址总线,寻址范围为0x0000~0xFFFF.共计64K. Technorati 标签: CC2530 Fla

基于柯西矩阵的Erasure Code技术详解

一.概述 Erasure Code可以应用于分布式存储系统中,替代多份数据拷贝的数据冗余方式,从而可以提高存储空间利用率.此外,Erasure code还可以应用于传统RAID系统中,增加数据冗余度,支持多块盘同时发生故障,从而可以提高数据可靠性. 采用范德蒙矩阵可以构建Erasure code(关于范德蒙矩阵的编解码方法,可以参考文章<基于范德蒙矩阵的Erasure code技术详解>),其生成矩阵表示如下: 采用范德蒙矩阵作为编码矩阵的问题在于算法复杂度太高,其解码算法复杂度为O(n^3)

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

今天焊接CC2530,其中有个模块下载程序(协议栈程序),无法创建也无法加入网络. 第一步先检查32MH 晶振是否启动,用basice 程序看uart,发现可以正常打印log. 第二步,在线调试,看看程序跑到那里了. MAC_RADIO_TIMER_WAKE_UP(); 在看里面果然有while 循环 #define MAC_RADIO_TIMER_WAKE_UP() st( HAL_CLOCK_STABLE(); \ T2CTRL |= (TIMER2_RUN | TIMER2_SYNC);

Entity Framework Code First 映射继承关系

转载 http://www.th7.cn/Program/net/201301/122153.shtml Code First如何处理类之间的继承关系.Entity Framework Code First有三种处理类之间继承关系的方法,我们将逐一介绍这三种处理方法. 1.Table Per Hierarchy(TPH): 只建立一个表,把基类和子类中的所有属性都映射为表中的列. 2.Table Per Type(TPT): 为基类和每个子类建立一个表,每个与子类对应的表中只包含子类特有的属性对

分布式系统下的纠删码技术(一) -- Erasure Code (EC)

近几个月主要参与一个分布式存储系统的纠删码部分(用于数据容错),纠删码在学术界出现比较早,现在ceph,微软的存储系统,Hadoop 3.0等都用了EC.文章会分为多篇,主要将Erasure Code,LRC,  以及相关的数学基础,作为学习总结. 一.纠删码简介 分布式系统需要在硬件失效等故障发生后仍然能继续提供服务.就数据而言,HDFS采用每份数据3副本的方式,保证某些数据损失之后仍能继续使用. 数据的容错除了副本还有另一种做法,就是把丢失的数据计算出来.这就是纠删码的思想了.(PS: Sp

基于CC2530的ZigBee转以太网网关的设计与实现

*已刊登至:<无线电>8月刊 物联网技术的实现中,无线技术是必不可少的部分. 近年无线技术的发展,将ZigBee推入人们的视线中.那么ZigBee是如何的一种技术呢?带着疑问.我查询了它的来历: ZigBee,来源于蜜蜂的八字舞,因为蜜蜂(bee)是靠飞翔和"嗡嗡"(zig)地抖动翅膀的"舞蹈"来与同伴传递花粉所在方位信息.能够想象蜜蜂依靠这种方式构成了群体中的通信网络. 是不是有点意思.那么随之 ZigBee的出现就成了一种我们熟知的无线组网通讯技术并

【Cracking the Code Interview(5th edition)】一、数组与字符串(C++)

1.1 实现一个算法,确定一个字符串的所有字符是否全都不同.不允许使用额外的数据结构. 解答:这里假定字符集为ASCII码,可以与面试官沟通确认字符串使用的字符集.由于字符集是有限的,建立一个数组模拟的Hash表记录每个字符是否出现,线性扫描一次字符串即可,复杂度O(len(s)).如果字符集较大,需要考虑空间开销,则可以用bitset来实现. 1 bool isUnique(string s) { 2 bool record[256]; 3 memset(record, 0, sizeof(r

SQL state [HY000]; error code [3]; 问题分析

工作流表单采用了freemarker技术将表单与后台数据库绑定,每次修改表单定义将会对该表单对应的数据库执行alter操作.今天测试系统在执行保存表单定义操作时,报如下错误: HTTP Status 500 - StatementCallback; uncategorized SQLException for SQL [ALTER TABLE T_DYMC_20140522141004 CHANGE f_xqdbm f_xqdbm VARCHAR(50) COMMENT '需求单编码';]; S

sas优化技巧(2),缩减数据存储空间、length、compress、reuse、data步视图

1:控制sas数据存储空间大小 1.1:缩减字符变量存储空间 sas怎么存储字符变量? 对于赋值情况的字符型变量,变量的长度依据第一个值得长度 比如name=yi(那么name的长度即为2),然后再给其赋值name=can,那么只会读入ca 对于datalines读入或从外部数据集中读入的数据,sas默认为字符变量长度为8. 用length语句改变长度,data语句中要出现在变量前才有用. 1.2:缩减数值变量存储空间 sas怎么存储数值变量 sas默认数值变量长度为8 length改变长度,以