stm32 keil 中 irom1 irom2 怎么设置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32 keil 中 irom1 irom2 怎么设置相关的知识,希望对你有一定的参考价值。

参考技术A 那款芯片?一般stm32数据手册中有对应的RAM和ROM地址按那个设置就好了!

我可以使用 Keil/armclang/armlink 在内存区域中放置一个变量吗?

【中文标题】我可以使用 Keil/armclang/armlink 在内存区域中放置一个变量吗?【英文标题】:Can I place a variable inside a memory region using Keil/armclang/armlink? 【发布时间】:2021-11-19 20:44:16 【问题描述】:

我有一个由 Keil 生成的链接器分散文件,看起来像这样:

LR_IROM1 0x08020000 0x001E0000  
  ER_IROM1 0x08020000 0x001E0000  
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
   .ANY (+XO)
  
  RW_IRAM1 0x20020000 0x00060000  
   .ANY (+RW +ZI)
  
  RW_IRAM2 0x20000000 0x00020000  
   .ANY (+RW +ZI)
  

理想情况下,出于各种原因,我想继续使用 IDE 配置的分散文件。但是,我看不出有任何方法可以让 Keil 添加额外的链接器部分。

天真地,我以为我可以使用类似的方式在 RW_IRAM2 区域中放置一个变量:

uint32_t in_ram2 __attribute__((section("RW_IRAM2")));

我也尝试过诸如“.RW_IRAM2”和“.RW_IRAM2.bss”之类的东西,但是变量总是在 IRAM1 区域中结束。查看文档后,我看不到任何不放弃的方法Keil 配置/创建的分散文件。我在这里遗漏了什么吗?

【问题讨论】:

【参考方案1】:

你可以像这样把它放在显式地址:

uint32_t in_ram2 __attribute__((section(".ARM.__at_0x20000000")));

【讨论】:

谢谢,但我已经意识到这一点。不幸的是,使用它有一些影响。如果链接器试图将其他变量放在同一位置(不幸的是,它目前还不够聪明,不这样做),它将给出错误,因此最好将其放置在配置区域之外。此外,如果您想放置多个变量,则需要小心选择地址以避免冲突 - 通常最好留给链接器。

以上是关于stm32 keil 中 irom1 irom2 怎么设置的主要内容,如果未能解决你的问题,请参考以下文章

如何查看keil能否支持stm32m0内核

如何用keil5创建stm32的工程

stm32怎么添加芯片包无响应

keil5怎么配置stm32的的管脚功能

keil怎么把程序烧录进stm32

STM32F10xxx_Keil中添加的预定义宏