Преобразование BIN -->BCD

Сила в умении комбинировать ASM + C/C++ или C/C++ + ASM и сразу пример:
Код из первого сообщения темы - Провел тест. OLED дисплей 128x64 на чипе SSD1306 подключен через I2C, соплями, без пайки и работает с частотой 271+ FPS

Глубоко не полезу - одна функция __reset

...
uint32_t const __Vector_Table [] __attribute__ ((section ("RESET")))={
	(uint32_t) &__Vector_Table [2],									//Top of stack
	(uint32_t) &__reset,											//Reset handler
	0x20005000,
	PERIPH_BB_BASE+((uint32_t)&RCC->CR-PERIPH_BASE)*32+RCC_CR_HSION_Pos*4,
	PERIPH_BB_BASE+((uint32_t)&FLASH->ACR-PERIPH_BASE)*32+POS(FLASH_ACR_LATENCY_1)*4,
	(uint32_t)&RCC->CFGR,
	RCC_CFGR_PLLMULL9|RCC_CFGR_PLLSRC|RCC_CFGR_PPRE1_DIV2,
	PERIPH_BB_BASE+((uint32_t)&RCC->CFGR-PERIPH_BASE)*32+POS(RCC_CFGR_SW_1)*4
};
...
void __attribute__ ((naked)) __reset(void){
	__asm volatile(
		"POP {r1-r6,r8,r9,r10} \n\t"
		"MOV sp,r1 \n\t"
		"MOVS r1,1 \n\t"
		"STR r1,[r2,%0] \n\t"		//HSE On
		"STR r1,[r3] \n\t"			//FLASH LATENCY = 2
		"wait_HSERDY: \n\t"
		"LDR r0,[r2,%1] \n\t"
		"MOVS r0,r0 \n\t"
		"BEQ wait_HSERDY \n\t"
		"STR r5,[r4] \n\t"			//PLL MULL = 9
		"STR r1,[r2,%2] \n\t"		//PLL On
		"wait_PLLRDY: \n\t"
		"LDR r0,[r2,%3] \n\t"
		"MOVS r0,r0 \n\t"
		"BEQ wait_PLLRDY \n\t"
		"STR r1,[r6] \n\t"			//PLL selected as system clock
		"wait_PLL: \n\t"
		"LDR r0,[r6,%4] \n\t"
		"MOVS r0,r0 \n\t"
		"BEQ wait_PLL \n\t"
		"STR r7,[r2] \n\t"			//HSI Off
		"STR r9,[r8,4] \n\t"
		"STR r10,[r8] \n\t"
		"B __main \n\t"
	:
	: "X" ((RCC_CR_HSEON_Pos-RCC_CR_HSION_Pos)*4),
	  "X" ((RCC_CR_HSERDY_Pos-RCC_CR_HSION_Pos)*4),
	  "X" ((RCC_CR_PLLON_Pos-RCC_CR_HSION_Pos)*4),
	  "X" ((RCC_CR_PLLRDY_Pos-RCC_CR_HSION_Pos)*4),
	  "X" ((POS(RCC_CFGR_SWS_1)-POS(RCC_CFGR_SW_1))*4)
	:
	);
}

Первый же POP заполнит кучу регистров данными из “таблицы векторов” и с этими данными (в основном через bit-banding) STM32 запустится на 72 МГц …

Считанные байты кода и процессор готов к main …
Какого размера код под STM32 порождает запуск на 72 МГц (void Set_SysClock72Mhz(void)) и пустой main у вас ?

На чём этот код ??? C/C++ + ASM …

1 лайк