mikrocontroller.net

Forum: Compiler & IDEs delay_us kann ich nicht messen im avrstudio


Autor: anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo, ich wollte mit dem avrstudio dieses programm testen.
wenn ich den breakpoint setzen möchte, geht nur bei der delay_ms , nicht 
bei der delay_us.
wenn ich ihn bei delay_us setzen will , springt er automatisch  zu 
nächsten delay_ms?
die delay.c habe ich mit in der makefile eingebaut:
SRC = $(TARGET).c delay.c

warum das?

#include <avr/io.h>
#include "delay.h"

int main(void)
{

 delay_us(1);

 delay_us(7);

 delay_us(8);

 delay_ms(3);

 delay_ms(14);

}


die delay.h :
#include <avr/io.h>

static inline void delayloop16(uint16_t count)
{
  asm volatile (  "cp  %A0,__zero_reg__ \n\t"  \
                     "cpc %B0,__zero_reg__ \n\t"  \
                     "breq L_Exit_%=       \n\t"  \
                     "L_LOOP_%=:           \n\t"  \
                     "sbiw %0,1            \n\t"  \
                     "brne L_LOOP_%=       \n\t"  \
                     "L_Exit_%=:           \n\t"  \
                     : "=w" (count)
           : "0"  (count)
                   );
}
#define delay_us_conv(us) 
((uint16_t)(((((us)*1000l)/(1000000000/F_CPU))-1)/4))
#define delay_us(us)    delayloop16(delay_us_conv(us))

void delayloop32( uint32_t l); // not inline
#define delay_ms_conv(ms) ( (uint32_t) (ms*(F_CPU/6000l)) )
#define delay_ms(ms)  delayloop32(delay_ms_conv(ms))

die delay.c :
#include "delay.h"

void delayloop32(uint32_t loops)
{
   _asm_ volatile ( "cp  %A0,__zero_reg__ \n\t"  \
                     "cpc %B0,__zero_reg__ \n\t"  \
                     "cpc %C0,__zero_reg__ \n\t"  \
                     "cpc %D0,__zero_reg__ \n\t"  \
                     "breq L_Exit_%=       \n\t"  \
                     "L_LOOP_%=:           \n\t"  \
                     "subi %A0,1           \n\t"  \
                     "sbci %B0,0           \n\t"  \
                     "sbci %C0,0           \n\t"  \
                     "sbci %D0,0           \n\t"  \
                     "brne L_LOOP_%=            \n\t"  \
                     "L_Exit_%=:           \n\t"  \
                     : "=w" (loops)              \
           : "0"  (loops)              \
                   );                             \


  return;
}

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstens kann AVRStudio von Haus aus kein C. Du hast also vermutlich 
den WINAVR installiert. Schön, und was gibt es bei der Nutzung von 
WINAVR für einen Grund, irgendwelche selbst zusammengestückelten 
delay-Funktionen zu benutzen und nicht die in der util/delay.h 
vorhandenen?

Abgesehen davon: Es ist bekannt, dass es Probleme mit dem Simulieren der 
delay-Funktionen gibt...

Autor: anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. ich habe es als cof vorliegen, wie man es mit dem mfile festlegen 
kann, welches debugformat für welches avr-studio läuft.

2. wenn ich die delay_us rausnehme, läuft der debug-modus super mit den 
zu erwarteten zeiten.

3. diese delay ist aus den heiligen hallen hier von euren besten 
starprogger.

4. dieses kann ich nicht bestätigen, meine  delay-zeiten laufen alle zur 
zufriedenheit.
....Es ist bekannt, dass es Probleme mit dem Simulieren der 
delay-Funktionen gibt...

mfg

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.