我花了不少时间试图了解发生了什么。我甚至无法从内存中开始测试项目读取数据。
在这种情况下,我只需要将一些数据存储在内存中,读取然后处理并将其存储回内存。
这是我的代码
AREA RESET, CODE, READONLY
ENTRY
LDR r0, =SortArray ;load start address
LDR r1, =SortArrayEnd ; load end address
LDR r4, [r0]
SUB r2, r2, #1 ; r2 contains (LENGTH-1)
MOV r6, #0 ; r6 sum set to 0
STOP B STOP
LTORG
AREA my_data, DATA, READWRITE
ALIGN
SortArray
DCD 1,5,20,32,13,66,3,5,23,64,112,66,22
SortArrayEnd
END
这是调试项目时得到的结果
为什么内存中没有数据? 当然,当我从该地址读取内存时,没有任何内容被注册。
我一直试图解决它而没有成功。
这里还有一些其他相关问题。
0x40000000
。这是因为我的MC(LPC2148)的内部存储器映射?从此地址开始SRAM
内存。我是对的吗?=
LDR
template<typename T, typename MT>
struct memberwise_less
{
MT T::* const mptr;
auto operator()(const T& left, const T& right) const
{ return (left.*mptr) < (right.*mptr); }
};
template<typename T, typename MT>
memberwise_less<T, MT> member_less(MT T::*mptr)
{
return { mptr };
}
符号的情况下,无法直接读取存储在不同AREA中的数据? 如果有任何帮助或建议,我将不胜感激。
答案 0 :(得分:0)
这不是一个直接的答案;只是一个使用GNU工具的例子。即使你使用不同的工具,这可能会有所帮助。
.bss
SortArrayEnd: .word 0
.data
fmt: .string "%d %d %d\n"
SortArray: .word 1,5,20,32,13,66,3,5,23,64,112,66,22
.equ len.SortArray,.- SortArray
.text
.global main
main:
nop
ldr r9,=SortArray // point to array
ldr r10,=SortArrayEnd // point to array
ldr r1, [r9] // load array value @ element 0
mov r2, #len.SortArray
sub r2, r2, #4
str r1, [r10] // store value into diff array element 0
ldr r3, [r10] // load element 0 from diff array into GPR for printing
bl write
exit:
mov r7, #1
svc 0
write:
push {r1-r4,lr}
ldr r0,=fmt
bl printf
pop {r1-r4,pc}
使用GDB进入代码,您将看到数组元素出现在数组指针
中(gdb) x/16 $r9
0x20612: 1 5 20 32 13 66 3 5
0x2061a: 23 64 112 66 22 0 0 0
进一步步进,您将看到新加载的值到另一个数组指针
(gdb) x/4 $r10
0x20643: 1 0 0 0