IAR Embedded Workbench 中的内存交叉问题

问题描述 投票:0回答:1

美好的一天。我是微控制器编程的新手。我使用 ARM Cortex-M4 内核 MK12DN512VLK5。该程序包含 IAR Embedded Workbench 中的汇编代码和 C 代码。汇编代码定义了许多服务变量并将它们写入从0x1fff8000开始的地址。该数字是 RAM 存储器的起始编号。在 C 代码中,有一个静态数组,从地址 0x1fff8000 开始写入。所有这些都会导致区域重叠和进一步的错误。

帮助划分区域,建议告诉编译器从某个地址开始放置静态数组,例如0x1fff8000+(汇编器使用的最大内存)。预先感谢。

汇编代码示例: my_variable 等于 0x1fff8000

C代码示例: 静态浮点 my_array[100];

c iar
1个回答
0
投票

感谢@user694733的评论,可以使用.icf文件中的附加代码解决问题:

define block ASSEMBLER_CODE with alignment = 8, size = ASSEMBLER_CODE_SIZE {}; place at address mem:0x1fff8000 { block ASSEMBLER_CODE }; keep { block ASSEMBLER_CODE };

现在,汇编代码访问地址从 0x1fff8000 到 0x1fff8000 + ASSEMBLER_CODE_SIZE 的内存。在这种情况下,编译器知道不可能写入该区域,并且仅在 ASSEMBLER_CODE 块之后开始写入。

© www.soinside.com 2019 - 2024. All rights reserved.