cortex-m0
프로세서 (구체적으로는 nRF51822
)에서 작동하는 C++ 프로젝트를 얻으려고합니다. 나는 codesourcery lite g ++ 2013.05.23을 사용하고 있습니다. 나는 codesourcery (newlib) 및 CS3 c init 루틴 __cs3_start_c와 함께 제공되는 clib을 사용하고 있습니다. 필자는 __cs3_restart 및 __cs3_start_asm 함수를 다시 작성했습니다.C 환경 Init Bare Metal ARM GCC
__libc_init_array
같은 것으로부터 호출 된 _init
함수까지 도달 할 수 있습니다. 주소 00
에서 명령을 실행하면 프로세서에 오류가 발생합니다.
이 명령어는 pop
이므로 나는 즉시 스택 포인터가 유효하지 않다고 의심했습니다. 그러나 오류 이전에 캡처 된 레지스터 값은 다르게 나타냅니다. 프로세서가 왜 오류를 일으키는 지 아십니까? 코드 실행을 시작할 수 있도록 C++ 환경을 초기화하려면 어떻게해야합니까?
_init:
00: _init+0 push {r3, r4, r5, r6, r7, lr}
00: _init+2 nop ; (mov r8, r8)
00: _init+4 pop {r3, r4, r5, r6, r7}
00a: _init+6 pop {r3}
00c: _init+8 mov lr, r3
00e: _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() {
}
감사합니다!
C++ 코드는 어디에 있습니까? 시작시 초기화 (예 : 전역)가 필요한 변수가 있습니까? 그렇다면 그 중 하나가 범인이 될 수 있습니다. –
int main() {while (1) {}; } 당신을 위해 일해? –