Цитата(Omnicake @ Apr 17 2014, 11:24)

В gcc на Си это делается так:
http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.htmlНасчёт keil не могу подсказать - не знаю.
Можно попробовать скомпилировать это в gcc и посмотреть во что он это превратил в смысле асма:
Код
static int i;
loop1:
pin_toggle(PIN_LED_OK0);
loop2:
pin_toggle(PIN_LED_OK1);
static void *loops[] = {&&loop1, &&loop2};
goto *loops[i^=1];
CODE
pin_toggle(PIN_LED_OK0);
8001d0c: f44f 4001 mov.w r0, #33024; 0x8100
8001d10: f2c4 2022 movt r0, #16930; 0x4222
8001d14: 6805 ldr r5, [r0, #0]
8001d16: ea6f 0605 mvn.w r6, r5
8001d1a: f248 1380 movw r3, #33152; 0x8180
8001d1e: f2c4 2322 movt r3, #16930; 0x4222
8001d22: 601e str r6, [r3, #0]
loop2:
pin_toggle(PIN_LED_OK1);
8001d24: f248 1704 movw r7, #33028; 0x8104
8001d28: f2c4 2722 movt r7, #16930; 0x4222
8001d2c: 683c ldr r4, [r7, #0]
8001d2e: ea6f 0204 mvn.w r2, r4
8001d32: f248 1184 movw r1, #33156; 0x8184
8001d36: f2c4 2122 movt r1, #16930; 0x4222
8001d3a: 600a str r2, [r1, #0]
static void *loops[] = {&&loop1, &&loop2};
goto *loops[i^=1];
8001d3c: f241 0000 movw r0, #4096; 0x1000
8001d40: f2c2 0000 movt r0, #8192; 0x2000
8001d44: 6805 ldr r5, [r0, #0]
8001d46: f085 0601 eor.w r6, r5, #1
8001d4a: 6006 str r6, [r0, #0]
8001d4c: f246 0300 movw r3, #24576; 0x6000
8001d50: f6c0 0300 movt r3, #2048; 0x800
8001d54: f853 7026 ldr.w r7, [r3, r6, lsl #2]
8001d58: f047 0401 orr.w r4, r7, #1
8001d5c: 4720 bx r4
Не совсем то, что хотелось бы увидеть...