ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
28 апреля
1311244 Топик полностью
Nikolay_Po (20.05.2023 18:18, просмотров: 282) ответил SciFi на Как я понял, достаточно в ассемблерных вставках заменить "LDR Rn, =CONST" на MOVW/MOVT.
Хорошо. Вроде продвинулся. Поискал среди файлов - в проекте нет ни одного чисто ассемблерного файла *.s. Но нашёл ассемблерные вставки в exception-handlers.c, что-то вроде такого: 

По идее, в этих местах и дело.


void __attribute__ ((section(".after_vectors"),weak,naked))
HardFault_Handler (void)
{
asm volatile(
" tst lr,#4 \n"
" ite eq \n"
" mrseq r0,msp \n"
" mrsne r0,psp \n"
" mov r1,lr \n"
" ldr r2,=HardFault_Handler_C \n"
" bx r2"
: /* Outputs */
: /* Inputs */
: /* Clobbers */
);
}

Вопросы:

1) Если оставлять как есть, как конкретно заменить такие LDR на другие, чтобы избежать проблемы с LTO? Практически не ориентируюсь в ассемблере ARM Cortex

2) На что современное, совместимое с новыми компиляторами, заменить эти файлы? Как "поднять" bare metal + CMSIS в Eclipse? До сих пор, за исключением проблемы с offset out of range, меня устраивал пакет

Embedded C/C++ Arm Cross Compiler 6.3.1.202210101738, org.eclipse.embedcdt.managedbuild.cross.arm.feature.group Eclipse Embedded CDT

Хотелось бы а) выкинуть semihosting и прочие дыры в безопасности, чтобы, в итоге, заблокировать ПО от чтения со стороны. б) Но оставить возможность отладки. в) Избежать проблем с LTO.