Forum: Mikrocontroller und Digitale Elektronik Compilerfehler beim Beschreiben der ADC Register


von Axel K. (axel)


Lesenswert?

Hi!

Bin gerade etwas ratlos. Ich arbeite mit AVR Studio4 und progge in C.

#include <avr/io.h>
#ifndef F_CPU
#define F_CPU 8000000UL     /* Quarz mit 1 Mhz */
#endif
#include <util/delay.h>
#include <util/twi.h>
#include <avr/interrupt.h>
#include "lcd-routines.h"
#include "lcd-routines.c"
#include <stdlib.h>


//TWI SLAVE EINSTELLUNGEN
#define TWI_BIT_RATE 255
#define TWI_PRESCALER 3
#define TWI_EIGENE_ADRESSE 127//eigene SLAVE ADRESSE 1...127
#define TWI_ADRESSE_SLAVE 100
#define TWI_GENERAL_CALL_enable 1 //1=Generral Call enabled / 0=disabled


volatile unsigned char TWI_DATENEMPFANG_char;
unsigned int TWI_DATENEMPFANG_int;
char string_itoa_temp[11];
volatile unsigned char TWI_BUSY_FLAG = 0;

//ADC 
konfigurieren----------------------------------------------------------- 
---
ADMUX = 0b01000000;




m.E. sind doch alle Register in io.h definiert. Die letzte Zeile bringt 
jedoch komische Fehlermeldungen:

../Display.c:27: error: expected identifier or '(' before 'volatile'
../Display.c:27: error: expected ')' before '(' token
make: *** [Display.o] Error 1
Build failed with 2 errors and 0 warnings...

Koennt ihr damit etwas anfangen?

gruss Axel

von Alfred (Gast)


Lesenswert?

Hallo Axel,

in Deinem Programm fehlt die main() Funktion. Eine Zuweisung wie ADMUX = 
...
kannst Du nur innerhalb einer Funktion machen.

Probier mal:
1
int main(void) 
2
{
3
  ADMUX = 0b01000000;
4
}

Beste Grüße

Alfred

von Mobius (Gast)


Lesenswert?

Hi,
Ist das der gesamte Code? Ich denke nicht, oder? Weil eine Zuweisung 
außerhalb einer Funktion wird nicht hinhauen. Wenn es das nicht ist, 
poste mal bitte den gesamte Code (inc. Funktion). Aber wenn ich ehrlich 
sein soll, der Compiler-Fehler deutet genau auf meine Frage (der 
beschwert sich, dass er keinen Funktionskopf findet).

Ansonsten, bitweise zuweisen, empfinde ich (ganz persönlich) als einen 
Fehler. Es ist a) unübersichtlich, b) fehleranfällig (man bedenke was 
eine 0 zu wenig/zu viel alles anrichtet) und c) hilft nichts um den Code 
zu verstehen. Verwende doch bitte bit-masken, entweder (1<<ADEN) oder 
_BV(ADEN). Das hilft beim Lesen und der Code wird mit 90% 
Wahrscheinlichkeit auch auf einem ATMEGA laufen, der das ADEN bit mal 
woanders hat. Und der Compiler (zumindest alle ab avr-gcc 4.0) ist 
"klug" genug um das als eine Zuweisung mit einer Konstanten 
hinzukriegen. Wenn nicht, wechsle mal den Compiler ;).

gruß
Mobius

von Muetze1 (Gast)


Lesenswert?

Das Mittel der Wahl zum Schreiben von unleserlichen Programmen ist 
immer, in Kommentaren zu lügen. Beschreiben Sie alles, nur nicht das, 
was der Code macht.
1
#define F_CPU 8000000UL     /* Quarz mit 1 Mhz */

von Muetze1 (Gast)


Lesenswert?

OMG, geht ja noch weiter. Wozu sollte man um alles in der Welt ein C 
File inkludieren? Hast du nicht schon genug Probleme mit dem Code?
1
#include "lcd-routines.c"

von Axel K. (axel)


Lesenswert?

Guten Morgen!

Vielen Dank fuer die schnelle Hilfe!  Ja, der Code geht noch weiter 
aber ist schon relativ lang, deswegen habe ich ihn nich ganz gepostet. 
Ich denke das das der Fehler ist (Zuweisung nicht in main). Bins noch 
von Assembler und Bascom gewoehnt und bislang habe ich nur C und C++ auf 
Windowsrechner geproggt.  Dummer Fehler ))

 @muetze1: Wieso ist das ein Problem wenn man c files includiert?  Wenn 
man zb bei 2000Zeilen Code ist dann isses doch ganz normal das man 
zwecks der uebersicht usw etwas auslagert..

gruss

von (prx) A. K. (prx)


Lesenswert?

Jo, aber das wird dann üblicherweise nicht included, sondern separat 
übersetzt und zusammengelinkt.

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.