Suche bei Keil uVision 4 die richtige Include Datei um die Funktion _sleep_ einzubinden

Gast #2940718
Lesenswert?

Hi,
http://www.keil.com/support/man/docs/uv3/uv3__sleep_.htm

Ich bring es nicht hin bei Keil uVision4 die obige Funktion auszuführen.
Es fehlt die richtige Include Datei. Ich hab hier schon gesucht.
Habs mit den Include Dateien versucht:
#include <windos.h>
bzw.
#include <sleep.h>
beides ohne Erfolg.

Ich dank euch.
Angehängte Dateien:
Gast #2940752
Lesenswert?

Hi,
 also bei mir hat : _sleep_(1000) funktioniert.

Aber nur wenn er so verwendet wird wie Du auch der Anleitung entnehmen 
kannst.
Es ist ein Befehl denn man im Debugger verwenden kann und nicht in einer 
Sourcedatei für Dein Programm.

mfg
Andreas

PS: windows.h gibt es bei Keil nicht nur auf dem PC unter Windows!
Gast #2940756
Lesenswert?

was ist bitte an der Frage dumm?
Hättest du mal den Link von Keil gelesen und die Screenshots angeschaut 
dann wüßtest du, dass das eine ganz normal berechtigte Frage ist.

Dann sind die hier auch alle dumm!
Weil derjenige hat schon mal diesselbe Frage gestellt:
Beitrag "unter C die Funktion Sleep() nutzen"

Anonym Leute hier zu bleidigen ist absolut keine Kunst.
Dumm ist nur derjenige, der sich durch Beleidigungen in den Mittelpunkt 
stellen möchte, weil er sonst nichts hat. Klugheit und Weisheit hat 
derjenige, der sein Wissen Preis gibt, ohne zu prallen.
Gast #2940773
Lesenswert?

Hi,

es sollte nicht beleidigend gemeint sein. Wenn es so aufgefasst wurde 
tut es mir leid.

Du mußt die Anweisung _sleep_(1000) einfach in der Komandozeile des 
Debuggers eingeben oder aber in einem entsprechenden Script Datei.

Fall Du diesen Befehl in Deinem Sourcecode Deines Programmes benutzen 
möchtes, funktioniert dies leider nicht

mfg
Andreas
Persönliche Seite #2940814
Lesenswert?

Um herauszufinden, in welcher zu einem Compiler gehörenden Headerdatei 
die Deklaration einer Funktion enthalten ist, hat man früher das Konzept 
der Volltextsuche verwendet, mit Windows-Bordmitteln also in einem 
Konsolenfenster ("Eingabeaufforderung") die Kommandos find bzw. 
findstr verwendet:
1
findstr /s /c:"_sleep" *.h

Das Problem bei dieser Technik ist, daß sie immer noch funktioniert.

Welchen Sinn es hat, in einem Compiler für einen µC Headerdateien zu 
verwenden, die ganz offensichtlich mit dem Betriebssystem Windows zu tun 
haben, will ich hier nicht weiter kommentieren.
Gast #2941006
Lesenswert?

AndreasH schrieb:
> Hi,
>
> es sollte nicht beleidigend gemeint sein. Wenn es so aufgefasst wurde
> tut es mir leid.
Du brauchst dich nicht angesprochen fühlen. Schämen sollte sich hier nur 
xyz!
>
> Du mußt die Anweisung _sleep_(1000) einfach in der Komandozeile des
> Debuggers eingeben oder aber in einem entsprechenden Script Datei.
Könntest du mir bitt einen Screenshot machen,damit ich es einfacher 
nachvollziehen kann. Funktioniert die Delay außerhalb des Quellcodes?
Also ich wäre dir schon sehr dankbar, wenn du mir etwas visuelles zeigen 
könntest. Danke
Gibt es bei Mikrovision 4 sonst keine Funktion bei mit der man auf 
einfachste und genauste Weise Delays von 0.1s bis 0.7 erzeugen kann?
> Falls Du diesen Befehl in Deinem Sourcecode Deines Programmes benutzen
> möchtes, funktioniert dies leider nicht
Ok, das ist dann sehr schade.
> mfg
> Andreas
#2943708
Lesenswert?

Wenn ich das in dem einen Screenshot richtig sehe, dann arbeitest du mit 
dem LPC935. Da hätte ich für dich einen alternativen Vorschlag für eine 
delay Funktion.

Falls du den internen RTC nicht benötigst kannst du damit einen sehr 
genauen delay Timer erstellen. Bei internem 7,3728MHz Takt geht der 
Bereich der Verzögerung von 17,361µS bis 1,137s.

Hier der Code den ich verwende:
1
// RTC Timeout Werte definieren
2
#define RTC_RELOAD_2_5MS 144
3
#define RTC_RELOAD_5MS 288
4
#define RTC_RELOAD_10MS 576
5
#define RTC_RELOAD_20MS 1152
6
#define RTC_RELOAD_30MS 1728
7
#define RTC_RELOAD_40MS 2304
8
#define RTC_RELOAD_50MS 2880
9
#define RTC_RELOAD_60MS 3456
10
#define RTC_RELOAD_70MS 4032
11
#define RTC_RELOAD_80MS 4608
12
#define RTC_RELOAD_90MS 5184
13
#define RTC_RELOAD_100MS 5760
14
#define RTC_RELOAD_200MS 11520
15
#define RTC_RELOAD_300MS 17280
16
#define RTC_RELOAD_400MS 23040
17
#define RTC_RELOAD_500MS 28800
18
#define RTC_RELOAD_600MS 34560
19
#define RTC_RELOAD_700MS 40320
20
#define RTC_RELOAD_800MS 46080
21
#define RTC_RELOAD_900MS 51840
22
#define RTC_RELOAD_1000MS 57600
23

24
void v_Init_RTC() {
25
  // RTC konfigurieren bei internem RC Oszillator mit 7,3728 MHz
26
  RTCCON = 0x60;
27
}
28

29
// Schleife um eine gewisse Zeit zu warten
30
void v_Sleep_RTC(unsigned int uiSleepTime) {
31
  RTCL = uiSleepTime & 0xFF;
32
  RTCH = uiSleepTime >> 8;
33
  RTCCON = RTCCON | 1;
34

35
  // Unterlauf Flag abfragen
36
  while (!(RTCCON & 0x80));
37

38
  // Timeout Zähler stoppen und Unterlauf Flag löschen
39
  RTCCON = RTCCON & 0x7E;
40
}

v_Init_RTC() rufst du einmal in deinem Hauptprogramm auf. Und wenn du 
dann z.B. ein delay von 100ms brauchst rufst du 
v_Sleep_RTC(RTC_RELOAD_100MS) auf. Das funktioniert sehr zuverlässig, 
aber die Werte in den defines hängen natürlich vom verwendeten Takt ab. 
Meine Werte basieren auf dem internen RC Oszillator.

Ciao,
     Rainer

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren