suche jemanden der mir bei meinen problem etwas auf die sprünge helfen könnte. derjenige sollte sich im httpserv projekt etwas auskennen. dort ist eine baud von 115200 eingestellt und ich sollte sie halbieren das geht über u2x, den auf 0 setzten. dfas ist mir klar nur ich lese mich durch sämtliche dokus durch und finde den übergang zu meinem projekt nicht. es ist egal wo und wie ich die werte verändere sie haben keine auswirkung oder sie werden nicht ausgeführt. ich bräuchte da eventuel eine erklärung warum nicht oder wo ich da am besten ansetzte. keine anleitung wie es gemacht wird nur eine hilfestellung!! dbaur
Welcher µC? Wie sieht der Sourcecode an dieser Stelle aus? Welche Taktrate benutzt dein µC?
Habe mir jetzt die Sourcen von Arthernet angesehen. Die Einstellung der Baudrate ist über die Bibliotheksfunktion _ioctl() gekapselt und die direkte Manipulation der UART-Register bringt dir nichts. httpserv.c (bzw. Originalversion httpserv.c__)
1 | int main(void) |
2 | {
|
3 | // Definieren der Wunschbaudrate
|
4 | u_long baud = 57600; // bzw. 115200; in httpserv.c__ |
5 | u_char i; |
6 | |
7 | /*
|
8 | * Initialize the uart device.
|
9 | */
|
10 | #if defined(__AVR__) || defined(WOLF)
|
11 | NutRegisterDevice(&devDebug0, 0, 0); |
12 | freopen("uart0", "w", stdout); |
13 | #else
|
14 | NutRegisterDevice(&devDebug2, 0, 0); |
15 | freopen("sci2dbg", "w", stdout); |
16 | #endif
|
17 | |
18 | // Setzen der Wunschbaudrate
|
19 | _ioctl(_fileno(stdout), UART_SETSPEED, &baud); |
20 | ...
|
D.h. in der modifizierten Source ist die Baudrate bereits auf 57600 halbiert. Du brauchst die Source bloss noch so zu übernehmen. Allerdings musst du im Hinterkopf haben, dass aus dem angegebenen Wunschwert und der Taktrate die Werte für die Baudratenregister der UART berechnet werden. Je nach Taktrate deines µC können dabei Werte herauskommen die einen mehr oder minder grossen Baudratenfehler besitzen. Es kann sich lohnen einen Quarz mit "krummen" Frequenzen zu benutzen, bei dem Baudraten mit möglichst geringem Fehler möglich sind - einen sog. Baudratenquarz. Welche Kombinationen von Baudrate/Taktrate gut geeignet sind, steht typischerweise im µC Datenblatt/Manual z.B. in den Tabellen "Examples of Baudrate Setting"
Rein Interesse halber: Du machst den ganzen Kram ja für eine Abschlussarbeit, oder? Wofür denn? Schule, Ausbildung, Studium?
re timo ja das ist mein abschlussprojekt meiner weiterbildung als elektrotechniker dbaur
RE: stefan hab das übernommen: nur beim builden mekert er mir: !E F:\nut\app\httpd\httpserv.c(326): undeclared identifier `devDebug2' !E F:\nut\app\httpd\httpserv.c(326): type error in argument 1 to `NutRegisterDevice'; found `pointer to int' expected `pointer to struct _NUTDEVICE' F:\icc\bin\imakew.exe: Error code 1 Done: there are error(s). Exit code: 1 kann ich aus dem 'devdebug2' auch 'devdebug1' machen?
>kann ich aus dem 'devdebug2' auch 'devdebug1' machen?
Verstehst du eigentlich, was du da tust?
Wenn ich mir deine anderen Threads ansehe, dachte ich bisher eigentlich
du bist ~12 Jahre alt, die Prüfung zum Techniker überrascht mich dann
doch etwas.
Du hast vermutlich (sehe deine Sourcezeile um 326 nicht) nicht die richtigen Defines gesetzt. Der devdebug2 Fall ist in meiner Source aktiv, wenn _AVR_ und WOLF nicht definiert sind.
1 | int main(void) |
2 | {
|
3 | u_long baud = 57600; |
4 | u_char i; |
5 | |
6 | /* init LED */
|
7 | DDRB |= (1<<PB5); |
8 | PORTB &= ~(1<<PB5); /* "visual alive" */ |
9 | |
10 | /*
|
11 | * Initialize the uart device.
|
12 | */
|
13 | #if defined(__AVR__) || defined(WOLF)
|
14 | NutRegisterDevice(&devDebug0, 0, 0); |
15 | freopen("uart0", "w", stdout); |
16 | #else
|
17 | NutRegisterDevice(&devDebug2, 0, 0); // LINE 559 |
18 | freopen("sci2dbg", "w", stdout); |
19 | #endif
|
20 | _ioctl(_fileno(stdout), UART_SETSPEED, &baud); |
21 | NutSleep(200); |
22 | printf("\n\nNut/OS %s HTTP Daemon...", NutVersionString()); |
devdebug2 wäre für ein UART2, ich kenne jedoch nur AVR mit UART0 und max. UART1. Du kannst sicher devdebug2 oder devdebug0 in devdebug1 ändern. Dann würde stdout auf UART1 kommen. Setzt voraus, dass dein AVR UART1 hat. Ich würde aber zuerst dem Problem nachgehen, wieso in deiner Entwicklungsumgebung der Sourceteil übersetzt wird, der nicht für AVR angepasst ist.
Ja okay, nachfragen ist natürlich immer nicht schlecht, aber ich denke ich bin nicht der einzige der verwundert ist, dass du SO viel fragen musst. War dafür nicht die Zeit deiner Weiterbildung gedacht? Habt ihr da denn überhaupt nichts mit µC Programmierung gemacht? Dir scheinen einfach sehr viele Grundlagen zu fehlen.
nein speziell µc haben wir nichts gemacht. und nur die wichtigsten grundlagen in c haben wir durchgemacht. ich weis das c nicht ganz mein fall ist. dafür kann ich allerdings nicht viel. und das projekt muss gemacht werden. ob ich das kann oder nicht. und das ich es mit fragen formulieren auch nicht wirklich drauf hab kann ja jeden sehen. hab halt nicht die weisheit gefressen so wie manche das von jemandem als grungvorraussetzung halten. dbaur
baur wrote: > nein speziell µc haben wir nichts gemacht. und nur die wichtigsten > grundlagen in c haben wir durchgemacht. > > ich weis das c nicht ganz mein fall ist. dafür kann ich allerdings nicht > viel. und das projekt muss gemacht werden. ob ich das kann oder nicht. > > und das ich es mit fragen formulieren auch nicht wirklich drauf hab kann > ja jeden sehen. hab halt nicht die weisheit gefressen so wie manche das > von jemandem als grungvorraussetzung halten. Niemand verlangt hier das man die Weisheit mit Löffeln gefressen hat. Wenn allerdings eine Abschlussarbeit das Herstellen eines Aluteils beinhaltet und dann kommt die Frage wie rum man denn die Feile zu halten habe, dann ist das etwas befremdlich.
also gut dan gebe ich es auf. noch schöne tage ohne mich dbaur
Es geht wirklich nicht um Weisheit! Entschuldige, wenn ich dir zu nahe trete, aber deine Fragestellung ist größtenteils unter aller Sau! Wenn du dir dieses Problem selbst bewusst bist, musst du dich umso mehr bemühen die Fragen vernünftig zu stellen und dich nicht einfach damit abfinden, dass du es nicht kannst, und gekränkt sein, wenn jemand das Thema anspricht. Du musst Fragen so stellen, dass ein "Unbeteiligter" dir nur durch lesen der Frage eine Antwort geben kann. Das heißt, es müssen ALLE relevanten Informationen darin enthalten sein und du selbst musst GANZ genau wissen, was du erfragen möchtest und zwar nicht Marke: "Das geht alles nicht, was mache ich falsch?". Als Techniker ERWARTET man einfach von dir solche grundlegenden Fertigkeiten in deinem späteren Arbeitsleben, du tust also gut daran, dich in diesem Gebiet DEUTLICH zu verbessern!
Naja, da sich der inhaltliche Teil mit dem Ausstieg des Ursprungsposters ja erledigt hat, kann man ja mal ein wenig OT werden. Ich lese hier zwar nur passiv mit, aber mir ist in letzter Zeit auch immer mehr aufgefallen, dass viele Fragen zu irgendwelchen Abschlussarbeiten/Diplomarbeite/... kommen. Die Frager haben meist gar keine oder kaum vorhandene Kenntnisse zu den verwendeten Mikrocontrollern oder den Problemen drum herum. Ich verstehe das nicht, ist denn nicht deren Ausbildung davor(!) dafür zuständig die Grundlagen zu lernen. Zumindest das Lesen eines Datenblattes oder div. Webseiten sollte doch drin sein - und das hat absolut nichts mit Weisheit fressen zu tun (finde ich!). Konkrete Fragen stellen kann man dann immer noch. Aber wer im Glashaus sitzt soll nicht mit Steinen werfen. Ich soll im Rahmen meiner Tätigkeit (FH) demnächst auch ein paar Studies die Grundlagen zur C-Programmierung am Beispiel eines kleinen Atmels beibringen. Gar nicht so einfach. Schönen Tag noch....
Mach einfach einen Thread auf und wir machen das für Dich :)
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.