硬汉嵌入式论坛

 找回密码
 立即注册
查看: 835|回复: 3
收起左侧

[STM32CubeIDE] 怎么在STM32CubeIDE上设置代码运行在外部flash里面

[复制链接]

1

主题

5

回帖

8

积分

新手上路

积分
8
发表于 2025-2-7 17:32:50 | 显示全部楼层 |阅读模式
最近有一个项目,代码量比较大,使用了STM32H7B0,想将部分代码放在外部flash里面运行。我看了硬汉哥前几年写的一个帖子,是基于MDK得,但是基于STM32CubeIDE得还没有例子。想知道怎么改得。



我自己做了修改,但是会报错:
/* Specify the memory areas */
MEMORY {
  ITCMRAM (xrw)  : ORIGIN = 0x00000000, LENGTH = 64K
  FLASH (rx)     : ORIGIN = 0x08000000, LENGTH = 128K
  DTCMRAM1 (xrw) : ORIGIN = 0x20000000, LENGTH = 64K
  DTCMRAM2 (xrw) : ORIGIN = 0x20010000, LENGTH = 64K
  RAM (xrw)      : ORIGIN = 0x24000000, LENGTH = 1024K
  RAM_CD (xrw)   : ORIGIN = 0x30000000, LENGTH = 128K
  RAM_SRD (xrw)  : ORIGIN = 0x38000000, LENGTH = 32K
  SPI_FLASH (rx) : ORIGIN = 0x90000000, LENGTH = 8192K
}
SECTIONS {
...

  /* New section for usart.o in SPI_FLASH */
    .usart_in_spi_flash :
  {
    . = ALIGN(4);
    BSP/led/led.o(.text*)      /* Place .text section of usart.o into SPI_FLASH */
    . = ALIGN(4);
  } >SPI_FLASH
...
}

会报一个:
../BSP/led/led.c:11: multiple definition of `led_open';
../BSP/led/led.c:9: multiple definition of `ledCnt';
这只是一个测试程序,led.c里面就只有一个ledCnt得全局变量和一个led_open得函数。





回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2025-2-7 17:33:59 | 显示全部楼层
我查看了map文件,发现led.p并没有正确得定义到SPI_FLASH区域里面去
*(.text*)
.text.led_open
                0x080005dc       0x20 ./BSP/led/led.o
                0x080005dc                led_open
.text.MX_GPIO_Init
                0x080005fc       0xac ./Core/Src/gpio.o
                0x080005fc                MX_GPIO_Init
.text.main     0x080006a8       0x20 ./Core/Src/main.o
                0x080006a8                main
.text.SystemClock_Config
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2025-2-8 05:38:02 | 显示全部楼层
STM32CubeH7软件包里面有CubeIDE的外置Flash例子,可以参考。
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2025-2-13 11:26:59 | 显示全部楼层
更改为:
        .externFlash :
        {
            . = ALIGN(4);
            *led.o(.text .text*)
                   . = ALIGN(4);
            _eQSPI = .;
        } >SPI_FLASH
就可以了。

感觉在这个功能上,没有MDK方便。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 00:38 , Processed in 0.038758 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表