mikrocontroller.net

Forum: Compiler & IDEs zeiger an Funktion übergeben


Autor: C. S. (chappi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte einen Call- By Reference Funktionsaufruf 
starten....eigentlich kein Thema. Nur wenn ich die Adresse übergeben 
will, meckert er:

passaging argument 1 of 'check_ADC' from incompatible pointer type

meine Programm im groben sieht so aus:

#include <avr/io.h>
#include <util/delay.h>
#include <stdint.h>
#include <stdlib.h>
#include <inttypes.h>
#include <math.h>
  
//prototypes
void check_ADC(double *temp_x,uint8_t port,double left, double right);
double ADC_read(uint8_t channel);
void ADC_init(void);
uint8_t ERR = 0;

int main(void)
{
    ADC_init();
    double *temp1;
    [...]

    check_ADC (&temp1, 3 ,2.3 ,2.6);

    [...]

}

void check_ADC(double *temp_x,uint8_t port,double left, double right)
{
    *temp_x=ADC_read(port);
    _delay_ms(100);

    if(*temp_x < left || *temp_x > right)
       ERR += 1;
}

// initialize ADC
void ADC_init(void)
{
  uint16_t result;  

  ADMUX = (1<<REFS0);    // reference voltage = AVCC (5V)
  ADCSRA |= (1<<ADEN);    //activate ADC

//"dummy-readout"
  ADCSRA |= (1<<ADSC);        
  while(ADCSRA & (1<<ADSC));
  result = ADCW;
}

double ADC_read(uint8_t channel)
{
  // Function gets voltage at given ADC-PORT
  // and returns the value in volts.
  //
  ADMUX = (ADMUX &=~(0x1F)) | (channel & 0x1F);// PORT of multiplexer (choose channel)
  ADCSRA |= (1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
  ADCSRA |= (1<<ADSC);            // single conversion
  while(ADCSRA &(1 << ADSC));         // wait for result
  return (ADCW/1023.0)*5.0;          // return result
}

Das Problem ist der Funktionsaufruf "check_ADC". Dort kommt diese 
Fehlermeldung, wenn ich temp1 mit der Adresse übergebe (also einem " & " 
davor). Sobald ich das " & " wegnehme ist der Fehler nicht mehr da. Wie 
kommt das?

Autor: Frank M. (ukw) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
C. S. schrieb:
> int main(void)
> {
>     ADC_init();
>     double *temp1;
             ^
             Das Sternchen muss da weg.

Gruß,

Frank

Autor: C. S. (chappi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ahhhh natürlich!!!!! omg wie peinlich :D

danke!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.