Hallo,
für ein kleines Schulprojekt muss ich ein älteres, bereits bestehendes
Projekt abändern. Da die Änderungen minimal sind, wäre eine
Neuprogrammierung sinnlos.
Das alte Projekt wurde im AVRStudio 4 erstellt.
Nun habe ich auf verschiedene Arten versucht, die alten Dateien neu zu
compilieren (ohne Änderungen vorgenommen zu haben). Dabei habe ich vom
Compiler aber nur hunderte von Fehlermeldungen zurückbekommen, wenn sich
dieser überhaupt starten lässt. (Wer nicht so viel lesen will, kann die
ersten drei Methoden ruhig überspringen)
1. Methode:
Als erstens habe ich Versucht das Projekt ins AtmelStudio 6 zu
importieren. Zwar war das Importieren erfolgreich, jedoch kann ich den
Quelltext nicht mehr bearbeiten. Wenn ich das importierte Projekt
compilieren will meldet der Compiler:
1 | There is no build task for the current project
|
2. Methode:
Leider habe ich keine Erfahrungen mit dem AVRStudio 4. Trotzdem habe ich
mit die Version 4.18 heruntergeladen und installiert.
Das Öffnen des Projekts ist kein Problem, jedoch kann ich auch hier den
Quellcode nicht bearbeiten und den Menüpunkt "Build" nicht einmal
anklicken.
Misstrauisch wie ich bin, habe ich die Schuld auf Windows 8 geschoben
und hab mir direkt mal Windows XP aufgesetzt --> Doch auch hier das
selbe Fehlerbild.
3. Methode:
Da das Importieren des Projekts wohl nicht möglich ist, hab ich mir
einfach den Quellcode in ein neues AVRSudio 4 Projekt kopiert.
Wenn ich nun aber auch Build -> Build klicke, wird in der
Compiler-Ausgabe nur eine Zeile ausgegeben:
1 | Build startet 19.12.14 at 18:00:00
|
Danach passiert nichts mehr.
4. Methode:
Da das Problem bei der 3. Methode wahrscheinlich eher bei mir liegt,
habe ich das ganze Mal mit dem AtmelStudio 6 probiert.
Immerhin kann ich das Projekt hier kompilieren, wobei aber knapp 100
Fehler zurückgegeben werden.
Der Großteil der Fehler kommt davon, dass der Compiler den Variablen-Typ
"bit" nicht kennt. Der Kompilier meldet:
Nach kurzer Recherche habe ich dann folgende Lösung gefunden:
Einfach die Bibliothek "stdbool.h" einbinden und 'bit' durch 'bool'
ersetzen.
Dann kommt noch ein Fehler, dass es die Bibliothek "mega162.h" nicht
gibt. Diesen Fehler konnte ich auch beheben indem ich diese zwei
Bibliotheken einbinde:
1 | # include <avr/io.h>
|
2 | # include <avr/iom162.h>
|
Nun sind es nur noch drei Fehlerstellen (die jeweils zwei
Fehlermeldungen ausgeben) und genau an denen hänge ich mich gerade auf
:-(
Alle Fehler beziehen sich auf Interrupts:
1 | // USART1 Transmitter interrupt service routine
|
2 | interrupt [USART1_TXC] void usart1_tx_isr(void)
|
3 | {
|
4 | if (tx_counter1)
|
5 | {
|
6 | --tx_counter1;
|
7 | UDR1=tx_buffer1[tx_rd_index1];
|
8 | if (++tx_rd_index1 == TX_BUFFER_SIZE1) tx_rd_index1=0;
|
9 | };
|
10 | }
|
11 |
|
12 | // USART1 Receiver interrupt service routine
|
13 | interrupt [USART1_RXC] void usart1_rx_isr(void)
|
14 | {
|
15 | char status,data;
|
16 | status=UCSR1A;
|
17 | data=UDR1;
|
18 | if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
|
19 | {
|
20 | rx_buffer1[rx_wr_index1]=data;
|
21 |
|
22 | if (++rx_wr_index1 == RX_BUFFER_SIZE1)
|
23 | {
|
24 | rx_wr_index1=0;
|
25 | rx_buffer_overflow1=1;
|
26 | }
|
27 | if(rx_buffer1[rx_wr_index1-1] == 0x0A) // LF empfangen ACHTUNG: über Hyperterminal
|
28 | { // wird mit der ENTER-Taste CR LF gesendet
|
29 | Command_Received = 1;
|
30 | rx_wr_index1=0;
|
31 | }
|
32 | }
|
33 | }
|
34 |
|
35 | // Timer 1 output compare A interrupt service routine
|
36 | interrupt [TIM1_COMPA] void timer1_compa_isr(void)
|
37 | {
|
38 | // Timer 1 läuft als Sekundentimer (ohne Reset ca. 136 Jahre bis
|
39 | // 32-Bit-Variable mit Overflow reagiert)
|
40 | Timer1_Interrupt_1Sec++;
|
41 | }
|
Und hier die Fehler dazu:
1 | Error 3 expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
|
2 | Error 5 expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
|
3 | Error 11 expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
|
4 | Error 4 'USART1_TXC' undeclared here (not in a function)
|
5 | Error 2 'USART1_RXC' undeclared here (not in a function)
|
6 | Error 10 'TIM1_COMPA' undeclared here (not in a function)
|
Kann mir jemand weiterhelfen, oder weiß jemand wie ich die Projekte
richtig importiere, damit es gleich funktioniert?
Darf ich die ersten beiden Fehlerbehebungen überhaupt so verwenden??
Zum Abschluss noch ein paar Eckdaten zum Projekt:
Der verwendete Kontroller ist ein ATmega162.
Das Projekt dient praktisch als Schnittstelle zwischen einem Computer
und einem Messgerät. Der Kontroller bekommt vom Computer Befehle über
eine serielle Schnittstelle, wodurch er Messvorgänge startet und die
Ergebnisse zurückliefert. Das Messgerät wird ebenfalls über eine
serielle Schnittstelle angesteuert.
Das Programm läuft seit 2006 ohne Probleme. Da das alte Messgerät defekt
ist und kein gleichwertiges Ersatzgerät verfügbar ist, wird dieses durch
ein neues Messgerät ersetzt -> nun müssen zwei Befehle abgeändert
werden.
Vielen Dank im Voraus!
fabi