Hallo zusammen, ich baue mir den Webserver von mikrocontroller.com zusammen und muss jetzt bei der 3Com Netzwerkkarte die I/O Port und IRQ einstellen. Ich habe mir eine Boot-Diskette mit MS-DOS 6.22 gebaut und die 3c5x9cfg.exe auf die Diskette kopiert. Wenn ich die aber ausführe ... bekomme ich den Fehler: A:\3c5x9cfg.exe Configuration and Diagnostic Program Version 3.2 Copyright (C) 1991-1999, 3Com Corporation. All Rights Reserved. run-time error R6003 - integer divide by 0 Was mache ich falsch? Kennt einer andere Tricks oder Quellen wie man das einfacher macht? Oder was man beachten muss? Danke.
1. http://support.microsoft.com/kb/98760/de 2. Versuch die Karte einfach mal OHNE sie zu konfigurieren. Eigentlich schreibt das 3c5x9cfg nur die Parameter ins EEprom der Netzwerkkarte. Das Einstellen der Parameter macht dann der Treiber zur Laufzeit. Evtl. musst du ein paar der (im Grunde genommen überflüssigen Abfragen) aus dem Initialisierungscode entfernen. Überflüssige Teile in 3c90x.c im init_3c5x9() sind z.B.
1 | // Every nic i have seen has "00" in the msb mac field.
|
2 | if((st & 0xff00) != 0) // No nic, i guess. |
3 | return 1; |
Das merkt man dann schon wenn keine Karte da ist. Selber schuld ;-)
1 | // Prüfung nicht unbedingt notwendig, da die I/O
|
2 | // per software (ID_PORT) eingestellt wird.
|
3 | if(st != ((0x310-0x200)>>4)) // 0x11 |
4 | return 2; |
Der hier Prüft ob 310h als IO im EEprom steht. Völlig überflüssig. in den folgenden Zeilen wird 310h eingestellt, egal ob's im EEprom steht oder nicht!
1 | // Hole einige informationen von der karte
|
2 | st = readreg(0x310); // Hersteller Kennung |
3 | printf("MfgtID: %04X\n", st); |
4 | if(st != 0x6D50) // 3Com ? |
5 | return 3; // no 3com |
6 | |
7 | // Produktkennung
|
8 | st = readreg(0x312); |
9 | printf_P(PSTR("Product ID: %04X\n"), st); |
10 | if(st != 0x9450) |
11 | return 4; // no 3c5x9 |
Wenn es keine 3com Karte ist... selber Schuld. Und die Product ID: Ich habe hier natürlich auch nicht alle revisionen der Karte rumliegen. Es geht auch mit Karten die nicht Revision 9450h sind. Der Code den es hier zum Download gibt sieht warscheinlich inzwischen etwas anders aus, (die Ausschnitte hier stammen aus dem "Urcode") müssten aber zu finden sein.
Hallo Werner B. erstmal danke für deine Antwort. Das es ohne Änderung der I/O Ports geht, freut mich. Ich werde es gleich mal ausprobieren ... habe noch Probleme den Sourcecode zu kompilieren. Ich habe hier im Forum gelesen das die A-Version nicht geht. Ich habe aber die Netzwerkkarte: 3Com 3C509B-TPO REV-A Also A. Geht die inzwischen auch? Hier der Kommentar: ---------------------------------------------------------------------- Autor: A.K. (Gast) Datum: 16.12.2006 19:33 Es geht nicht jede Version der 3c509, die B-Version geht, die A-Version nicht. Ich meine auch, dass man das DOS-Config-Programm bemühen muss, non-PNP oder so.
Die 3c509B geht, die 3c509 (ohne jeden Zusatz) geht leider aus technischen Gründen nicht (einige Register der Karte sind dort nur im 16-Bit Modus ansprechbar). Wenn 3c509B draufsteht ist die Chance größer als 90% dass es geht. Alle die ich bisher versucht habe (OK nur drei Stück, aber immerhin) sind gelaufen.
Kann ich den Webserver an einem Switch-Router anschließen ... oder geht es nur mit einem CrossOver Kabel direkt mit dem PC?
ProduktID : Aus dem EEProm auslesen. Das ist eine ganz normale 10 MBit Netzwerkkarte. Schließe sie an wo eine 10MBit Karte anschießbar ist. Allerdings nur TP, kein Koax oder AUI.
ES IST VOLLBRACHT!!! ES funktioniert!! Ohne I/O Ports einstellen. Danke dir Werner B. Ein Problem habe ich beim Clock, habe ich einfach ausgeschaltet. Trotzdem wüsste ich gerne warum. clock.o: In function `Start_Clock': e:\elektronikz\sourcecodecpp_v1.39_mmc_ib\source/clock.c:46: undefined reference to `timer_enable_int' make.exe: *** [main.elf] Error 1
Den Fehler kriege ich wenn ich mmc mit kompilieren will :-( Compiling: httpd.c avr-gcc -c -mmcu=atmega32 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=httpd.lst -std=gnu99 httpd.c -o httpd.o In file included from main.h:17, from httpd.c:8: c:/programme/winavr/bin/../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>." httpd.c: In function 'httpd': httpd.c:73: warning: pointer targets in passing argument 1 of 'printf' differ in signedness httpd.c:85: warning: pointer targets in passing argument 5 of 'Search_File' differ in signedness httpd.c:135: warning: pointer targets in passing argument 1 of 'Write_Ethernet_Frame' differ in signedness httpd.c:155: warning: pointer targets in passing argument 2 of 'Read_File' differ in signedness httpd.c:160: error: invalid lvalue in assignment httpd.c:180: warning: pointer targets in passing argument 1 of 'Write_Ethernet_Frame' differ in signedness make.exe: *** [httpd.o] Error 1 Was gefällt ihm da nicht? (unsigned long) tcp_socket->File_Size = (unsigned long) tcp_socket->File_Size - 512;
Sicherlich das Du im falschen Forum fragst! Wie wäre es, wenn du mal da nachsiehst wo das Projekt herkommt: http://mikrocontroller.cco-ev.de/forum/topic-311.html
@Richard Brose, sorry, ich hab' nur den 3c509 Teil verbrochen. Soweit ich weiss ist 'timer_enable_int' schon seit längerem aus der avr-libc rausgeflogen. Keine Ahnung wer noch damit arbeitet. Binde #include <compat/deprecated.h> in das clock.c ein, dann sollte es gehen. Langfristig solltest du den code aber überarbeiten und diese alte Funktion ersetzten. Siehe dazu die "obsolete" Funktionen in der Dokumentation zur avr-libc. Da steht auch drin was du für die Warungen aus httpd.c (mit mmc) ändern musst. Der Fehler "httpd.c:160: error: invalid lvalue in assignment": Siehe dazu Beitrag "use of cast expressions as lvalues is deprecated" Trifft es zwar nicht 100% aber es ist prinzipiell das gleiche Problem.
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.