X-Git-Url: http://git.linex4red.de/pub/USBaspLoader.git/blobdiff_plain/e59306aabda9c2b64ef68f8b4bdee9f5710912c1..6c347ffa2ceef6cd7a9009d4c544e788d31a24e8:/firmware/main.c diff --git a/firmware/main.c b/firmware/main.c index feb5eff..07300b9 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -260,7 +260,16 @@ asm volatile ( USB_INTR_CFG = 0; /* also reset config bits */ GICR = (1 << IVCE); /* enable change of interrupt vectors */ GICR = (0 << IVSEL); /* move interrupts to application flash section */ - + +/* + * There seems to be another funny compiler Bug. + * When gcc is using "eicall" opcode it forgets to modify EIND. + * On devices with large flash memory there are some target address bits + * missing. In this case some zero bits... + */ +#if (defined(EIND) && ((FLASHEND)>131071)) + EIND=0; +#endif /* We must go through a global function pointer variable instead of writing * ((void (*)(void))0)(); * because the compiler optimizes a constant 0 to "rcall 0" which is not