[C/Arduino] Array av arrayer/pekare

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
maDa
Inlägg: 4076
Blev medlem: 11 november 2005, 22:13:16
Ort: Malmö
Kontakt:

[C/Arduino] Array av arrayer/pekare

Inlägg av maDa »

Sorry för nybörjarfråga om C.

Jag skulle vilja åstakomma följande. Har en samling färger (RGBW) definierade som följande.

Kod: Markera allt

static uint8_t C_PINK[]                 = { 255, 20, 147, 0 };
static uint8_t C_VIOLET[]               = { 192, 0, 255, 0 };
static uint8_t C_MAGENTA[]              = { 255, 0, 255, 0 };

// colors
static uint8_t* COLORS[] = {
	C_PINK, C_VIOLET, C_MAGENTA
};
Detta kraschar tyvärr. Hur är ett vettigare sätt, eller borde jag lagra färgerna som uint32_t istället?

Jag vill ju kunna accessa färgerna både individuellt och som en lista.
Användarvisningsbild
Icecap
Inlägg: 26147
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: [C/Arduino] Array av arrayer/pekare

Inlägg av Icecap »

Testa:

Kod: Markera allt

// colors
static uint8_t* COLORS[3][] = {
  C_PINK, C_VIOLET, C_MAGENTA
  };
SvenW
Inlägg: 1124
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: [C/Arduino] Array av arrayer/pekare

Inlägg av SvenW »

Prova också att deklarera dem som const, om det går.
Eller deklarera pekartabellen i en funktion, ej static, så den hamnar i en "stackframe" dvs i RAM.
C-koden förefaller ok, men en del saker fungerar kanske inte alltid i alla processorer.
Vilken kompilator och miljö är det? GCC och gnu-tools?
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: [C/Arduino] Array av arrayer/pekare

Inlägg av lillahuset »

Jag tror inte man vill ha den lokalt på stacken. Om nu inte Arduino är verkligt speciellt.

Vad försöker du förmedla med detta?
Detta kraschar tyvärr. Hur är ett vettigare sätt, eller borde jag lagra färgerna som uint32_t istället?
SvenW
Inlägg: 1124
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: [C/Arduino] Array av arrayer/pekare

Inlägg av SvenW »

lillahuset: Syftar du på mitt inlägg?
Jag menade inte att antyda att gnutools skulle ge krashbenägna program. Det är inte min erfarenhet!
Bara det att om man skall kunna tipsa frågeställaren om hur man kommer vidare så är det bra att veta vilken kompilator/miljö som används.
Har för mig att Arduino från början baserades på avr-gcc men vet inte exakt vad som finns idag.
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: [C/Arduino] Array av arrayer/pekare

Inlägg av lillahuset »

SwenW: Absolut inte. Det var till maDa.
Däremot tror jag inte man vill ha pekarna på stacken. Men helt säker är jag inte.
Jag tror vi är ganska överens om gcc med tillbehör. :)
Användarvisningsbild
Icecap
Inlägg: 26147
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: [C/Arduino] Array av arrayer/pekare

Inlägg av Icecap »

MaDa: det du försöker ät att skapa en array över pekare till en samling bytes.

Vid att deklarera dom som "static" kan inget annan modul i projektet se dom.
Vid att inte deklarera dom som "const" läggs de i RAM-minnet.

Som det borde se ut:

Kod: Markera allt

const static uint8_t C_PINK[]        = { 255, 20, 147, 0 };
const static uint8_t C_VIOLET[]    = { 192,   0, 255, 0 };
const static uint8_t C_MAGENTA[] = { 255,   0, 255, 0 };

// colors
const uint8_t* COLORS[] = {
   C_PINK, C_VIOLET, C_MAGENTA
  };
Sedan återstår en förklaring på vad "Detta kraschar tyvärr" betyder.

Sedan är det sätt lite fel faktisk! Du borde skapa en grupp först:

Kod: Markera allt

typedef struct
  {
  uint8_t Red, Green, Blue, Intensity;
  } T_COLOR_DEF;

Sedan deklarera de värden som resten av programmet inte ska kunde se:
const static T_COLOR_DEF C_PINK        = { 255, 20, 147, 0 };
const static T_COLOR_DEF C_VIOLET    = { 192,   0, 255, 0 };
const static T_COLOR_DEF C_MAGENTA = { 255,   0, 255, 0 };

// Och sedan deklarera de globala Colors
const T_COLOR_DEF* COLORS[] = {
   C_PINK, C_VIOLET, C_MAGENTA
  };
Då kan du enkelt komma åt COLORS[x]->Red, COLORS[x]->Green och COLORS[x]->Blue samt COLORS[x]->Intensity om du behöver.
Användarvisningsbild
maDa
Inlägg: 4076
Blev medlem: 11 november 2005, 22:13:16
Ort: Malmö
Kontakt:

Re: [C/Arduino] Array av arrayer/pekare

Inlägg av maDa »

Tack för bra tips! Ska testa när jag har tillfälle. Har löst det tillfälligt med en switch() med alla färgerna.

Ja det är gcc-AVR/Arduino. Det "kraschar" i form av det kommer några skräptecken (seriellt) sen stannar programmet.
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: [C/Arduino] Array av arrayer/pekare

Inlägg av lillahuset »

Din krasch låter som om något "pekar åt helvete". Har du testat konstruktionen på PC? Alltså just den lilla delen.
Skriv svar