CC2530的flash的地址是怎样分配的?我想把参数保存到NV区以外的地方可以吗?
CC2530的flash的地址是怎样分配的?我想把参数保存到NV区以外的地方可以吗?
如果使用协议栈,只要定义一个NV条目,用OSAL层的函数就可以读写了,如果不使用协议栈,可以参考底层的hal_flash.c里面的读写函数来进行操作。
我猜LZ不是想知道怎么调用函数。而是想知道参数可以放在哪些地址空间而不会影响协议栈和程序的运行。。
我现在也碰到同样的疑惑。不知道从IAR里如何看到片上的flash哪些被使用,哪些空闲。。同时也没看懂具体的flash空间分配的定义。
CC2530的空间分配中
0x0000-0x0089 存放中断向量ISR
0x0090-0x3F7FFF是Application Code
其中0x3C800-0x3F7FFF是NV空间
0x3F800-3FFFF是Lock page
如果自己想数据保存在除NV以外的flash空间,就放在NV区上面,当时不要和代码重叠。
讲生成的Hex文件打开,看下代码在哪个位置结束,之后的空间就可以用了。
0x0090-0x3F7FFF是Application Code 是否应该是0x0090-0x3F7FF,多了一个‘F'?
谢谢,指正。
您好,现在正在解决这方面的问题。
1、我想把很多温度数据存到flash中没被占用的空间里(flash的NV区上面应该是0x0090-0x3F7FF),如果目前我的hex文件存储器占用的地址是0x0000-0xAE90,这是主存占用的空间,那么我要如何知道对应的flash哪些地方可以写呢?用这种方法写:void HalFlashWrite(uint16 addr, uint8 *buf, uint16 cnt)。
2、把一个32位的温度数据写到flash里去,下面这样写可以吗?
{
char TempValue[32]; //一共32bit, 4个byte
HalFlashErase(0x40); //擦除flash中第64个page
while( FCTL & 0x80 ); // 等待擦除完成
HalFlashWrite(0x8000, TempValue, 1); //(0x40 * 0x0800) / 4 = 0x8000,每个page 2KB大小,0x8000是第64个page的起始地址
HalFlashRead(0x40, 0x0000, TempValue, 4); //把写进去的读出来
}
Dear VV,
以下是我iar编译后生成的map文件信息,其中有一段关于Bank 4空间分配的如下:
<BANKED_CODE> 4 CODE 00028000 - 00028D52 D53 rel 0
如果按照上面的空间分配方式,我是否可以使用00028D52 -- 0003C800这段空间来存储我自己的数据?
谢谢!
****************************************
* *
* SEGMENTS IN ADDRESS ORDER *
* *
***************************************
SEGMENT SPACE START ADDRESS END ADDRESS SIZE TYPE ALIGN
======= ===== ============= =========== ==== ==== =====
<BANKED_CODE> 1 CODE 00010000 - 00017FFB 7FFC rel 0
<BANKED_CODE> 2 CODE 00018000 - 0001FFFD 7FFE rel 0
<BANKED_CODE> 3 CODE 00020000 - 00027FFF 8000 rel 0
<BANKED_CODE> 4 CODE 00028000 - 00028D52 D53 rel 0
ZIGNV_ADDRESS_SPACE
CODE 0003C800 - 0003F7FF 3000 rel 0
RESERVED_ADDRESS_SPACE
CODE 0003F800 - 0003FF8B 78C rel 0
IEEE_ADDRESS_SPACE CODE 0003FFE8 - 0003FFEF 8 rel 0
LOCK_BITS_ADDRESS_SPACE
CODE 0003FFF0 - 0003FFFF 10 rel 0
NV是在121-126 pages上,你可以把你的数据放在120 page上面。