Цитата(MrYuran @ Apr 17 2009, 09:57)

Хотелось бы на чистом си, типа макроса чтоли...
Просьба на
чистом С просить только то, что и у IAR делается на
чистом С
Так пойдёт?
Код
unsigned char foo(unsigned char sel)
{
// !!! проедполагается, что sel чётно И sizeof(void*)==2
// для простоты изложения для AVR в ОЗУ,
static const void *sw[] = { &&la, &&lb, &&lc };
void *target = *(void**)((unsigned char*)sw + sel);
goto *target;
la:
return 5;
lb:
return 8;
lc:
return 11;
}
msp-gcc под рукой нет, avr-gcc:
Код
foo:
mov r30,r24
ldi r31,lo8(0)
subi r30,lo8(-(sw.1469))
sbci r31,hi8(-(sw.1469))
ld __tmp_reg__,Z+
ld r31,Z
mov r30,__tmp_reg__
ijmp
.L2:
ldi r24,lo8(5)
ldi r25,hi8(5)
ret
.L4:
ldi r24,lo8(8)
ldi r25,hi8(8)
ret
.L5:
ldi r24,lo8(11)
ldi r25,hi8(11)
ret
Для MSP, по идее, будет несколько хуже, чем совсем красивое добавление прямо к PC, но всё же лучше стандартного switch