Avatar billede repzak Nybegynder
10. januar 2004 - 19:35 Der er 29 kommentarer

Struct - Pointere - Imagecraft AVR compiler

HEY

jeg sidder igen og leger med min atmega og imagecraft...

jeg har fået muret et netværksinterface sammen, og kan nu pinge etc...

men så vil jeg gerne have en hjemmeside på... der er lavet dertil.. men ikke
lige til imagecraft..

min compiler kommer med fejl på dette :

const struct fsdata_file file_cgi_stats[] = {{NULL, data_cgi_stats,
data_cgi_stats + 11, sizeof(data_cgi_stats) - 11}};

Fejlen er :

C:\icc\bin\imakew -f nic.mak
iccavr -c -IC:\icc\include\ -e -D__IMAGECRAFT__ -DATMEGA -l -g -Mavr_enhance
d D:\UIP6.0\fs.c
iccavr -c -IC:\icc\include\ -e -D__IMAGECRAFT__ -DATMEGA -l -g -Mavr_enhance
d D:\UIP6.0\fsdata.c
!E D:\UIP6.0\fsdata.c(667): cannot initialize undefined `incomplete struct
fsdata_file defined at D:\UIP6.0\fsdata.c(667)'
!E D:\UIP6.0\fsdata.c(667): skipping `{' `NULL' `,' `data_cgi_stats' `,'
`data_cgi_stats' `+' `11' ... up to `;'
!E D:\UIP6.0\fsdata.c(667): syntax error; found `;' expecting `}'
An integer divide by zero was encountered at address 0x00425364.iccavr:
can't execute `C:\icc\bin\iccomavr.exe'
C:\icc\bin\imakew.exe: Error code 100
Done: there are error(s). Exit code: 100

declaration (er i en H fil) :

struct fsdata_file {
const struct fsdata_file *next;
const char *name;
const char *data;
const int len;
#ifdef FS_STATISTICS
#if FS_STATISTICS == 1
u16_t count;
#endif /* FS_STATISTICS */
#endif /* FS_STATISTICS */
};





Håber nogle kan hjælpe mig med hvorfor min compiler ikke æder det



Mange tak KAsper
Avatar billede arne_v Ekspert
10. januar 2004 - 19:37 #1
Umiddelbart lyder det som fsdata.c ikke inkluderer den .h fil !
Avatar billede repzak Nybegynder
10. januar 2004 - 19:42 #2
Oki Tak Det hjalp en del på det, men får den disse fejl nu til samme linie:

C:\icc\bin\imakew -f nic.mak
    iccavr -c -IC:\icc\include\ -e -D__IMAGECRAFT__ -DATMEGA  -l -g -Mavr_enhanced  D:\UIP6.0\fs.c
    iccavr -c -IC:\icc\include\ -e -D__IMAGECRAFT__ -DATMEGA  -l -g -Mavr_enhanced  D:\UIP6.0\fsdata.c
!E D:\UIP6.0\fsdata.c(670): undeclared identifier `NULL'
!E D:\UIP6.0\fsdata.c(670): invalid initialization type; found `int' expected `pointer to const struct fsdata_file'
!E D:\UIP6.0\fsdata.c(670): initializer must be constant
C:\icc\bin\imakew.exe: Error code 1
Done: there are error(s). Exit code: 1

Tror du at du kan hjælpe med den også ??
Avatar billede arne_v Ekspert
10. januar 2004 - 19:47 #3
undeclared identifier `NULL' => mangler #include <stdlib.h>
Avatar billede arne_v Ekspert
10. januar 2004 - 19:47 #4
Den anden må have noget med data_cgi_stats at gøre
Avatar billede repzak Nybegynder
10. januar 2004 - 21:10 #5
struct fsdata_file {
const struct fsdata_file *next;

Nogle der kan fortælle hvad det gør ???

bruger den samme struct name i en anden struct eller ???

KAsper
Avatar billede arne_v Ekspert
10. januar 2004 - 21:13 #6
struct fsdata_file indeholder en pointer til sin egen type.

Det er helt standard i linkede lister og den slags.
Avatar billede repzak Nybegynder
10. januar 2004 - 21:19 #7
Kan der være en begrænsingen så compileren ikke kan det ??
Avatar billede arne_v Ekspert
10. januar 2004 - 21:22 #8
Hvad for en fejl snakker du om ?

"invalid initialization type" skyldes formentlig at data_cgi_stats
ikker er eklæret som den skal.
Avatar billede repzak Nybegynder
10. januar 2004 - 21:34 #9
den ser sådan her ud, og ligger i samme c fil :

static const char data_cgi_stats[] = {
    /* /cgi/stats */
    0x2f, 0x63, 0x67, 0x69, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0,
    0x69, 0x20, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x68,
    0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c,
    0xa, 0x63, 0x20, 0x61, 0xa, 0x69, 0x20, 0x2f, 0x73, 0x74,
    0x61, 0x74, 0x73, 0x5f, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72,
    0x2e, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0xa, 0x2e, 0xa, };

hvis jeg includer Header filen(som er includeret før) fil i den omtalte c fil, kommer den med den mangler den NULL, så inkludere jeg STDIO, så kommer den og siger alle de andre variabler er defineret 2 gange, sletter jeg så den H fil, er jeg tilbage hvor jeg startede )):

nogle ideer ?

Tænkte på om det kunne passe den compiler er for "overfladisk" til den kan håndtere en pointer til sin egen type ?
Avatar billede arne_v Ekspert
10. januar 2004 - 21:37 #10
Så ville jeg prøve med:

const struct fsdata_file file_cgi_stats[] = {{NULL, (const struct fsdata_file *)data_cgi_stats,
data_cgi_stats + 11, sizeof(data_cgi_stats) - 11}};

altså en type cast.
Avatar billede arne_v Ekspert
10. januar 2004 - 21:37 #11
En C compiler *skal* acceptere en pointer til sig selv.
Avatar billede repzak Nybegynder
10. januar 2004 - 22:11 #12
Umilbat som jeg har fundet ud af nu, syntes jeg det peger på at den ikke fatter det her : const struct fsdata_file *next;
For hvis jeg remmer den ud og sletter det parameter i const struct fsdata_file file_cgi_stats[] = {{NULL, data_cgi_stats,
data_cgi_stats + 11, sizeof(data_cgi_stats) - 11}};
så kommer der ikke fejl i sætningen...

??
Avatar billede arne_v Ekspert
10. januar 2004 - 22:13 #13
Har du prøvet mit 21:37:32 forslag ?
Avatar billede repzak Nybegynder
10. januar 2004 - 22:15 #14
ja.. stadig fejl det giver :
!E D:\UIP6.0/fsdata.c(673): invalid initialization type; found `pointer to const struct fsdata_file' expected `pointer to const char'
C:\icc\bin\imakew.exe: Error code 1
C:\icc\bin\imakew.exe: 'fs.o' removed.
Avatar billede arne_v Ekspert
10. januar 2004 - 22:19 #15
Jeg har set forkert på struct definitionen. next skal være NULL.
Avatar billede arne_v Ekspert
10. januar 2004 - 22:19 #16
Men det skal kunen lade sig gøre.

Har du include stdlib.h ?
Avatar billede repzak Nybegynder
10. januar 2004 - 22:25 #17
Nej det havde jeg ikke fejl med den :
!E D:\UIP6.0/fsdata.c(673): invalid initialization type; found `pointer to const struct fsdata_file' expected `pointer to const char'

Men den NULL er defined således et andet sted : #define NULL (void *)0
Avatar billede repzak Nybegynder
10. januar 2004 - 22:25 #18
Tror det er den første af variablerne / pointerne der laver problemet, som skrevet
Avatar billede arne_v Ekspert
10. januar 2004 - 22:28 #19
Hvad med:

#includ <stdlib.h>

og

const struct fsdata_file file_cgi_stats[] = {{(const struct fsdata_file *)NULL, data_cgi_stats,
data_cgi_stats + 11, sizeof(data_cgi_stats) - 11}};
Avatar billede repzak Nybegynder
10. januar 2004 - 22:32 #20
nope :
!E D:\UIP6.0/fsdata.c(673): invalid initialization type; found `pointer to const struct fsdata_file' expected `pointer to const char'

heller ikke med {{(const char fsdata_file *)

er prøvete både med og uden

)):
Avatar billede arne_v Ekspert
10. januar 2004 - 22:34 #21
Har du fået sat next pointeren ind igen i strukturen ?
Avatar billede repzak Nybegynder
10. januar 2004 - 22:38 #22
PT ser det sådan her ud :

struct fsdata_file {
  const struct fsdata_file *NEXT;
  const char *name;
  const char *data;
  const int len;
#ifdef FS_STATISTICS
#if FS_STATISTICS == 1
  u16_t count;
#endif /* FS_STATISTICS */
#endif /* FS_STATISTICS */
};

const struct fsdata_file file_cgi_stats[] = {{(const struct fsdata_file *)NULL, data_cgi_stats, (const struct fsdata_file *)data_cgi_stats +11, sizeof(data_cgi_stats) - 11}};

Sætter meget pris på din hjælp (:
(også selvom jeg er meget nybegynder)
Avatar billede arne_v Ekspert
10. januar 2004 - 22:41 #23
Der skal fjernes noget tror jeg:

const struct fsdata_file file_cgi_stats[] = {{(const struct fsdata_file *)NULL, data_cgi_stats, data_cgi_stats +11, sizeof(data_cgi_stats) - 11}};
Avatar billede repzak Nybegynder
10. januar 2004 - 22:49 #24
MEn tænkte på  NULL er jo defineret som en pointer
#define NULL (void *)0
er det lige meget ??
dette er fejlen nu :
!E D:\UIP6.0\fsdata.c(674): cannot initialize undefined `incomplete struct fsdata_file defined at D:\UIP6.0\fsdata.c(674)'
!E D:\UIP6.0\fsdata.c(674): skipping `{' `('
!E D:\UIP6.0\fsdata.c(674): syntax error; found `const' expecting `}'
Avatar billede arne_v Ekspert
10. januar 2004 - 22:56 #25
Øh - nu er vi tilbage til den oprindelige fejl.
Avatar billede repzak Nybegynder
10. januar 2004 - 22:57 #26
men tror bestemt det er i den første variable fejlen skal findes
Avatar billede repzak Nybegynder
10. januar 2004 - 23:04 #27
hmm måske ikke i det første anyway.. dunno
Avatar billede repzak Nybegynder
11. januar 2004 - 23:32 #28
Ingen der har flere ideer ??
Avatar billede segmose Nybegynder
12. januar 2004 - 13:01 #29
Er FS_STATISTIC defineret til 1?

er u16_t defineret?

Dette fungere for mig:

#include <stdlib.h>
#define u16_t short

const char data_cgi_stats[] = { 0x32, };
struct fsdata_file {
  const struct fsdata_file *NEXT;
  const char *name;
  const char *data;
  const int len;
//#ifdef FS_STATISTICS
//#if FS_STATISTICS == 1
  u16_t count;
//#endif /* FS_STATISTICS */
//#endif /* FS_STATISTICS */
};

const struct fsdata_file file_cgi_stats[] = {
  {(const struct fsdata_file *)NULL,
    data_cgi_stats, data_cgi_stats +11, sizeof(data_cgi_stats) - 11
  }
};

int main() {
  return 0;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester