STM32 链接文件使用

本文详细介绍了如何在STM32的链接文件中创建输入段,并将其映射到特定内存区域。通过示例代码展示了如何使用__attribute__指定变量存储位置,并在编译后的map文件中验证了内存分配的正确性。内容涵盖了链接脚本的MEMORY和SECTIONS定义,以及C代码中的内存段管理技巧。
摘要由CSDN通过智能技术生成

在STM32链接文件内创建

/* FLASH.ld */
/* Memories definition */
MEMORY
{
  RAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 64K
  FLASH    (rx)    : ORIGIN = 0x8000000,   LENGTH = 448K
  MEM_TEST (rx)    : ORIGIN = 0x8007000,   LENGTH = 64K
}

/* Sections */
SECTIONS
{
  .section_test :
  {
      mem_test_start = . ;
      * (.section_test1);
      mem_test_end = . ;
  } > MEM_TEST
...
}

// main.c
#define ARM_SECTION(SECTION)  __attribute__((section(#SECTION)))

ARM_SECTION(.section_test) static int volatile test_var[2] = {1};
ARM_SECTION(.section_test1) static int volatile test_var1[3] = {1};
void main(void)
{
  test_var1[0] = test_var1[1];
  test_var1[1] = test_var1[2];
  test_var1[2] = test_var1[0];

  test_var[1] = test_var[0];
  test_var[0] = test_var[1];
  while (1);
}

// main.map
.section_test   0x0000000008007000       0x14
                0x0000000008007000                mem_test_start = .
 *(.section_test1)
 .section_test1
                0x0000000008007000        0xc ./Core/Src/main.o
                0x000000000800700c                mem_test_end = .
 .section_test  0x000000000800700c        0x8 ./Core/Src/main.o


在链接文件内创建一个sectoin_test1的输入段,并将该输入段指向section_test的输出段上,并且所有输出的数据指向MEM_TEST内存中。
进行编译之后,可以在map文件内看到在 .section_test1 中有12B大小的数据,在其他 .sectoin_test 中还有8B大小的数据,最后对应的是 test_vartest_var1 变量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值