mikrocontroller.net

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


Autor: Simon T. (narfinus)
Datum:

Bewertung
0 lesenswert
nicht 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
ldi temp,LOW(RAMEND)  
out SPL, temp      
ldi temp,HIGH(RAMEND)  
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!

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Simon T. (narfinus)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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:
  subi r16, low (-12345)
  sbci r17, high(-12345)


Peter

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

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

Ooch Nöö.


Peter

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Simon K. (simon) Benutzerseite
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.