Если я скомпилирую проект GCC для Cortex-M4 (LPC4357) и использую -mcpu = cortex-m4, то поплавки коммутатора не работают (вызовы blx __addsf3, которые в конце концов переходят к команде stmia, которая приводит к прерыванию ошибки, возможно, из-за плохих значений в регистрах). Если я компилирую с -mcpu = cortex-m3, он вызывает bl __addsf3, который имеет другой источник и работает.Cortex-M4 & GCC - поведение поплавка
Я думаю, мне, возможно, придется исправить другие переключатели, чтобы заставить поплавки работать с -mcpu = cortex-m4 ... Я пробовал several things, но это действительно странно.
Соответствующие компилятор и компоновщик переключатели:
Компилятор: -mthumb -mcpu = кортекс-М4 -std = c99 -c -g -D ОТЛАДКА -D GCC
линкер: -nostartfiles -nostdlib -nodefaultlibs -fno-exceptions -mthumb -mcpu = cortex-m4 -mfloat-abi = hard -mfpu = fpv4-sp-d16 -O0 -lgcc -lc
Можете ли вы сказать, не хватает ли я здесь чего-то очевидного?
gcc требует времени, чтобы догнать новые чипы, даже если знание этих чипов уже давно существует. Поэтому используйте режущую кромку gcc, и если она не сделает то, что вы хотите, либо вносите свой вклад в gcc, либо ждите или проверяете llvm/clang, чтобы увидеть, насколько они догнаны (такая же проблема, задержка между аппаратным обеспечением и компилятором). –
Вы пытались использовать компилятор CodeRed? Это также база Gcc. –
Нет, мне нужно подготовить образец с помощью этого компилятора (хотя хорошая идея, я должен попробовать более новые версии, с тех пор есть некоторые). –