Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[AVR] Invalid opcode?

Pagina: 1
Acties:

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 21-11 19:09

TrailBlazer

Karnemelk FTW

Topicstarter
Ik ben gisteren eindelijk begonnen met acr microcontrollers. Nou heb ik mijn programmer in een keer goed in elkaar gesoldeerd alleen mijn eerste programma gaat mis
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
;my very first avr prog
.include "2313def.inc"
.def temp=R16
.def T1=R15
.def T2=R14
.org 0x0000
   rjmp RESET
longDelay:
  clr T1
  clr T2
delay_1:
;  dec T1
;  brne delay_1
;  dec T2
;  brne delay_1
  dec temp
  brne delay_1
  ret
.equ led=6
RESET:
sbi DDRD,led
.equ delay=2
flash:
sbi PORTD,led
ldi temp,delay
rcall longDelay
cbi PORTD,led
ldi temp,delay
rcall longDelay
rjmp flash

In avr programmer gaat het mis op de ret binnen de longdelay. Ik krijg dan een invalid opcode Dit schijnt te komen doordat ret enkel kan worden aangeroepen indien de subroutine is aangeropen vanuit een rcall. Dit doe ik volgens mij ook. Kan iemand er enig licht op schijnen?

  • naftebakje
  • Registratie: Februari 2002
  • Nu online
Ik ken niets van AVR programmatie, maar die .equ led=6 staat daar wel erg raar na de ret. Moet die niet normaal bovenaan bij de andere initialisatie's staan?
Het kan zijn dat de compiler daarop valt, bij error's is het altijd nuttig eens wat boven en onder de regel te kijken die miserie geeft, dikwijls ligt daar het probleem.

O ja, nog een tip: voeg wat enter's toe tussen de verschillende delen van je programma, dat maakt het leesbaarder en je zal heel wat fouten voorkomen (omdat het sneller leest). Dus je initialisatie, lege regel, sub programma (longDelay), lege regel, gewone programma.

[ Voor 29% gewijzigd door naftebakje op 22-10-2006 20:04 ]

Als de boer zijn koeien kust, zijn ze jarig wees gerust. Varkens op een landingsbaan, leiden nooit een lang bestaan. Als de boer zich met stront wast, zijn zijn hersens aangetast. Als het hooi is in de schuur, zit het wijf bij den gebuur.


  • Sprite_tm
  • Registratie: September 2002
  • Laatst online: 29-10 06:07

Sprite_tm

Semi-Chinees

jeroen@spritesws:/tmp$ gavrasm bla.asm
+------------------------------------------------------------+
| gavrasm gerd's AVR assembler Version 1.8 (C)2006 by DG4FAC |
+------------------------------------------------------------+
Compiling Source file: bla.asm
-------
Pass: 1
31 lines done.

Pass 1 ok.
-------
Pass: 2
31 lines done.


14 words code, 0 words constants, total=14 = 1.4%

No warnings!
Compilation completed, no errors. Bye, bye ...
jeroen@spritesws:/tmp$
Ik heb nergens last van hoor; je code lijkt goed te zijn. Heb je niet ergens een instelling in je assembler fout staan ofzo?

Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

Ook in AVR studio gaat het gewoon goed, niets mis dus met je code (behalve dan misschien de layout zoals naftebakje opmerkt). Die equ mag gewoon tussendoor, is soms ook overzichtelijker dan alles bovenin zetten.

Verder weet ik niet of je een AT90S2313 of een ATtiny2313 gebruikt, maar waarschijnlijk de laatste. Als dat zo is moet je eigenlijk tn2313def.inc includen. Zoniet dan heb ik niets gezegd. Moet voor je probleem ook niets uitmaken trouwens.

www.madwizard.org


  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 21-11 19:09

TrailBlazer

Karnemelk FTW

Topicstarter
het is inderdaad de tiny.
Het gekke is hetgaat dus fout als ik hem build en dan met F11 er doorheen stap. Het vervelende was dat het wel gewerkt heeft volgens mij.

[ Voor 74% gewijzigd door TrailBlazer op 22-10-2006 21:13 ]


  • Vuikie
  • Registratie: December 2003
  • Laatst online: 09:35
Ik heb even zitten debuggen en opeens schoot het mij te binnen: Met rcall zet je de waarde van de programcounter (PC) + 1 in je stack en die haal je weer terug als je een ret geeft, zo spring je terug naar waar je gebleven was, maar bij een AVR (Studio 4, het kan zijn dat andere programma's het automatisch doen) moet je namelijk wel je stack initialiseren. Ik heb ff je code aangepast zodat het EN overzichtelijker is EN werkt ;)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
;my very first avr prog

.include "tn2313def.inc"

.equ led=6
.equ delay=2

.def temp=R16
.def T1=R14
.def T2=R15

;interrupt vector
.org 0x0000
   rjmp RESET

;main programma/loop
flash:
sbi PORTD,led
ldi temp,delay
rcall longDelay
cbi PORTD,led
ldi temp,delay
rcall longDelay
rjmp flash

;interrupt jump
RESET:

;STACK INIT!!!
ldi temp, RAMEND
out SPL, temp
;STACK INIT!!!

sbi DDRD,led
rjmp flash

;Wacht loop
longDelay:
  clr T1
  clr T2
delay_1:
;  dec T1
;  brne delay_1
;  dec T2
;  brne delay_1
  dec temp
  brne delay_1
  ret


nog veel plezier met je knipperende ledje :D

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 21-11 19:09

TrailBlazer

Karnemelk FTW

Topicstarter
thx dit lijkt het inderdaad te zijn tijdens het debuggen geen foutmeldingen meer. Ik ga hem morgen wel ff laden in mijn ar. Ik begrijp het nog steeds niet want het heeft wel netjes gewerkt eerst.
Hee een knipperend ledje is volgens mij de assembly/avr variant an hello world

[ Voor 16% gewijzigd door TrailBlazer op 22-10-2006 22:17 ]


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

Ah de foutmelding was tijdens het debuggen, niet tijdens het compilen :) Dat scheelt en dan is het idd een logische fout.

Misschien dat je het getest hebt op een ander device, er zijn een paar AVRs met een hardware stack die je niet hoeft te initialiseren.

www.madwizard.org


  • naftebakje
  • Registratie: Februari 2002
  • Nu online
TrailBlazer schreef op zondag 22 oktober 2006 @ 22:16:
...Hee een knipperend ledje is volgens mij de assembly/avr variant an hello world
Dat heb je goed gezien, voor µC is dat idd hét voorbeeld om mee te beginnen.

Als de boer zijn koeien kust, zijn ze jarig wees gerust. Varkens op een landingsbaan, leiden nooit een lang bestaan. Als de boer zich met stront wast, zijn zijn hersens aangetast. Als het hooi is in de schuur, zit het wijf bij den gebuur.


  • Vuikie
  • Registratie: December 2003
  • Laatst online: 09:35
Idd, als je hem eerst met een AT90s1200 hebt getest, die heeft een 3 byte deep hardware stack, dan krijg je die error niet. Mss stond de simulator nog op een 1200... Maar goed, bij bijna alle AVR's heb je een software stack en deze moet je dus initialiseren.

Check dus altijd of je AVR een software stack heeft ja of nee

PS.
Ik bedoelde ook nix met die opmerking hoor, ik ben ook zo begonnen. Maar goed, als je nog andere problemen hebt, stel ze maar. ;)

[ Voor 17% gewijzigd door Vuikie op 22-10-2006 22:53 ]

Pagina: 1