Forum: Mikrocontroller und Digitale Elektronik AVRStudio4 --> AtmelStudio6 Probleme


von fabi (Gast)


Lesenswert?

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:
1
unknown type name 'bit'
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

von Björn S. (Gast)


Lesenswert?

ISRs schreibt man jetzt mit dem Makro
ISR()
Die Makros für die Vektoren haben auch neue Namen bekommen und enden 
jeweils mit _vect, orientieren sich jedoch stark am Datenblatt.
TIM1_COMPA könnte jetzt TIMER1_COMPA_vect heißen.
Statt:
interrupt [USART1_RXC] void usart1_rx_isr(void)
{

also

ISR(TIMER1_COMPA_vect)
{

#include <avr/interrupt.h>
nicht vergessen.

Ich kann mich aber nicht erinnern, das es in Version 4 noch so war, ich 
hätte eher auf 3 getippt. Kann mich auch täuschen. Gab da auch noch eine 
Sache mit Interrupts innerhalb der Interruptroutine und dem alten 
VECTOR() ggü. INTERRUPT() bei der Portierung.

von Holger74 (Gast)


Lesenswert?

Hast du zusätzlich zum AVRStudio4 WinAVR installiert?
Im AVRStudio4 ist C noch "optional".

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
Noch kein Account? Hier anmelden.