При компиляции с любой оптимизацией почему-то первой исполняется функция которая вообще не вызывается.. Ну и далее все входит в бесконечный цикл и виснет (видимо связано с тем что не все настроено, и видимо адреса могут быть местами левые в переменных).
Если собрать без оптимизации, вызов начинается как и положено с 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 указываю. Сегодня еще поэксперементирую.

