Zdravím vespolek,
v jednom svém projektu jsem chtěl použít knihovnu I2C_slave (zde) ale zlobí mi to. Zjistil jsem že funkce I2C_setCallbacks uloží do ukazatele jinou adresu než je adresa požadované funkce a když je potom funkce volána skočí se na nesmyslnou adresu.
I2C_setCallbacks(I2C_received, I2C_requested);
9a: 68 e4 ldi r22, 0x48 ; 72
9c: 70 e0 ldi r23, 0x00 ; 0
9e: 85 e4 ldi r24, 0x45 ; 69
a0: 90 e0 ldi r25, 0x00 ; 0
a2: 02 d0 rcall .+4 ; 0xa8 <I2C_setCallbacks>
a4: 80 e1 ldi r24, 0x10 ; 16
// init I2C
I2C_init(I2C_ADDR);
a6: 09 c0 rjmp .+18 ; 0xba <I2C_init>
000000a8 <I2C_setCallbacks>:
static void (*I2C_recv)(uint8_t);
static void (*I2C_req)();
void I2C_setCallbacks(void (*recv)(uint8_t), void (*req)())
{
I2C_recv = recv;
a8: 90 93 03 01 sts 0x0103, r25
ac: 80 93 02 01 sts 0x0102, r24
I2C_req = req;
b0: 70 93 01 01 sts 0x0101, r23
b4: 60 93 00 01 sts 0x0100, r22
b8: 08 95 ret
Na adrese 0x0045 a 0x0048 ale funkce I2C_received a I2C_requested nejsou.
Zkusil jsem všechno možné, strávil několik dní hledáním na googlu, ale už mne nenapadá co s tím.
Díky