Интересные вещи 8(
При компиляции с любой оптимизацией почему-то первой исполняется функция которая вообще не вызывается.. Ну и далее все входит в бесконечный цикл и виснет (видимо связано с тем что не все настроено, и видимо адреса могут быть местами левые в переменных).
Если собрать без оптимизации, вызов начинается как и положено с main. Почему такое может быть?

Компилирую такой командой -
`which avr-gcc` -ggdb3 -Wall -std=c99 -mmcu=avr25 -DF_CPU=8000000UL -D__AVR_ATtiny85__ main.c USI_TWI_Slave.c -o main.elf
Дальше запускаю в симуляторе simavr -f 8000000 -m attiny85 -g 1234 ./main.elf
Захожу в gdb и вижу, что запущен не main.
На железке соответственно все висло. Сейчас я железку немного испортил

, поэтому бинарник без оптимизации проверить не могу. Но очень похоже что там тоже самое происходит.
Вот main, ожидается, что инициализируется twi и будет мигать светодиод. Сначала я подумал что вызывается обработчик прерываний, и в нем вызываются USI_TWI_On_Slave_Transmit, USI_TWI_On_Slave_Receive, но если первые три строки закомментировать происходит тоже самое.
Код:
int main() {
USI_TWI_Slave_Initialise(SLAVE_ADDR);
USI_TWI_On_Slave_Transmit = requestEvent;
USI_TWI_On_Slave_Receive = receiveEvent;
DDRB = MASK;
PORTB = MASK;
while(1) {
PORTB ^= MASK;
_delay_ms(500);
}
}
Ну, возможно это глюк симулятора конечно. Но тогад не понятно почему в железе светодиод не мигал..
Добавлено after 9 hours 8 minutes 43 seconds:Примерно понял - ассемблерный код разный получается, и видимо я gcc неверный mcu указываю. Сегодня еще поэксперементирую.