Compilerfehler beim Beschreiben der ADC Register

OP #1890978
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
Gast #1890985
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
Gast #1890994
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
Gast #1891029
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 */
OP #1891117
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren