Ich habe hier ein "Problem", welches eigentlich aus Faulheit aufgekommen
ist. :-D
Ich habe ein Const Array (Ein HID Desc.) von welchem ich die Länge
brauche:
1
staticconstuint8_tPROGMEMrep_desc[]=
2
{
3
0x05,0x01,
4
0x09,0x05,
5
0xa1,0x01,
6
0x05,0x09,
7
0x19,0x01,
8
0x29,0x06,
9
0x15,0x00,
10
0x25,0x01,
11
0x95,0x06,
12
0x75,0x01,
13
0x81,0x02,
14
0x95,0x01,
15
0x75,0x02,
16
0x81,0x03,
17
0xc0
18
};
Nun muss (möchte) ich die länge des Arrays in ein anderes,
gleichartiges, Array bringen. Normalerweise mach ich das ja mit
sizeof(). Jeoch meckert er dann rum, das sizeof() dann nicht 'const' ist
- Logischerweise. Wie kann ich das umgehen? Momentan bleibt mir nichts
weiter übrig und zähle die Werte per Hand und schreibe sie dann in das
andere Array... aber wenn ich hier nun hundertmal rumteste, ist das
wirklich nervig!
Danke für eure Hilfe.
p.s. So in etwa meine ich das, das geht ja nun nicht:
Draco schrieb:> p.s. So in etwa meine ich das, das geht ja nun nicht:>> static const uint8_t PROGMEM dev_desc[] => {> 0x09,0x21,> 0x11,0x01,> 0x00,0x01,> 0x22,sizeof(rep_des)> };
Doch, geht - wenn man vom fehlenden "c" beim Ausdruck "sizeof(rep_des)"
absieht:
$ cat s.c
1
#include<stdint.h>
2
#define PROGMEM
3
4
staticconstuint8_tPROGMEMrep_desc[]=
5
{
6
0x05,0x01,
7
0x09,0x05,
8
0xa1,0x01,
9
0x05,0x09,
10
0x19,0x01,
11
0x29,0x06,
12
0x15,0x00,
13
0x25,0x01,
14
0x95,0x06,
15
0x75,0x01,
16
0x81,0x02,
17
0x95,0x01,
18
0x75,0x02,
19
0x81,0x03,
20
0xc0
21
};
22
23
24
staticconstuint8_tPROGMEMdev_desc[]=
25
{
26
0x09,0x21,
27
0x11,0x01,
28
0x00,0x01,
29
0x22,sizeof(rep_desc)
30
};
$ gcc -c s.c
$ (keine Meldung)
Dein Problem muss woanders stecken - jedenfalls nicht in dem hier
beschriebenen Text.
Frank M. schrieb:> Dein Problem muss woanders stecken - jedenfalls nicht in dem hier> beschriebenen Text.
Kannst du das mal mit dem AVR GCC probieren? vermutlich muss der für
PROGMEM alle Daten zur Kompile Zeit wissen...
Draco schrieb:> high(sizeof(rep_desc)),low(sizeof(rep_desc))> };>> Warum auch immer er mir da nen "non const" error rausgeworfen hat, keine> Ahnung.
Zeig mal die vollständige Fehlermeldung.
> Aber geht nun...
Geht bei mir auch mit avr-gcc ohne den high/low-Trick.
Außer Du hast tatsächlich mehr als 255 Elemente im Array, was Du uns
dann aber verschwiegen hast :)
Frank M. schrieb:> Außer Du hast tatsächlich mehr als 255 Elemente im Array, was Du uns> dann aber verschwiegen hast :)
Ja das hab ich, leider :-D
Ich dachte das wäre nicht von belangen, aber wie sagt man so schön "Man
soll ja nicht denken"!
Draco schrieb:> Ja das hab ich, leider :-D>> Ich dachte das wäre nicht von belangen, aber wie sagt man so schön "Man> soll ja nicht denken"!
Dann hat die Fehlermeldung aber garantiert nicht so gelautet, wie Du es
beschrieben hast, sondern:
1
warning: large integer implicitly truncated to unsigned type [-Woverflow]
Das kommt nämlich bei mir, wenn ich mehr als 255 Elemente einfüge. Auch
ist es kein Error, sondern lediglich eine (ernstzunehmende) Warnung.
c:\users\draconix\Documents\Atmel Studio\7.0\ThinJoyStick\ThinJoyStick\DracoUSB\DracoUSB.c(174,44): info: each undeclared identifier is reported only once for each function it appears in
2
c:\users\draconix\Documents\Atmel Studio\7.0\ThinJoyStick\ThinJoyStick\DracoUSB\DracoUSB.c(248,2): error: initializer element is not constant
3
sizeof(rep_desc),
4
^
5
c:\users\draconix\Documents\Atmel Studio\7.0\ThinJoyStick\ThinJoyStick\DracoUSB\DracoUSB.c(248,2): error: (near initialization for 'conf_des[25]')
Mw E. schrieb:>> 'conf_des[25]'>> Wie hier schon geschrieben wurde, haste dich wohl vertippt.> Fehlermeldungen sind nicht zum überfliegen da, sondern zum analysieren!
Nein halt, der Fehler war hier beim Aptippen. Im Sourcecode sind einige
Variabel Namen ohne das "c" geschrieben. Die Konstante in dem diese
Funktion aufgerufen wird, heißt tatsächlich bloß conf_des.
(Bei HID Descriptor unten steht die Zeile)
@ Draco (Gast)
>Nein halt, der Fehler war hier beim Aptippen.
FAIL! Das tut man nicht! NIEMALS!
https://www.mikrocontroller.net/articles/Netiquette#.C3.84u.C3.9Fere_Form
"Quelltext nie abtippen, sonder immer das direkt kopierte Original
posten, anderenfalls schleichen sich neue Fehler ein oder die
existierenden werden nicht abgeschrieben."
Draco schrieb:> Nein halt, der Fehler war hier beim Aptippen.
Genau aus diesem Grunde wurde schon unzählige Male gesagt: Code nicht
abtippen, sondern reinkopieren! Du bist der beste Beweis dafür, daß
diese Mahnung völlig berechtigt ist! :-)