本帖最后由 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。
|