Цитата(zltigo @ Sep 4 2015, 12:11)

Функции глубоко безразлично, она по любому получает переменные в стеке или/и в регистрах.
Сейчас макрофункция инициализации порта компилируется в ~14 команд (+ память для констант):
CODE
inline void GPIO_init(void)
{
/* Биты 0..7 порта A используются для чтения RL, нужно подтянуть к GND */
GPIO_CONF(A,
MD_IN, OT_PP, SP_LO, PL_PD, AF_00, // 0: RL0
MD_IN, OT_PP, SP_LO, PL_PD, AF_00, // 1: RL1
MD_IN, OT_PP, SP_LO, PL_PD, AF_00, // 2: RL2
MD_IN, OT_PP, SP_LO, PL_PD, AF_00, // 3: RL3
MD_IN, OT_PP, SP_LO, PL_PD, AF_00, // 4: RL4
MD_IN, OT_PP, SP_LO, PL_PD, AF_00, // 5: RL5
MD_IN, OT_PP, SP_LO, PL_PD, AF_00, // 6: RL6
MD_IN, OT_PP, SP_LO, PL_PD, AF_00, // 7: RL7
MD_AF, OT_PP, SP_ME, PL_NP, AF_02, // 8: TIM1_CH1 - FCAL
MD_AF, OT_PP, SP_HI, PL_NP, AF_01, // 9: USART1_TX -> FPRX
MD_AF, OT_PP, SP_LO, PL_NP, AF_01, // 10: USART1_RX <- FPTX
MD_GO, OT_PP, SP_ME, PL_NP, AF_00, // 11: L3V
MD_GO, OT_PP, SP_ME, PL_NP, AF_00, // 12: L12V
MD_AF, OT_PP, SP_ME, PL_NP, AF_00, // 13: SWDIO
MD_AF, OT_PP, SP_ME, PL_NP, AF_00, // 14: SWCLK
MD_GO, OT_PP, SP_HI, PL_NP, AF_00); // 15: FREQ-
CODE
GPIO_init PROC
;;;194 */
;;;195 inline void GPIO_init(void)
000000 2009 MOVS r0,#9
;;;196 {
;;;197 /* Биты 0..7 порта A используются для чтения RL, нужно подтянуть к GND */
;;;198 GPIO_CONF(A,
000002 4912 LDR r1,|L80.76|
000004 06c0 LSLS r0,r0,#27
000006 6001 STR r1,[r0,#0]
000008 2200 MOVS r2,#0
00000a 8082 STRH r2,[r0,#4]
00000c 4910 LDR r1,|L80.80|
00000e 6081 STR r1,[r0,#8]
000010 4910 LDR r1,|L80.84|
000012 60c1 STR r1,[r0,#0xc]
000014 6202 STR r2,[r0,#0x20]
000016 21ff MOVS r1,#0xff
000018 3113 ADDS r1,r1,#0x13
00001a 6241 STR r1,[r0,#0x24]
И что, inline функция такого не осилит сотворить?