Hi, "I do *not* want the ISR to be called". I guess you do not want the interrupt to be enabled. If you do not start the timer (as the interrupt is timer related) this interrupt will never occur. If you are using the timer for something else and need the timer running, then you need not explicitly enable timer overflow interrupt (see TIMSK register bits). In the while loop, you are always setting the port bit which I guess is connected to the LED and the LED will glow when this bit is 1. Suggest toggling the LED through a while loop with delays (large enough to be able to see LED flashing) inserted. Regards, Parthasaradhi Hyderabad
On Sunday, May 8, 2016 3:06 PM, "a...@tuta.io" <a...@tuta.io> wrote: Thank you for your instant response. I am sorry if I was unclear about that: I do *not* want the ISR to be called. The LED should turn on because I enable it in main(), however, the uC goes straight to the ISR! For example, if I set the LED to high in the ISR and set it to low in main(), it will be set to high and the LED will turn on when I flash it. Even though I used cli()! This behavior appears to depend on -Os, so I guess I am either using the tools incorrectly, or there is a bug in the optimization code. 8. Mai 2016 11:22 von partha_nay...@yahoo.com: First off, you are disabling global interrupts (cli ()). You need to enable them (sei ()). I presume you are toggling the LED in ISR, if so the LED will not toggle as interrupts are disabled. Regards, Parthasaradhi Hyderabad On Sunday, May 8, 2016 2:40 PM, "a...@tuta.io" <a...@tuta.io> wrote: Hello, I have been working on a project for some time and at some point, everything just stopped working. It appears that as soon as I include an ISR in my C code, the main function won't even be called anymore. I reduced my code to this: #include <avr/io.h> #include <avr/interrupt.h> int main (void) { cli(); DDRB = 0xff; while(1) PORTB |= (1 << PB5); return 0; } ISR(TIMER0_OVF_vect) {} But the LED just won't turn on. The strange thing is: If I remove the ISR at the bottom without changing anything else, even keeping the include, everything works. If I remove the -Os option from gcc but keep the ISR, everything works. I use these commands to compile, link and flash it: F_CPU=16000000L avr-gcc -Wall -DF_CPU=$F_CPU -c -mmcu=atmega168 -Os main.c -o main.o avr-ld -mavr5 -o led-test.elf main.o avr-objcopy -O ihex led-test.elf led-test.hex sudo avrdude -c avrisp2 -p atmega168 -P usb -b 57600 -U flash:w:led-test.hex I am quite new to the avr tools so I might just have made a silly mistake, so I would appreciate any tips! Thank you! LSB: Distributor ID: Ubuntu Description: Ubuntu 16.04 LTS Release: 16.04 Codename: xenial Output of avr-gcc -v: Using built-in specs. Reading specs from /usr/lib/gcc/avr/4.9.2/device-specs/specs-avr2 COLLECT_GCC=avr-gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/avr/4.9.2/lto-wrapper Target: avr Configured with: ../src/configure -v --enable-languages=c,c++ --prefix=/usr/lib --infodir=/usr/share/info --mandir=/usr/share/man --bindir=/usr/bin --libexecdir=/usr/lib --libdir=/usr/lib --enable-shared --with-system-zlib --enable-long-long --enable-nls --without-included-gettext --disable-libssp --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=avr CFLAGS='-g -O2 -fstack-protector-strong -Wformat ' CPPFLAGS=-D_FORTIFY_SOURCE=2 CXXFLAGS='-g -O2 -fstack-protector-strong -Wformat ' FCFLAGS='-g -O2 -fstack-protector-strong' FFLAGS='-g -O2 -fstack-protector-strong' GCJFLAGS='-g -O2 -fstack-protector-strong' LDFLAGS='-Wl,-Bsymbolic-functions -Wl,-z,relro' OBJCFLAGS='-g -O2 -fstack-protector-strong -Wformat ' OBJCXXFLAGS='-g -O2 -fstack-protector-strong -Wformat ' Thread model: single gcc version 4.9.2 (GCC) _______________________________________________ AVR-GCC-list mailing list AVR-GCC-list@nongnu.org https://lists.nongnu.org/mailman/listinfo/avr-gcc-list
_______________________________________________ AVR-GCC-list mailing list AVR-GCC-list@nongnu.org https://lists.nongnu.org/mailman/listinfo/avr-gcc-list