AT32F403a(2) RAM 96K OR 224K配置

参阅官方文档得知。

AT32F403A关于ZW-NZW-SRAM的大小选择配置有两种

1 ZW:256KB,NZW 768KB,SRAM:96KB (默认配置)

2 ZW:128KB,NZW 896KB,SRAM:224KB

究其原理是MCU的flash运行速度相对较慢,芯片有机制把flash的代码在上电后自动加载到内存来运行

(相当于内存被划分为两部分,1是运行代码-ZW,2是存储数据-SRAM)

由此可以理解和解释上述两种配置方案。

配置1:总内存是352KB,运行代码为256KB,存储数据为96KB

配置2:总内存是352KB,运行代码为128KB,存储数据为224KB

非零等待(NZW)的执行速率是零等待(ZW)的 0.4 倍,实测更低,针对这个情况,需要我们把实时性要求高的函数-功能组件调到ZW区域为宜,以免出现不可意料的问题。
关于把优先级高的函数编译到ZW区域的icf配置,可参阅 这篇文章https://blog.csdn.net/hiqaxe/article/details/115842317

查找关于这方面的资料 梳理如下:

 FMC 选择字节说明,通过配置 EOPB0 选择,地址是: 0x1FFF_F810,EOPB0=0xFF 表示片上 SRAM 为 96KB, EOPB0=0xFE 表示片上 SRAM 为 224KB。 使能 EOPB0 有效必须
要掉电或 RESET 一次。(特别的是,这个是选项字节的设置,断电后保存,重新上电会生效)

① 使用 ICP

② ISP

 

③在boot启动时调用如下的函数来修改

void Extend_SRAM(void)
{
// check if RAM has been set to 224K, if not, change EOPB0
if(((UOPTB->EOPB0) & 0xFF) != 0xFE)
{
/* Unlock Option Bytes Program Erase controller */
FLASH_Unlock();
/* Erase Option Bytes */
FLASH_EraseUserOptionBytes();
/* Change SRAM size to 224KB */
FLASH_ProgramUserOptionByteData((uint32_t)&UOPTB->EOPB0,0xFE);
NVIC_SystemReset();
}
}

④ 启动文件启动时调用上述的修改函数来修改。

; Default interrupt handlers.
THUMB
PUBWEAK Reset_Handler
SECTION .text:CODE:REORDER:NOROOT(2)
EXTERN Extend_SRAM
Reset_Handler
MOV32 R0,#0x20001000
MOV SP,R0
LDR R0,=Extend_SRAM
BLX R0
MOV32 R0,#0x08000000
LDR SP,[R0]
LDR R0, =SystemInit
BLX R0
LDR R0, =__iar_program_start
BX R0

 

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值