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.
hier noch die Screenshots: shreenshot2: #include<sleep.h> screenshot3: #include<windows.h>
Dumm ist nur wer dummes tut! Wer soll bei dieser bescheuerten Fragestellung eine Antwort geben! xyz
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!
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.
Hallo AndreasH kannst du mir einen Screenshot machen bzw. den Quellcode hier eintippen. DANKE
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.