簡體   English   中英

C環境初始裸機ARM GCC

[英]C Environment Init Bare Metal ARM GCC

我正在嘗試讓一個C ++項目在cortex-m0處理器(具體來說是nRF51822 )上工作。 我正在使用codesourcery lite g ++ 2013.05.23。 我正在使用代碼源(newlib)和CS3 c初始化例程__cs3_start_c隨附的clib。 我已經重寫了__cs3_restart和__cs3_start_asm函數。

我可以深入到clib _init函數,該函數從__libc_init_array東西__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。 我很驚訝代碼達到了它沒有錯誤的程度。

再次感謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM