/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Struct Igen
Fra : Kasper


Dato : 10-01-04 18:15

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



 
 
Lasse Madsen (10-01-2004)
Kommentar
Fra : Lasse Madsen


Dato : 10-01-04 18:45

Hej Kasper ...

Arbejder selv med AVR til daglig på arbejdet (arbejder i et udviklings firma
som laver hardware/software til industri) og så at du også roder en del med
det så jeg har lige at par spørgsmål af nysgerrighed

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

Hvilken ATm bruger du, kører du med extern memory ?

Hvad er dit forhold til Imagecraft's compiler ?
vi købte 9 licenser til compileren men syntes den var alt for "akav" og
skiftede til CodeVision med stor glæde ... en dyr affære hehe

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

Hvilken kreds ? RTL eller Crystal ? måske noget helt tredje ?

er det et evaluation board eller noget hjemme strikket fusk ? (har selv
atmel's EIT kit)

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

Hvad har du af storage memory til at gemme sådant i, extern data flash ?

> 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 */
> };

Ved ikke 100% om det er derfor ...
men din const struct fsdata_file *next; kan ihvertfald i CVAVR ikke laves
når din structure ikke er i samme memory område altså også en const i flash
f.eks .

const 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 */
};

M.v.h.
Lasse Madsen
H-TECH AS
www.h-tech.dk



Kasper (10-01-2004)
Kommentar
Fra : Kasper


Dato : 10-01-04 19:07

Hey

> > jeg sidder igen og leger med min atmega og imagecraft...
>
> Hvilken ATm bruger du, kører du med extern memory ?

ATM128

>
> Hvad er dit forhold til Imagecraft's compiler ?
Hmm.. den er ikke god.. har kun brugt den i nogle måndeder...
og jeg er slet ikke expert i C.. Desværre ):


> Hvilken kreds ? RTL eller Crystal ? måske noget helt tredje ?

RTL8019, på et gammelt isakort (loddede en sokkel ud fra bundkort)


> er det et evaluation board eller noget hjemme strikket fusk ? (har selv
> atmel's EIT kit)
hjemmefusk... demo niveu endnu


> Hvad har du af storage memory til at gemme sådant i, extern data flash ?

indtil videre kun intern flash.. regner med IDE interface igennem en Sram
mapped io port


> Ved ikke 100% om det er derfor ...
> men din const struct fsdata_file *next; kan ihvertfald i CVAVR ikke laves
> når din structure ikke er i samme memory område altså også en const i
flash
> f.eks .

Må så indrømme jeg ikke lige ved hvad du hentyder til ??

at man ikke kan lave en struct i en struct ??

som sagt nybegynder i C ):


> const 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 */
> };

Kasper



Kasper (10-01-2004)
Kommentar
Fra : Kasper


Dato : 10-01-04 19:46

Fandt ud af H filen ikke var includeret i den C fil... )):

Men nu kommer den med følgende fejl samme sted :

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(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




Kasper



Ivan Johansen (10-01-2004)
Kommentar
Fra : Ivan Johansen


Dato : 10-01-04 23:48

Kasper wrote:
> !E D:\UIP6.0\fsdata.c(670): undeclared identifier `NULL'

NULL er ikke deklareret. NULL er ikke et keyword, men findes ofte i en
eller anden header fil. Du kan selv lave en ved at skrive følgende i
toppen af koden:
#define NULL 0
Alternativt kan du bruge 0 i koden i stedet for NULL

> !E D:\UIP6.0\fsdata.c(670): invalid initialization type; found `int'
> expected `pointer to const struct fsdata_file'

Jeg tror at det er en følgefejl.

> !E D:\UIP6.0\fsdata.c(670): initializer must be constant
> C:\icc\bin\imakew.exe: Error code 1

Hvis jeg husker rigtigt skal const erklæringer i C kunne evalueres på
under compileringen. Du viser ikke definitionen på data_cgi_stats, men
det kunne se ud som om den ikke er kendt på compileringstidspunktet.

Ivan Johansen


Igor V. Rafienko (11-01-2004)
Kommentar
Fra : Igor V. Rafienko


Dato : 11-01-04 01:13

[ Ivan Johansen ]


[ ... ]

> NULL er ikke deklareret. NULL er ikke et keyword, men findes ofte i en
> eller anden header fil.


Den finnes i en ganske bestemt headerfil -- <stddef.h> (eller, NULL er
garantert til å være definert _iallfall_ der (7.17). Dog, den kan godt
være definert flere steder.


> Du kan selv lave en ved at skrive følgende i toppen af koden:


.... er du sikker på at dette er lovlig?

[ ... ]





ivr
--
<html><form><input type crash></form></html>

Ivan Johansen (11-01-2004)
Kommentar
Fra : Ivan Johansen


Dato : 11-01-04 12:19

Igor V. Rafienko wrote:
> Den finnes i en ganske bestemt headerfil -- <stddef.h> (eller, NULL er
> garantert til å være definert _iallfall_ der (7.17). Dog, den kan godt
> være definert flere steder.

Jeg var ellers overbevist om at NULL ikke var en del af standarden, men
det ser ud til at jeg tog fejl.


>>Du kan selv lave en ved at skrive følgende i toppen af koden:
> ... er du sikker på at dette er lovlig?

Det vil jeg da mene, men jeg er ikke længere så sikker. Det bedste er jo
nok at inkludere stddef.h eller en anden headerfil, hvor den er
defineret. Men ellers mener jeg ikke der er noget i vejen for at
definere den selv.

Ivan Johansen


Kasper (11-01-2004)
Kommentar
Fra : Kasper


Dato : 11-01-04 14:30

Hey igen...


NULL er defined :

#define NULL (void *)0


og sådan her ser den cgi ud :

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};


KAsper



Byrial Jensen (11-01-2004)
Kommentar
Fra : Byrial Jensen


Dato : 11-01-04 23:01

Igor V. Rafienko wrote:
> [ Ivan Johansen ]
>
>>NULL er ikke deklareret. NULL er ikke et keyword, men findes ofte i en
>>eller anden header fil.
>
> Den finnes i en ganske bestemt headerfil -- <stddef.h> (eller, NULL er
> garantert til å være definert _iallfall_ der (7.17). Dog, den kan godt
> være definert flere steder.

Den ikke bare godt kan være andre defineret andre steder. Ifølge
C99-standarden skal den foruden i <stddef.h> også være defineret i
<locale.h>, <stdio.h>, <stdlib.h>, <string.h>, <time.h> og <wchar.h>.

>>Du kan selv lave en ved at skrive følgende i toppen af koden:
>
> .... er du sikker på at dette er lovlig?

Det er det vel hvis ingen af de nævnte headerfiler inkluderes i
programmet, jf. C99 afsit 7.1.3.


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408921
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste