-
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.