打印
[活动专区]

【AT-START-F407测评】+ bit-band使用方法

[复制链接]
657|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 aple0807 于 2021-2-4 14:50 编辑

系统需要大量二值状态时,使用位带区可以大大节省内存空间,这两天研究了下IAR中 AT32F407位带的用法。

SRAM : 起始地址0x20000000, 位带映射起始地址0x22000000。
使用前1KB作为位带区控制,配置如下。

SRAM起始配置为  0x20000400。增加位带空间section 0x22000000-8*4KB(乘4是因为每bit在位带区占用4字节地址空间)。
位带区使用 at section的方式创建变量,并必须使用32bit变量。


IAR ICF文件修改:

原内存定义-编译器给非位带区变量分配内存使用
define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__   = 0x20017FFF;

改为
define symbol __ICFEDIT_region_RAM_start__ = 0x20000400;
define symbol __ICFEDIT_region_RAM_end__   = 0x20017FFF;



/*-新增RAM区定义-8K bits*/
define symbol __ICFEDIT_region_BITRAM_start__ = 0x22000000; /* addr start */
define symbol __ICFEDIT_region_BITRAM_end__   = 0x22007FFF; /* 1kB * 8 * 4 */
define region BitRAM_region   = mem:[from __ICFEDIT_region_BITRAM_start__   to __ICFEDIT_region_BITRAM_end__];
place in BitRAM_region   { section .bit_section };


//头文件增加定义
#define OBJ_BIT                      @ ".bit_section"

//变量定义,注意 位带区变量必须为32bit整数
__root long bitset[256] OBJ_BIT;
__root long bitset2[256] OBJ_BIT;
__root long bitset3[256] OBJ_BIT;
__root long bitset4[256] OBJ_BIT;

这样编译后,上面的变量就分配在了bitband区,如下所示。


  

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

328

帖子

2

粉丝