gpt4 book ai didi

c++ - C环境初始化裸机ARM GCC

转载 作者:行者123 更新时间:2023-11-30 04:16:48 26 4
gpt4 key购买 nike

我正在尝试让一个 C++ 项目在 cortex-m0 处理器(具体来说是 nRF51822)上运行。我正在使用 codesourcery lite g++ 2013.05.23。我正在使用 codesourcery (newlib) 附带的 clib 和 CS3 c init 例程 __cs3_start_c。我重写了 __cs3_restart 和 __cs3_start_asm 函数。

我可以深入到 clib _init 函数,它是从类似 __libc_init_array 的东西调用的。当我在地址 00012388 执行指令时,处理器出现故障。

由于这条指令是一个pop,我立刻怀疑堆栈指针是无效的;但是,在故障发生之前捕获的寄存器值表明情况并非如此。处理器出现故障的任何想法?如何初始化 C++ 环境以便开始运行代码?

_init:
00012384: _init+0 push {r3, r4, r5, r6, r7, lr}
00012386: _init+2 nop ; (mov r8, r8)
00012388: _init+4 pop {r3, r4, r5, r6, r7}
0001238a: _init+6 pop {r3}
0001238c: _init+8 mov lr, r3
0001238e: _init+10 bx lr

注册值:

Register       Val: Hex     Val: Dec
r0 0x20008d8 33556696
r1 0x123c0 74688
r2 0xa68 2664
r3 0x2001340 33559360
r4 0x0 0
r5 0x12390 74640
r6 0x0 0
r7 0x12c90 76944
r8 0xffffffff 4294967295
r9 0xffffffff 4294967295
r10 0xffffffff 4294967295
r11 0xffffffff 4294967295
r12 0xffffffff 4294967295
sp 0x2003fb8 0x2003fb8
lr 0xff89 65417
pc 0x12388 0x12388 <_init+4>
xpsr 0x41000003 1090519043
MSP 0x2003fb8 33570744
PSP 0xfffffffc 4294967292
PRIMASK 0x0 0
BASEPRI 0x0 0
FAULTMASK 0x0 0
CONTROL 0x0 0

我正在尝试编译的代码如下 我没有任何静态分配的类,所以我不太明白为什么这段代码会运行。

Main.cpp
volatile int i = 4;
volatile int j = 0;
volatile int k;
int main(void)
{
for(;j< i; j++)
{
k = k +2;
}

TestClass * tc = new TestClass(3);
while(1){};
}

Testclass.h
class TestClass {
public:
int i;
TestClass(int num);
virtual ~TestClass();
};

TestClass.cpp
TestClass::TestClass(int num) {
this->i = num;
}

TestClass::~TestClass() {
}

谢谢!

最佳答案

不好意思麻烦大家了,问题解决了。堆栈指针错误。栈顶应该设置为0x20040000,实际上设置为0x02040000。我只是对代码能够毫无错误地做到这一点感到惊讶。

再次感谢。

关于c++ - C环境初始化裸机ARM GCC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17508218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com