Avr studio Invalid Opcode

Jan Smrz jan.smrz@honeywell.com
Středa Duben 8 16:21:12 CEST 2009


Promennou counter modifikujete v preruseni, je ji tedy potreba definovat
jako volatile. Jinak je v danem kontextu odstranena prekladacem.

J.S.


Bear John Grills wrote:
> Zdravím..
> Potrebuji vytvorit citac na 4 segmentovky.. zvladam, ale na jedne veci 
> jsem se zasekl.. Procesor atmega16 prostredi avr studio 4.15. Kód 
> programu následující (omlouvám se předem za dlouhý příspěvek).
> Poblém je vtom, jakmile odkrokuju program ke smičce, šipečka ukazující 
> na "aktivní" řádek zmizí. Mimojiné dostanu ihned po spuštění debuggeru 
> hlášky typu Invalit opcode. Nemůžu již dva dny přijít na to čím to je..
> Ví někdo? Nevím, jestli to může být špatně nastaveným stack-pointerem?
>
> Díky, Bear
>
> #include "avr/io.h"
> #include <avr/interrupt.h>
> #include <stdio.h>
>
> int counter; // pocitadlo
>
> int main() {
>    // nastaveni
>    // ------------
>    // spolecne anody
>
>    #define display_anodes_offset 3 // bitovy posun na portu
>    #define display_anodes_port PORTD
>    #define display_anodes_ddr DDRD
>
>    display_anodes_ddr = (1<<DDD3|1<<DDD4|1<<DDD5|1<<DDD6); // nastaveni 
> jako vystup
>    display_anodes_port = (1<<PD3|1<<PD4|1<<PD5|1<<PD6);
>
>    // data pro segmenty
>    // ------------
>    #define display_bus_port PORTA
>    #define display_bus_ddr DDRA
>
>    display_bus_ddr = 0xFF; // nastaveni jako vystup
>    display_bus_port = 0x00;
>
>    // nastaveni external interrupt
>    // ------------
>    // doporucuje se vynulovat ddr a port
>    // tady se to muze napsat rovnou bez pouziti #define
>
>    DDRD &=~(1<<DDD2);
>    PORTD &=~(1<<PD2);
>
>    //  externi preruseni je aktivni pri akci na pinu INT0
>    MCUCR |= 0x3; // nastaveni akce pri nabezne hrane signalu na INT0
>    GICR |= 1<<INT0; // pokud je v tomto registru nastaven 6. bit
>                     // + I je aktivni v SREG, externi preruseni je zapnuto.
>        // SMYCKA
>    // ------------      while(1) {
>        // pokusne
>        counter = counter + 1;
>        counter = counter + 2;
>    }
> }
>
> SIGNAL(SIG_INTERRUPT0) { // sem skoci program counter pri externim 
> preruseni
>    counter++;
> }
>
>
> Hlášky , když spustím debugger..
>
>
> Loaded plugin STK500
> Loaded plugin AVR GCC
> Loaded partfile: C:\Program Files\Atmel\AVR 
> Tools\PartDescriptionFiles\ATmega16.xml
> gcc plug-in: Output directory H:\!!AAPROJECTS\citac2\default\ does not 
> exist
> gcc plug-in: Created directory H:\!!AAPROJECTS\citac2\default\
> AVR Simulator: Please wait while configuring simulator...
> AVR Simulator: ATmega16 Configured OK
> AVR Simulator: Invalid opcode 0xffff at address 0x001c00
> Loaded objectfile: H:\!!AAPROJECTS\citac2\default\citac2.elf
> AVR Simulator: Invalid opcode 0xffff at address 0x001c00
> Loaded objectfile: H:\!!AAPROJECTS\citac2\default\citac2.elf
> AVR Simulator: Invalid opcode 0xffff at address 0x001c00
> Loaded objectfile: H:\!!AAPROJECTS\citac2\default\citac2.elf
> AVR Simulator: Invalid opcode 0xffff at address 0x001c00
> AVR Simulator: Invalid opcode 0xffff at address 0x001c00
> AVR Simulator: Invalid opcode 0xffff at address 0x001c00
> Loaded objectfile: H:\!!AAPROJECTS\citac2\default\citac2.elf
> AVR Simulator: Invalid opcode 0xffff at address 0x001c00
> AVR Simulator: Invalid opcode 0xffff at address 0x001c00
> Loaded objectfile: H:\!!AAPROJECTS\citac2\default\citac2.elf
> AVR Simulator: Invalid opcode 0xffff at address 0x001c00
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
>   




Další informace o konferenci Hw-list