Forum: Mikrocontroller und Digitale Elektronik AVR Studio 4 Stack disabled + 2 Anfängerfragen


von Simon T. (narfinus)


Lesenswert?

Einen wunderschöenen guten Abend allerseits

Ich habe derzeit an einer Auswertung des allseits beliebten 
DCF-77-Empfängers für eine Funkuhr.
Nun ist dies mein erster richtiger Kontakt mit µControllern und 
dementsprechend fehlt mir die Routine, aber die kommt noch ;)

Ich arbeite mit dem STK500 sowie AVR Studio 4 (Version 4.12) und das 
ganze soll laufen auf einem ATmega8.

Nun zu meinem Problem:

1.
Der Stack Monitor des AVR Studio-Debuggers ist bei mir komplett 
"disabled". Ich habe den Stackpointer zuvor angelegt
1
ldi temp,LOW(RAMEND)  
2
out SPL, temp      
3
ldi temp,HIGH(RAMEND)  
4
out SPH, temp
Des weiteren scheint alles zu funktionieren soweit ich das ohne 
Stack-Monitor feststellen kann.
Es gab hier schonmal einen Thread wo exakt das selbe Problem beschrieben 
wurde, allerdings wurde dort nicht so recht erklärt woran es denn nun 
liegt.

2.
Im Zuge der Abtastung des DCF-Signals will ich das Output Compare 
Register von Timer 1 auslesen und dessen Inhalt mit einer Konstanten 
addieren. Nun habe ich die Möglichkeit High-und LowByte des Registers 
einzeln mit der Konstanten zu addieren. Das erscheint mir jedoch recht 
umständlich. Viel praktischer währe es, wenn man High-und Lowbyte direkt 
in einem verarbeiten könnte.
Geht das oder spinn' ich mir hier grad was zusammen?

3.
Eine Kleinigkeit die ich komischerweise in diversen Guides nicht habe 
finden können:
Wenn ich SRAM-Segmente mit .DSEG definiere, so steht in der Beschreibung 
das die folgenden Speicherreservierungen sich auf das SRAM beziehen. Wie 
beende ich diese "folge"? Wie sag ich dem Compiler, dass nun wieder 
RAM-Speicherreservierungen folgen sollen?


Mit freundlichen Grüßen
Narf

PS: Das Stack-Monitor Problem nervt mich nun seit 4 Stunden, währ' für 
Hilfe echt dankbar!

von spess53 (Gast)


Lesenswert?

Hi

>Ich arbeite mit dem STK500 sowie AVR Studio 4 (Version 4.12) und das
>ganze soll laufen auf einem ATmega8.

Nicht gerade der letzte Schrei (aktuell 4.12 SP1).

>Der Stack Monitor des AVR Studio-Debuggers ist bei mir komplett
>"disabled".

???

>Nun habe ich die Möglichkeit High-und LowByte des Registers
>einzeln mit der Konstanten zu addieren. Das erscheint mir jedoch recht
>umständlich. Viel praktischer währe es, wenn man High-und Lowbyte direkt
>in einem verarbeiten könnte.

Kommt auf die Konstante an: adiw r17:r16,K geht für K=0...63

>Wie sag ich dem Compiler, dass nun wieder RAM-Speicherreservierungen
>folgen sollen?

Du meinst bestimmt ROM (Flash) :  '.cseg'

MfG Spess

von Peter D. (peda)


Lesenswert?

Simon T. schrieb:
> Im Zuge der Abtastung des DCF-Signals will ich das Output Compare
> Register von Timer 1 auslesen und dessen Inhalt mit einer Konstanten
> addieren. Nun habe ich die Möglichkeit High-und LowByte des Registers
> einzeln mit der Konstanten zu addieren. Das erscheint mir jedoch recht
> umständlich. Viel praktischer währe es, wenn man High-und Lowbyte direkt
> in einem verarbeiten könnte.

Ja, so macht man es, wenn es möglichst kompliziert sein soll.

