硬汉嵌入式论坛

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

[开发工具] 关于使用__at__定位数组位置,导致生成BIN文件过大的问题。

[复制链接]

45

主题

60

回帖

195

积分

初级会员

积分
195
发表于 2023-12-11 16:02:15 | 显示全部楼层 |阅读模式
如果,我在程序中这样写:

int16_t AdBuf[8] __attribute__((section(".ARM.__at_0x24000000")));
然后编译后执行了生成BIN文件的命令:$K\ARM\ARMCC\bin\fromelf.exe  --bincombined --output=@L.bin !L
结果会发现,只要使用类似的定位数组位置的语句,就会导致BIN文件很大。但实际又很难不这么用,比如这里的AdBuf用于DMA采样的缓冲区,放在别的位置好像有问题。
如果我写成: int16_t *AdBuf = ( int16_t *0x24000000; 这种形式,BIN文件大小会正常,但肯定不能这样用啊,系统有可能给这片区域分配新的变量。请问如何解决这个问题??如何既可以使用__at__定位,又不会导致BIN过大??

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2023-12-12 08:20:30 | 显示全部楼层
采用我这个帖子的定义方法,一般可以解决。

MDK5 AC6下载提示No Algorithm found for: 30040000H - 300400BFH解决办法
https://www.armbbs.cn/forum.php?mod=viewthread&tid=103585
回复

使用道具 举报

45

主题

60

回帖

195

积分

初级会员

积分
195
 楼主| 发表于 2023-12-12 09:45:45 | 显示全部楼层
eric2013 发表于 2023-12-12 08:20
采用我这个帖子的定义方法,一般可以解决。

MDK5 AC6下载提示No Algorithm found for: 30040000H - 3004 ...

硬汉你好,我按上面修改了,我是这样定义的:
int16_t AdBuf[8] __MEMORY_AT(0x24000000);
但编译后提示下面的错误:
.\Objects\mnt_app.axf: Error: L6971E: guiaa_char4.o(.data) type RW incompatible with var.o(.bss.ARM.__at_0x24000000) type ZI in er RW_IRAM2.

这个不知如何解决,望赐教,谢谢。
回复

使用道具 举报

45

主题

60

回帖

195

积分

初级会员

积分
195
 楼主| 发表于 2023-12-12 09:50:26 | 显示全部楼层
补充一下,这个地址范围,有如下的MPU配置,不知是否有问题:
    MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
    MPU_InitStruct.BaseAddress      = 0x24000000;
    MPU_InitStruct.Size             = MPU_REGION_SIZE_512KB;
    MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
    MPU_InitStruct.IsBufferable     = MPU_ACCESS_NOT_BUFFERABLE;
    MPU_InitStruct.IsCacheable      = MPU_ACCESS_CACHEABLE;
    MPU_InitStruct.IsShareable      = MPU_ACCESS_SHAREABLE;
    MPU_InitStruct.Number           = MPU_REGION_NUMBER0;
    MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL0;
    MPU_InitStruct.SubRegionDisable = 0x00;
    MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;

    HAL_MPU_ConfigRegion(&MPU_InitStruct);
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2023-12-13 07:49:43 | 显示全部楼层
perfect_co 发表于 2023-12-12 09:45
硬汉你好,我按上面修改了,我是这样定义的:
int16_t AdBuf[8] __MEMORY_AT(0x24000000);
但编译后提 ...

这个是提示是你MDK Option里面的RW_IRAM2也使用0x24000000地址空间了,不要把这个空间空余出来给AT定义使用。
回复

使用道具 举报

45

主题

60

回帖

195

积分

初级会员

积分
195
 楼主| 发表于 2023-12-13 13:59:19 | 显示全部楼层
eric2013 发表于 2023-12-13 07:49
这个是提示是你MDK Option里面的RW_IRAM2也使用0x24000000地址空间了,不要把这个空间空余出来给AT定义使 ...

多谢!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 19:37 , Processed in 0.183537 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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