Я пытаюсь получить проект на C++ для работы на процессоре cortex-m0
(конкретный вариант nRF51822
). Я использую codeourcery lite g ++ 2013.05.23. Я использую клифф, который поставляется с кодовым кодом (newlib) и подпрограммой CS3 c init __cs3_start_c. Я переписал функции __cs3_restart и __cs3_start_asm.C Environment Init Bare Metal ARM GCC
Я могу дойти до кливера _init
функции, которая называется от чего-то вроде __libc_init_array
. Когда я выполняю инструкцию по адресу 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) {}; } работать на вас? –