µC Typ: AT90S2323 Takt: 10 MHz Quarz Programmer: Atmel AVRISP Compiler: WinAVR ----------------- Problem 1: _delay_ms() Befehl und Taktfrequenz Egal welche Taktfrequnz ich im Makefile angebe, die Zeiten die ich beim delay-Befehl angebe, stimmen nachher nie. Beim AT90S2323 gibt es keine Fusebits, mit denen ich den Takt einstellen kann, denn den AT90S2323 kann ich nur mit einem ext. Quarz betreiben. Merkwürdigerweise, stimmen die Zeiten, wenn ich z.B. einen ATtiny 26 intern mit 1 MHz takte, egal was ich im Makefile eintrage. Muss ich noch irgendwo die Taktfrequenz eintragen, ausser im Makefile, oder geht der delay-Befehl nur mit 1 MHz ??? Problem 2: -- bzw ++ Wenn z.B. das hier schreibe: ... t=10 for(;;) { t--; //mach irgendwas; if (t==0) goto next; } next: .... Sobald ich ++ oder -- zum zählen benutze, wächst mein Code plötzlich auf bis zu das 6 fache. Das verstehe ich irgendwie nicht.
wenn du t als float/real/double definiert hast (Gleitpunktzahl) dann kann ich mir das vorstellen (MathematikLibrary wird dann mit eingebunden) Gruss
Das erste Problem hat sich erledigt. (siehe: Delay -Problem GCC Forum) Das zweite, verstehe ich immer noch nicht.
Autsch, das tut weh. (Schmutziger geht die Programmierung ja ncht mehr.) for(;;) { t--; //mach irgendwas; if (t==0) goto next; } das macht man doch besser so: for(t = 0, t <= 10, t++) { blubber schwall; } goto wird in der C-Programmierung nicht benutzt. Zur Erklärung der for-Schleifenparameter: das t = 0 setzt den Startwert der Variable beim Aufruf der Schleife fest. Der zweite Parameter setzt deinen Endwert fest und der dritte gibt an, wie gezählt werden soll (pre-, post-, increment oder decrement) So durchläuft er die Schleife so oft, bis t = 10.
Ursprünglich hatte ich meinen ersten Code in einer switch-case Konstruktion gehabt, aber irgendwie wollte die nicht so ganz funzen. Wenn ich den Code noch finde, dann poste ich ihn mal.
Nach meinem ANSI-C-Buch ist es egal, ob man in einer For-Schleife t++ oder ++t schreibt, es wird auf alle Fälle als postincrement aufgelöst. Das mit dem goto ist keine gute Technik, aber wenn es ist erlaubt laut C. Also nict so laut schimpfen. Die obige Schleife lässt sich etwas eleganter auflösen: t=10; do { //irgendwas } while(t); oder wenn ein Dekrement in der nicht in den Anweisungen stattfindet: t=10; do { //irgendwas } while(--t); Das garantiert eine bestimmte Anzahl Durchläufe. MW
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.