Oder man überlegt sich erstmal, was für Zeiten überhaupt auftreten 
können.
Da sind die Bitzeiten (100ms/200ms) und die Bitrate (1s/2s).
Wenn man nun einfach nen Timerinterrupt von 10ms aufsetzt, läßt sich 
alles prima mit einem Byte abzählen. Die Bitwerte (10/20) lassen sich 
gut unterscheiden. Zusätzlich bewirkt die Abtastung im Timerinterrupt ne 
Störunterdrückung von kurzen Impulsen.

> PS: Das Stack-Monitor Problem nervt mich nun seit 4 Stunden, währ' für
> Hilfe echt dankbar!

Was ist ein Stackmonitor, wozu braucht man sowas?
Programmier doch einfach in C, dann kümmert sich der Compiler um den 
Stack.


Peter


P.S.:
Als 1997 der AVR rauskam und ich damit anfing, gabs noch keinen 
Debugger.
Und wenn man nen Chip erstmal kennt, braucht man ihn dann auch nicht 
mehr.

von Simon T. (narfinus)


Angehängte Dateien:

Lesenswert?

Ich hab' mal nen Screen von dem "disabled" Stack Monitor gemacht

> Nicht gerade der letzte Schrei (aktuell 4.12 SP1).

Ich werd mich mal nach dem Update umsehen

> Kommt auf die Konstante an: adiw r17:r16,K geht für K=0...63

Okey, meine Konstante ist leider größer, aber danke

> Du meinst bestimmt ROM (Flash) :  '.cseg'

Den hab ich gesucht. Danke!

> Ja, so macht man es, wenn es möglichst kompliziert sein soll.
>
> Oder man überlegt sich erstmal, was für Zeiten überhaupt auftreten
> können.
> Da sind die Bitzeiten (100ms/200ms) und die Bitrate (1s/2s).
> Wenn man nun einfach nen Timerinterrupt von 10ms aufsetzt, läßt sich
> alles prima mit einem Byte abzählen. Die Bitwerte (10/20) lassen sich
> gut unterscheiden. Zusätzlich bewirkt die Abtastung im Timerinterrupt ne
> Störunterdrückung von kurzen Impulsen.

Mir ist klar, dass meine Version wahrscheinlich viel zu kompliziert ist. 
Aber genau deswegen arbeite ich in Assembler und nicht in C damit ich 
eben den µC wirklich verstehen lerne.

Bis hier hin,
Narf

von Peter D. (peda)


Lesenswert?

Simon T. schrieb:
> Aber genau deswegen arbeite ich in Assembler und nicht in C damit ich
> eben den µC wirklich verstehen lerne.

Dann mußt Du eben 2 8Bit Befehle machen.
Um z.B. eine 16Bit Konstante zu addieren:
1
  subi r16, low (-12345)
2
  sbci r17, high(-12345)


Peter

von spess53 (Gast)


Lesenswert?

Hi

>Ich hab' mal nen Screen von dem "disabled" Stack Monitor gemacht

Kann ich mit dem aktuellen AVR-Studio niocht nachvollziehen.
Bist du sicher, das du den Simulator eingestellt hast?

> Kommt auf die Konstante an: adiw r17:r16,K geht für K=0...63
Okey, meine Konstante ist leider größer, aber danke

Dann:
  add r16,Low(k)
  adc r17,High(k)

  k=0...65535

MfG Spess

von Peter D. (peda)


Lesenswert?

spess53 schrieb:
>   add r16,Low(k)
>   adc r17,High(k)
>
>   k=0...65535

Ooch Nöö.


Peter

von spess53 (Gast)


Lesenswert?

Hi

>Ooch Nöö.

Stimmt. Ein eklatanter Fehler.

Also nochmal:

ldi r18,Low(k)
Ldi r19,High(k)

add r16,r18
adc r17,r19

MfG Spess

von Simon K. (simon) Benutzerseite


Lesenswert?

Peter Dannegger schrieb:
> Dann mußt Du eben 2 8Bit Befehle machen.
> Um z.B. eine 16Bit Konstante zu addieren:
1
   subi r16, low (-12345)
2
   sbci r17, high(-12345)
>
>
> Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.