Forum: Compiler & IDEs Pointer problem


von chris (Gast)


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:
1
uint8_t*  int2buf(uint8_t *buffer,int wert )
2
{
3
  *buffer++=(uint8_t)wert&0xFF; // low Byte
4
  *buffer++=wert>>8;
5
  return buffer;          
6
}
7
8
...
9
10
uint8_t* p1;
11
...
12
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

von Stefan B. (stefan) Benutzerseite


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?

von chris (Gast)


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?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Nö.
1
//
2
// AVR Studio 4,13 VR 20071221
3
// ATmega8
4
// -O0
5
//
6
7
#include <avr/io.h>
8
#include <inttypes.h>
9
10
#define BUFFERLENGTH  23
11
#define ENCODERLAENGE 42
12
13
uint8_t ui8Buffer1[BUFFERLENGTH];
14
15
uint8_t*  int2buf(uint8_t *buffer,int wert )
16
{
17
  *buffer++=(uint8_t)wert&0xFF; // low Byte
18
  *buffer++=wert>>8;
19
  return buffer;          
20
}
21
22
int main(void)
23
{
24
  uint8_t* p1;
25
 
26
  p1=int2buf( ui8Buffer1,ENCODERLAENGE*2 );
27
  
28
  while(1);
29
}

Meckert auch nicht:
1
Build started 23.3.2008 at 19:36:54
2
avr-gcc.exe  -mmcu=atmega8 -Wall -gdwarf-2 -O0 -MD -MP -MT chris2.o -MF dep/chris2.o.d  -c  ../chris2.c
3
avr-gcc.exe -mmcu=atmega8  chris2.o     -o chris2.elf
4
avr-objcopy -O ihex -R .eeprom  chris2.elf chris2.hex
5
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex chris2.elf chris2.eep
6
d:\WinAVR\bin\avr-objcopy.exe: --change-section-lma .eeprom=0x00000000 never used
7
8
AVR Memory Usage
9
----------------
10
Device: atmega8
11
12
Program:     226 bytes (2.8% Full)
13
(.text + .data + .bootloader)
14
15
Data:         23 bytes (2.2% Full)
16
(.data + .bss + .noinit)

von chris (Gast)


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

von Hubert N. (ribinger)


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

von Karl H. (kbuchegg)


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.

von Karl H. (kbuchegg)


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.

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.