Forum: Mikrocontroller und Digitale Elektronik Suche bei Keil uVision 4 die richtige Include Datei um die Funktion _sleep_ einzubinden


von Andreas (Gast)


Angehängte Dateien:

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.

von Andreas (Gast)


Angehängte Dateien:

Lesenswert?

hier noch die Screenshots:
shreenshot2: #include<sleep.h>
screenshot3: #include<windows.h>

von xyz (Gast)


Lesenswert?

Dumm ist nur wer dummes tut!

Wer soll bei dieser bescheuerten Fragestellung eine Antwort geben!

xyz

von AndreasH (Gast)


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!

von Andreas (Gast)


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.

von Andreas (Gast)


Lesenswert?

Hallo AndreasH
kannst du mir einen Screenshot machen bzw. den Quellcode hier eintippen.
DANKE

von AndreasH (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Andreas (Gast)


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

von R. W. (quakeman)


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

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.