我已经被困了很多天,试图在 DS-5 中实现代码,以 Cortex-A9 为目标并使用 NEON SIMD 内在函数。我设法通过调试器执行了一些小程序,但是当我尝试分配大于 256KB 的内存时,我总是收到一条消息
说明 资源路径位置类型 L6221E:执行范围为 [0x80001674,0x800417d0) 的执行区域 ZI_DATA 与执行范围为 [0x80040000,0x80080000) 的执行区域 ARM_LIB_HEAP 重叠。CPUTest2017RE C/C++ 问题
内存映射由分散文件调度如下
;*******************************************************
; Copyright (c) 2011-2014 ARM Ltd. All rights reserved.
;*******************************************************
; Scatter-file for Cortex-A9 bare-metal example on Versatile Express
; This scatter-file places application code, data, stack and heap at suitable addresses in the memory map.
; Using a scatter-file with ARM_LIB_STACKHEAP eliminates the need to set stack-limit or heap-base in the debugger.
; Versatile Express with Cortex-A9 has 1GB SDRAM at 0x60000000 to 0x9FFFFFFF, which this scatter-file uses.
SDRAM 0x80000000 0x10000000
{
VECTORS +0
{
* (VECTORS, +FIRST) ; Vector table and other (assembler) startup code
* (InRoot$$Sections) ; All (library) code that must be in a root region
}
RO_CODE +0
{ * (+RO-CODE) } ; Application RO code (.text)
RO_DATA +0
{ * (+RO-DATA) } ; Application RO data (.constdata)
RW_DATA +0
{ * (+RW) } ; Application RW data (.data)
ZI_DATA +0
{ * (+ZI) } ; Application ZI data (.bss)
ARM_LIB_HEAP 0x80040000 EMPTY 0x00040000 ; Application heap
{ }
ARM_LIB_STACK 0x80090000 EMPTY -0x00010000 ; Application (SVC mode) stack
{ }
IRQ_STACK 0x800A0000 EMPTY -0x00010000 ; IRQ mode stack
{ }
TTB 0x80100000 EMPTY 0x4000 ; Level-1 Translation Table for MMU
{ }
}
所以我的问题是,当我分配内存以传递 512x512(.bdat 格式)图像时,此分配发生在 ZI_DATA 中,而不是在空闲的 SDRAM 中。我在每个配置附近都进行了尝试,要么我得到上面的错误,要么调试器卡在挂起......这里有什么问题?
PS:相同的代码在 Cortex-A8 和旧版本的 DS-5 上运行,但由于某种原因,Cortex-A8 调试器无法与最新版本的 DS-5 一起使用。