ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
5 мая
1288250 Топик полностью
PeterD (01.03.2023 22:56, просмотров: 117) ответил PeterD на Не селен в Keil, встала задачка написать boot loader для мегавин хотелось бы утоптать в 1К это все. Но Keil на Си сходу создает проект 1,3кБ (для ARM), куда копать? Вроде методом тыка пытаюсь пофиксить всю инициализацию переменных и т.п., но что то кардинального в уменьшении кода получить не могу.
Вот такая бяка обработчик исключений, сидела в одном из системных файлов пофиксил, ее и все встало на свои места. 

__weak void HardFault_Handler_C(unsigned int * hardfault_args, unsigned lr_value)

{

static volatile unsigned int stacked_r0;

static volatile unsigned int stacked_r1;

static volatile unsigned int stacked_r2;

static volatile unsigned int stacked_r3;

static volatile unsigned int stacked_r12;

static volatile unsigned int stacked_lr;

static volatile unsigned int stacked_pc;

static volatile unsigned int stacked_psr;

stacked_r0 = ((unsigned long) hardfault_args[0]);

stacked_r1 = ((unsigned long) hardfault_args[1]);

stacked_r2 = ((unsigned long) hardfault_args[2]);

stacked_r3 = ((unsigned long) hardfault_args[3]);

stacked_r12 = ((unsigned long) hardfault_args[4]);

stacked_lr = ((unsigned long) hardfault_args[5]);

stacked_pc = ((unsigned long) hardfault_args[6]);

stacked_psr = ((unsigned long) hardfault_args[7]);

printf (" Hard Fault Handler\n\r");

printf (" R0 = 0x%X\n\r", stacked_r0);

printf (" R1 = 0x%X\n\r", stacked_r1);

printf (" R2 = 0x%X\n\r", stacked_r2);

printf (" R3 = 0x%X\n\r", stacked_r3);

printf (" R12 = 0x%X\n\r", stacked_r12);

printf (" Stacked LR = 0x%X\n\r", stacked_lr);

printf (" Stacked PC = 0x%X\n\r", stacked_pc);

printf (" Stacked PSR = 0x%X\n\r", stacked_psr);

printf (" Current LR = 0x%X\n\r", lr_value);

while(1); // endless loop

}