Mbed 导出 Keil MDK5 L6218E: Undefined symbol Image^$^$RW_IRAM1$$ZI^$^$Limit 错误解决

我用的是Nucleo F401RE开发板,在Mbed的线上IDE里选了一个示例程序blink_led,打算导出到Keil里看看效果。

Mbed 导出 Keil MDK5 L6218E: Undefined symbol Image^$^$RW_IRAM1$$ZI^$^$Limit 错误解决_第1张图片

效果是这样的:
Mbed 导出 Keil MDK5 L6218E: Undefined symbol Image^$^$RW_IRAM1$$ZI^$^$Limit 错误解决_第2张图片

但是报了些错:

.\BUILD\Nucleo_blink_color_led.axf: error: L6031U: Could not open scatter description file /filer/web_data/repo_builds/4/335/TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f401xe.sct: No such file or directory
Not enough information to list image symbols.
Not enough information to list load addresses in the image map.

这个错误和我标题写的不一样对吧,别急。

这个错误和Keil工程里配置中Linker->scatter file里的文件有关:
Mbed 导出 Keil MDK5 L6218E: Undefined symbol Image^$^$RW_IRAM1$$ZI^$^$Limit 错误解决_第3张图片

报错是因为找不到这个scatter file,这时候我去查找了报错的解决方法,看到一条:

把Scatter File里的删了就好.

我就照做了,然后就编译,就报出了标题提到的error:

.\BUILD\Nucleo_blink_color_led.axf: Error: L6218E: Undefined symbol Image$$RW_IRAM1$$ZI$$Limit (referred from mbed/TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/mbed_retarget.o).
Not enough information to list load addresses in the image map.

找了半天也没找到这个错误的解决方法,还找到了(不是挂人,代为征友):
https://blog.csdn.net/thinszx/article/details/83377096
Mbed 导出 Keil MDK5 L6218E: Undefined symbol Image^$^$RW_IRAM1$$ZI^$^$Limit 错误解决_第4张图片

想了一圈,想到这个错误是在我删掉Scatter File后才出现的,会不会和我删掉Scatter File有关呢?
于是我删除了这个工程,把下载的工程压缩包再解压一次,跑回去查看原工程里的Scatter File:

/filer/web_data/repo_builds/4/335/TARGET_NUCLEO_F401RE/TOOLCHAIN_ARM_STD/stm32f401xe.sct

我们看工程文件夹里的结构:

Mbed 导出 Keil MDK5 L6218E: Undefined symbol Image^$^$RW_IRAM1$$ZI^$^$Limit 错误解决_第5张图片

很明显,是没有filer、web_data、repo_builds这样的文件夹的,我怀疑是网页IDE自己的文件夹直接搬到了Keil工程里。

我们去找stm32f401xe.sct这个文件:
Mbed 导出 Keil MDK5 L6218E: Undefined symbol Image^$^$RW_IRAM1$$ZI^$^$Limit 错误解决_第6张图片

在工程里,改成这个路径:
Mbed 导出 Keil MDK5 L6218E: Undefined symbol Image^$^$RW_IRAM1$$ZI^$^$Limit 错误解决_第7张图片

之后再编译就成功啦!

你可能感兴趣的:(教程)