global array av structar...med pekare..=(

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
dude
Inlägg: 142
Blev medlem: 6 juli 2007, 17:39:33
Ort: Umeå

Re: global array av structar...med pekare..=(

Inlägg av dude »

varför skulle det vara ett typiskt exempel på detta??

det går ju tydligen göra som jag förstår det bara att det är komplicerat. och det hade varit en en bättre kod men jag har inte tid att få det att funka
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45430
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: global array av structar...med pekare..=(

Inlägg av TomasL »

Det kan inte vara så enkelt att du har slut på minnet, din struct tar upp 680 bytes, hur mycket ram har processorn?
dude
Inlägg: 142
Blev medlem: 6 juli 2007, 17:39:33
Ort: Umeå

Re: global array av structar...med pekare..=(

Inlägg av dude »

den har 4K bytes (atmega644)

men jag lägger ner med allokeringen. verkar inte värt det.


men dock en annan fråga:

jag vill göra en global array av structs som alltså ska kunna kommas åt från olika delar av mitt program.
jus nu sitter jag så jag inte kan komma åt någon av mina c programmeringsböcker och jag försöker hitta infon på nätet..

google verkar hata mig för jag hamnar bara på massa skitsidor som inte har ett dugg med det jag söker efter...

är det nån som vet nån sida där de nått bra förklarande exempel på globala arrays av strukturer??

pinsamt att fråga eftersom det naturligftvis måste finnas en hel drös där ute. jag vet att jag sett en del själv...

men kan som sagt inte hitta nån för tillfället och jag är lite tidsstressad..
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: global array av structar...med pekare..=(

Inlägg av mri »

jag vill göra en global array av structs som alltså ska kunna kommas åt från olika delar av mitt program.
ändrar din tidigare kod lite:

i meny.h-filen:

Kod: Markera allt

#ifndef menu_h
#define menu_h

typedef struct 
{
    char va[30];
    int id;
    int nummer;
}info;

extern info xbee[20];

#endif
i meny.c filen:

Kod: Markera allt

#include "menu.h"

info xbee[20];
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45430
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: global array av structar...med pekare..=(

Inlägg av TomasL »

Naturligtvis beroende på din kompilator, men testa detta.

types.h

Kod: Markera allt

#ifndef _TYPES_H
#define _TYPES_H

typedef struct _INFO
{
    char va[30];
    int id;
    int nummer;
}info;
#endif

/*--E-O-F--*/


vars.h

Kod: Markera allt

#ifdef MAIN_APP
#define EXTERNAL
#else
#define EXTERNAL extern
#endif

#ifndef _VARS_H
#define _VARS_H
#include "types.h"

EXTERNAL structdef varStruct;  // deklarera variabeln



#endif


/*--E-O-F--*/
Du kan på detta sätt inkludera "vars.h" i samtliga C-filer i projektet, utan att råka ut för dubbla deklarationer.
Det enda viktiga är att du i main.c dvs den filen du har main() i måste du infoga följande pragma

Kod: Markera allt

#define MAIN_APP
Dock måste du vara lite försiktig med stora structar och arrays av struktar, då de tar upp en hel del minne.
Många kompilatorer kan inte hålla reda på hur stor stacken blir, och det kan finnas risk att den skriver över dina variabler.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Re: global array av structar...med pekare..=(

Inlägg av speakman »

TomasL: Varför denna röra med preprocessordirektiv? Att "råka" dubblera deklarationer har jag aldrig varit med om någon kompilator som klagar på. Definitioner däremot, men det är ju helt naturligt. Nej renast och mest "rätt" kod är mri's variant. Så enkelt och bra det kan bli helt enkelt. Inkludera meny.h där du behöver nå arrayen bara.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45430
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: global array av structar...med pekare..=(

Inlägg av TomasL »

Ingen röra, enbart ett extra, jämfört med vad man rimligtvis bör använda som minimum, ser inga konstigheter med de, dock återanvänder jag mycket kod, och lat som jag är, orkar jag inte modda koden för varje enskilt projekt.

Naturligtvis är MRI's helt korrekt, men det blir ett problem, då man måste ha två olika includes, beroende på var det skall inkluderas i.

Personligen definierar jag alla globala variabler i en gemensam fil, samma gäller funktionsprototyper, globala typdefinitioner och globala #defines i gemensamma filer, för att kunna hålla ordning på dem.
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: global array av structar...med pekare..=(

Inlägg av mri »

Naturligtvis är MRI's helt korrekt, men det blir ett problem, då man måste ha två olika includes, beroende på var det skall inkluderas i.
Förstår inte vad som skulle vara problematiskt, kan du förklara.

För övrigt nämde du nåt om protabiliteten i ett tidigare inlägg, och då kan jag upplysa om att underscore *inte* bör användas som första tecken i en identifierare som du gjort. Enkelt och dubbelt underscore först är reserverat för kompilatorns/platformens interna användning.

Edit: stavfel
Senast redigerad av mri 25 maj 2010, 22:10:19, redigerad totalt 1 gång.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Re: global array av structar...med pekare..=(

Inlägg av speakman »

Förstår inte heller problematiken. Förstår inte ens varför man ska behöva inkludera flera filer. Det räcker med meny.h så finns globalen tillgänglig där. Och att samla alla globaler i en och samma fil tyder på dålig koddesign.
dude
Inlägg: 142
Blev medlem: 6 juli 2007, 17:39:33
Ort: Umeå

Re: global array av structar...med pekare..=(

Inlägg av dude »

hey!!!!!


fick det att funka....ahh koden var rätt men det var på ett annat ställe i koden som det blev fel..
kom på det vid frukosten i morse efter en god natts sömn.
höll på med koden en hel dygn i streck. då blir man väl för trött för att programmera.
var säker på att den inte fick global range på structen men det visade sig att den nollställdes på ett annat ställe.... :roll:
den jag fick till var alltså den utan pekare och malloc och det. tyckte i slutänden att det var overkill med de


tack för all hjälp. för om jag inte tack vare er hade blivit mer övertygad av att den delen var rätt så hade jag nog fortfarande slagit huvudet mot väggen och försökt "fixa" den delen. så tack så hemskt mycke alla som hjälpt :D
Skriv svar