在Keil中要将数组加载到指定的内存中

在进行屏幕驱动移植时,源码中有一段这样的代码

uint16_t ltdc_lcd_framebuf[800][480] __attribute__((at(LCD_FRAME_BUF_ADDR)));

在该工程下编译非常顺利,也不会提示有错误,但是在我自己新建的工程中使用就会出现错误提示,编译也不通过,提示.\Objects\GD32F470.axf: Error: L6406E: No space in execution regions with .ANY selector matching lcd.o(.bss.ltdc_lcd_framebuf0).
刚看到这个网上搜索出来的结果全是说内存不足,但是我尝试增大启动文件中的堆栈空间但是依然没有解决,同时我也比对了Keil中的对烧录的内存空间的地址配置啥的,但是都一样。
这两个工程唯一不同就是编译器的版本不一样了,于是搜索AC5和AC6在将数组初始化到指定内存地址的差异时,发现果然不一样。

在此感谢这篇博客:AC6使用 attribute((at(x)))需要改用...
按照这位老哥的博客进行了修改就解决了这个问题。

posted @ 2024-02-29 16:41  三眠  阅读(259)  评论(0)    收藏  举报