关于cc2540的FLASH使用

2019-07-25 14:30发布

本帖最后由 e08610318 于 2014-3-26 14:54 编辑

我想使用CC2540做蓝牙开发的朋友,不少会接触到大数据量的存储。
那么cc2540F256所包含的128page,每个page有2k的空间的确使人有较充实的满足感。
使用Hal层的FLASH操作函数有些不便之处,因此看到了OSAL的SNV,眼睛一亮。但是后来发现,snv满足不了我的需求,在TI官网苦苦寻找,才发现默认情况下,SNV只使用2个page,区区两个page,才4k,而且BLE还占用其中,更有网友表示我只存了524个字节就存不了。对于我希望存储十几K甚至几十K的来说,更别提了。我尝试过修改SNV占用的Page数量,发现放不下,查了下编译提示:

the moment of placement the available memory ranges were "CODE:7e800-7f7ff"
   Reserved ranges relevant to this placement:
   CODE:7e800-7f7ff     BLENV_ADDRESS_SPACE
   BIT:0-7              BREG
   BIT:80-97            SFR_AN
   BIT:a0-af            SFR_AN
   BIT:b8-c7            SFR_AN
   BIT:e8-ef            SFR_AN
Error while running Linker

然后:

#pragma location="BLENV_ADDRESS_SPACE"
__no_init uint8 _nvBuf[OSAL_NV_PAGES_USED * OSAL_NV_PAGE_SIZE];
#pragma required=_nvBuf
#endif // OAD_KEEP_NV_PAGES

似乎NV都是在指定的某个区域去定义一个数组的:'(。,但是,SNV起始页和结束页是125和126,那么指定的这个区域是否与之对应呢?从这里来看:CODE:7e800-7f7ff,  BLENV_ADDRESS_SPACE 是4K,刚好2page,应该表示实际的物理地址,而且和125、126应该是对应的,但是7e800关看这个数就很大,一般都是4位的,怎么理解?BLENV_ADDRESS_SPACE 怎么改?现在snv只能用来存储少量数据。

查过下资料,默认程序代码存在BANK0(可以设置),那就是page0~15。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
e08610318
2019-07-25 19:35
看了下snv的代码后,发现snv实际最多只能存2K!而不是4K,而且不能通过修改宏定义实现snv的flash容量扩充,因为2个page中,1个page用来实际存储数据,另外一个page相当于用来做镜像的,要想扩容,可能只能自己操作底层函数了,而且要自己设计一些算法实现FLASH数据的组织。

一周热门 更多>