eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › Avr: PROGMEM, PSTR i struktura
Ilość wypowiedzi w tym wątku: 7

  • 1. Data: 2011-08-07 22:38:39
    Temat: Avr: PROGMEM, PSTR i struktura
    Od: Sebastian Biały <h...@p...onet.pl>

    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.


  • 2. Data: 2011-08-08 06:00:30
    Temat: Re: Avr: PROGMEM, PSTR i struktura
    Od: Zbych <a...@o...pl>

    W dniu 2011-08-08 00:38, Sebastian Biały pisze:
    > 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"

    I jest to nawet opisane w FAQ:

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

    > 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ć?


    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.


  • 3. Data: 2011-08-08 06:58:13
    Temat: Re: Avr: PROGMEM, PSTR i struktura
    Od: Sławomir Szczyrba <c...@o...the.night>

    Take the red pill, Sebastian Biały...
    > 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ć
    [...]
    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)
    \__ \__ \___________________________________________________
    ____________
    /___/___/ Sławomir Szczyrba steev/AT/hot\dot\pl


  • 4. Data: 2011-08-08 17:57:04
    Temat: Re: Avr: PROGMEM, PSTR i struktura
    Od: Sebastian Biały <h...@p...onet.pl>

    On 2011-08-08 00:38, Sebastian Biały wrote:
    > Witam.
    > [ciach]

    A miało być tak pięknie:

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

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


  • 5. Data: 2011-08-08 19:14:06
    Temat: Re: Avr: PROGMEM, PSTR i struktura
    Od: Zbych <a...@o...pl>

    W dniu 2011-08-08 19:57, Sebastian Biały pisze:
    > On 2011-08-08 00:38, Sebastian Biały wrote:
    >> Witam.
    >> [ciach]
    >
    > A miało być tak pięknie:
    >
    > http://std.dkuug.dk/JTC1/SC22/WG14/www/docs/n1021.pd
    f
    >
    > Co się stało z tym pomysłem? gcc miało coś implementować.

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

    http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49868

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


  • 6. Data: 2011-08-08 21:09:32
    Temat: Re: Avr: PROGMEM, PSTR i struktura
    Od: Konop <k...@g...pl>

    > struct Data {
    > const char *foo;
    > unsigned char a;
    > };
    >
    > Data PROGMEM data = { PSTR("Coś"), 4 };

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

    --
    Pozdrawiam
    Konop


  • 7. Data: 2011-08-08 21:37:10
    Temat: Re: Avr: PROGMEM, PSTR i struktura
    Od: Sebastian Biały <h...@p...onet.pl>

    On 2011-08-08 23:09, Konop wrote:
    > Trochę strzelam, bo nie mam teraz jak sprawdzić, ale czy nie zadziała po
    > prostu:
    > Data PROGMEM data = {"Coś" , 4};

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

strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: