Sida 1 av 1
[C/Arduino] Array av arrayer/pekare
Postat: 1 september 2016, 09:20:29
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.
Re: [C/Arduino] Array av arrayer/pekare
Postat: 1 september 2016, 11:11:45
av Icecap
Testa:
Kod: Markera allt
// colors
static uint8_t* COLORS[3][] = {
C_PINK, C_VIOLET, C_MAGENTA
};
Re: [C/Arduino] Array av arrayer/pekare
Postat: 1 september 2016, 20:40:06
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?
Re: [C/Arduino] Array av arrayer/pekare
Postat: 1 september 2016, 22:36:07
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?
Re: [C/Arduino] Array av arrayer/pekare
Postat: 3 september 2016, 11:14:31
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.
Re: [C/Arduino] Array av arrayer/pekare
Postat: 3 september 2016, 13:03:33
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.

Re: [C/Arduino] Array av arrayer/pekare
Postat: 3 september 2016, 13:23:01
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.
Re: [C/Arduino] Array av arrayer/pekare
Postat: 5 september 2016, 08:29:15
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.
Re: [C/Arduino] Array av arrayer/pekare
Postat: 5 september 2016, 10:24:24
av lillahuset
Din krasch låter som om något "pekar åt helvete". Har du testat konstruktionen på PC? Alltså just den lilla delen.