Avr: PROGMEM, PSTR i struktura

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Polish to

Threaded View
Witam.

Chce zrobić coś takiego:

struct Data {
    const char *foo;
    unsigned char a;
};

Data PROGMEM data = { PSTR("Coś"), 4 };

Oczywiscie nie mogę, bo PSTR to jest "__extension__" i można tego używać
chyba tylko jako argumentu funkcji: " statement-expressions are not
allowed outside functions nor in template-argument lists"

W kazdym razie padłem na tym że nie mam jak zainicjować statycznej const
struktury. Chciałbym ja inicjować dokladnie tak jak to widać, tzn w miejscu.

Tak też się nie da:

const char PROGMEM *z = "Inne";

Data PROGMEM data2 = { z, 8 };

Wylatuje z: "error: data2 causes a section type conflict"

Zamiana z const char* na PGM_P tez nic nie pomaga. Co jeszcze powinienem
sprawdzić?

WinAVR-20100110.

Re: Avr: PROGMEM, PSTR i struktura
W dniu 2011-08-08 00:38, Sebastian Biały pisze:
Quoted text here. Click to load it

I jest to nawet opisane w FAQ:

http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_rom_array

Quoted text here. Click to load it


U siebie stosuję coś takiego:

    static const prog_char cmd_sin_rgb_fast[] =    "$sin_rgb_fast#";
    [...]

    struct{
        const prog_char * cmd;
        uint8_t len;
        uint8_t mode;
    }static const PROGMEM cmd_tab[] = {
        {cmd_sin_rgb_fast,    sizeof(cmd_sin_rgb_fast) - 1,    mode_sin_rgb_fast},
    [...]
    };

i działa.

Re: Avr: PROGMEM, PSTR i struktura
Take the red pill, Sebastian Biały...
Quoted text here. Click to load it
[...]
Spróbuj tak :

#v+
#include <avr/pgmspace.h>                                                      
                                                          
                                                                                
                                                          
typedef struct{
        const char * foo;
        unsigned char a;
} Data;

const char const string1[] PROGMEM = "foo.shmoo";

const Data const data      PROGMEM = { string1 , 7 };

int main() {
//      ...
    return 0;
}
#v-

00000026 <string1>:
  26:   66 6f 6f 2e 73 68 6d 6f 6f 00                       foo.shmoo.

00000031 <data>:
  31:   26 00 07                                            &..


Sławek
--
  ________ Ej! Zrób światu przysługę! Przestań się cofać, KOLEEEEEŚ!
_/ __/ __/ (słoniowaty)
We've slightly trimmed the long signature. Click to see the full one.
Re: Avr: PROGMEM, PSTR i struktura
Quoted text here. Click to load it

A miało być tak pięknie:

http://std.dkuug.dk/JTC1/SC22/WG14/www/docs/n1021.pdf

Co się stało z tym pomysłem? gcc miało coś implementować.

Re: Avr: PROGMEM, PSTR i struktura
W dniu 2011-08-08 19:57, Sebastian Biały pisze:
Quoted text here. Click to load it

Niby ma przestrzenie adresowe i są jakieś próby z avr:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id49%868

http://gcc.gnu.org/ml/gcc/2011-08/msg00164.html

Re: Avr: PROGMEM, PSTR i struktura
Quoted text here. Click to load it

Trochę strzelam, bo nie mam teraz jak sprawdzić, ale czy nie zadziała po
prostu:
Data PROGMEM data = {"Coś" , 4};
??

--
  Pozdrawiam
  Konop

Re: Avr: PROGMEM, PSTR i struktura
Quoted text here. Click to load it

Nie, "coś" ląduje w RAM zamiast Flash. We Flash znajdzie się tylko sama
struktura z pointerem.

Site Timeline