loetstelle.net
Lötstelle Userforum
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

daley_us or delay_ms!?

 
Neues Thema eröffnen   Neue Antwort erstellen    loetstelle.net Foren-Übersicht -> Mikrocontroller
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
masoud66



Anmeldungsdatum: 07.03.2009
Beiträge: 13

BeitragVerfasst am: Mi 08.Jun 2011 19:08:07    Titel: daley_us or delay_ms!? Bauteile finden Antworten mit Zitat

Hi guys!

I've a strange problem in CodeVision for programming a Ateml mega16.

it's the command:

void main () {
signed int d;
...
delay_us (d);

when i compiled the program, an error happened by this meaning only for red line:
constant integral expression required

why? Confused i've defined the range of "d" between 1 to 100.
it never accepts the delay_us command and shows above error!
but when i change it to delay_ms , it compiles completely without error.

why!? can i replace this code:
delay_ms(d/1000)
instead of
delay_us
? Rolling Eyes

please please reply in English! otherwise i should use translator... Sad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektron



Anmeldungsdatum: 16.03.2008
Beiträge: 1049

BeitragVerfasst am: Mi 08.Jun 2011 23:04:56    Titel: Bauteile finden Antworten mit Zitat

.........

Zuletzt bearbeitet von Elektron am Mi 04.Dez 2013 20:30:15, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
masoud66



Anmeldungsdatum: 07.03.2009
Beiträge: 13

BeitragVerfasst am: Do 09.Jun 2011 01:43:42    Titel: Bauteile finden Antworten mit Zitat

tanx for reply
your right. now i read in a book that delay_us command, can be used with a fixed number only! no variable. for example delay_us(100), NOT delay_us(d)

when i changed it to a fixed number, problem solved and no error happened.

but i should be able to control and change this delay time, in us scale!!! so i should use variables, which is forbidden and impossible!

a friend, suggested to use this code:

Code:
void my_delay_us(int n) {
while(n--) {
delay_us(10);
}
}


I've never used this form of command before! i can't induct it!
can u explain me?

can i use this code, and change D value freely??
this code was compiled successfully! but, does it work real time?
for waiting 100us. i choose the D=10.
Code:

     for (D=0 ; D<d ; D++)
     {
     delay_us(10);
     }
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektron



Anmeldungsdatum: 16.03.2008
Beiträge: 1049

BeitragVerfasst am: Do 09.Jun 2011 13:51:44    Titel: Bauteile finden Antworten mit Zitat

The problem is that the compiler wants to have a constant expression. You can trick him by casting to a constant expression:

Zitat:

int a = 100;
delay_us((const int)a);


This looks really weird, but it should make your program compile.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
derguteweka



Anmeldungsdatum: 18.12.2005
Beiträge: 1466

BeitragVerfasst am: Do 09.Jun 2011 18:48:43    Titel: Bauteile finden Antworten mit Zitat

Moin,

masoud66 hat folgendes geschrieben:
...this code was compiled successfully! but, does it work real time?
for waiting 100us. i choose the D=10.
Code:

     for (D=0 ; D<d ; D++)
     {
     delay_us(10);
     }

Yes and no. It might do something like you expected, but it's not accurate. The time, which is needed for the "for" statement (which results usually in some increment, compare and "branch-if-not-zero" assembler instructions) is not taken into account.

I doubt, that anyone is able to write proper code in C, with execution times this precisely predictable.
If you really need the accuracy in microseconds, imho you have to use assembler instead of C and look into the datasheet, how many cycles every asm instruction will take.

Gruss
WK
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sepp



Anmeldungsdatum: 11.01.2007
Beiträge: 73

BeitragVerfasst am: Fr 20.Jan 2012 14:49:59    Titel: Bauteile finden Antworten mit Zitat

use
Code:
_delay_us(1000) eg. _delay_ms(1000)


You forgot the first _

and you need to include this:
Code:
#include <util/delay.h>
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Anzeige






Verfasst am: Heute 11:13:03    Titel: Bauteile finden

Nach oben
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    loetstelle.net Foren-Übersicht -> Mikrocontroller Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen


Powered by phpBB 2.x © 2001, 2002 phpBB Group

Sie sind Besucher Nr. 1199753
©opyright by Markus Vohburger 2005 All Rights reserved