www.mikrocontroller.net

Forum: Compiler & IDEs Pointer problem


Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pointer, arrgh! Jetzt probiere ich schon ein Weiler herum, und verstehe 
nicht, wieso hier eine Warnung ausgegeben wird, die scheinbar auch noch 
zu undefinierten Zuständen in meinem Programm führt:
uint8_t*  int2buf(uint8_t *buffer,int wert )
{
  *buffer++=(uint8_t)wert&0xFF; // low Byte
  *buffer++=wert>>8;
  return buffer;          
}

...

uint8_t* p1;
...
p1=int2buf( ui8Buffer1,ENCODERLAENGE*2 );

Das ist die Warnung:
../chEasyCom.c:179: warning: assignment makes integer from pointer 
without a cast

Hat jemand eine Idee?

Gruß,
chris

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat an der Stelle

> p1=int2buf( ui8Buffer1,ENCODERLAENGE*2 );

Der GCC schon die Definition

> uint8_t*  int2buf(uint8_t *buffer,int wert )

oder den Prototyp der Funktion schon gesehen?

Oder arbeitet GCC in der richtigen Annahme, dass die bisher unbekannte 
Funktion int2buf( ui8Buffer1,ENCODERLAENGE*2 ) lt. Standard zwei int 
Argumente bekommt und dass jetzt der (vermutlich uint8_t * definierte 
ui8Buffer1) implizit zum int gecastet werden muss, was 
dankenswerterweise eine Warnung auslöst?

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Hilfe.

>oder den Prototyp der Funktion schon gesehen?
Die Funktion wird in main verwendet und ist weiter oben definiert.

> int2buf( ui8Buffer1,ENCODERLAENGE*2 ) lt. Standard zwei int
Argumente bekommt

Der Buffer ist ganz oben definiert:
uint8_t ui8Buffer1[BUFFERLENGTH];
die groß geschriebenen Werte sind Konstanten. Also gibt's doch 
eigentlich nix zu meckern, oder?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nö.

//
// AVR Studio 4,13 VR 20071221
// ATmega8
// -O0
//

#include <avr/io.h>
#include <inttypes.h>

#define BUFFERLENGTH  23
#define ENCODERLAENGE 42

uint8_t ui8Buffer1[BUFFERLENGTH];

uint8_t*  int2buf(uint8_t *buffer,int wert )
{
  *buffer++=(uint8_t)wert&0xFF; // low Byte
  *buffer++=wert>>8;
  return buffer;          
}

int main(void)
{
  uint8_t* p1;
 
  p1=int2buf( ui8Buffer1,ENCODERLAENGE*2 );
  
  while(1);
}


Meckert auch nicht:

Build started 23.3.2008 at 19:36:54
avr-gcc.exe  -mmcu=atmega8 -Wall -gdwarf-2 -O0 -MD -MP -MT chris2.o -MF dep/chris2.o.d  -c  ../chris2.c
avr-gcc.exe -mmcu=atmega8  chris2.o     -o chris2.elf
avr-objcopy -O ihex -R .eeprom  chris2.elf chris2.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex chris2.elf chris2.eep
d:\WinAVR\bin\avr-objcopy.exe: --change-section-lma .eeprom=0x00000000 never used

AVR Memory Usage
----------------
Device: atmega8

Program:     226 bytes (2.8% Full)
(.text + .data + .bootloader)

Data:         23 bytes (2.2% Full)
(.data + .bss + .noinit)


Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan,

vielen Dank, hab den Fehler gefunden. Bin in eine andere Zeile verutscht 
und habe dort unsigned int statt int übergeben ( Bin wohl zulange vor 
dem Rechner gesessen.

Gruß,
chris

Autor: Hubert Nokia (ribinger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo mein Name ist Hubert,
Ich habe erst vor einigen Wochen mit AVR programmieren angefangen.
Ich arbeite mit dem AVR-Studio.
Mein Problem:
Ich versuche mich mit dem programmieren erstmal mit den Grunddingen
anzufreunden und scheitere abert beim verwenden eines Buffers.
Ich habe es gerade geschaft, mit Realterm eine bestimmte Led auf meinem
Board einzuschalten.
Ich weiß nicht mehr weiter und ich weiß auch nicht, wo ich mir die
benötigten Informationen holen soll.

Ich möchte folgendes programmieren:

Wenn ich die Taste 1 - Taste 4 drücke sollten die Zahlen 1-4 im Buffer
gespeichert werden und mit empfangen eines ? vom Realterm sollen die
Zahlen der Reihenfolge der gedrückten Tasten ausgegeben werden.

z.B.: So !

ich drücke Taste 1 dann Taste 3 dann Taste 2 usw...
und wenn ich über Realtrum ein ? sende dann:

?1?3?2...  oder ?132...

So sollte es vileicht aussehen

Könnt ihr mit bitte helfen?
Ohne irgendeiner Hilfe komme ich nicht mehr weiter.

MFG Hubert

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hubert Nokia schrieb:

> Ohne irgendeiner Hilfe komme ich nicht mehr weiter.

Du brauchst vor allen Dingen ein Buch.

> Könnt ihr mit bitte helfen?

Was du brauchst ist ein Array, in dem du die zu den Tasten gehörenden 
Werte zwischenspeicherst. Arrays finden sich in deinem 
(nichtvorhandenen) Buch ungefähr auf Seite 40 (von 250).


Zeig mal was du bisher hast, damit wir deine Hardware ein wenig kennen 
lernen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wenn du das nächste mal einen Haufen alter Threads hijackst, wirst 
du dich wundern, wie schnell ich deine Anfrage rausgelöscht habe. Fang 
einen neuen Thread an und gut ists.

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.