Re: Tajemná zákoutí jazyka C.
Miroslav Mraz
mrazik na volny.cz
Pátek Leden 8 12:17:26 CET 2016
Není tomu tak. Ty závorky (*foo) tam mají svůj význam (jako např. u
ukazatele na funkci) i když moc nechápu jaký. V případě, že je odstraním
nastane chyba
test.c:14:11: error: incompatible types when assigning to type ‘char
*[20]’ from type ‘char (*)[20]’
ps->foo = & pole; // Tohle je pro mne nečitelné
Ale s tou délkou v paměti budete asi mít pravdu. Nicméně už mi to hraje,
bylo potřeba vyházet dynamickou alokaci pro tyhle struktury, ta tam byla
dost zbytečně, protože to alokuje jen na začátku a na konci se to zase
uvolní.
Takže MP3 přehrávač na STM32F4 jako čistě softwarová záležitost je
zvládnutelný, malé demo už mám, zatím hraju jen z interní flashky s
pevným formátem audio, hraje to bez lupání, přiměřeně ke kvalitě kodeku
a vstupního formátu.
Na webu se dá najít demo, ale není tam popsáno jak do toho dostat
vlastní melodii. A zřejmě se tomu človíčkovi taky dělaly problémy s
alokací paměti, protože si napsal vlastní alokátor. Tak jsem si pohrál a
jsem rád, že úspěšně.
Mrazík
Dne 8.1.2016 v 11:21 Jiří Nesvačil napsal(a):
> Rekl bych, ze toto se rozlozi:
> struct strange {
> char (*foo) [FOOLEN]; // Proč ???
> };
>
> struct strange {
> char *foo [FOOLEN];
> };
>
> Dale pak skoro ekvivaletne
> struct strange {
> char **foo;
> };
>
> Ta definice delky muze souviset s definici v pameti. Pokud kompiler nevi
> jak to je dlouhe, tak se z toho nedaji delat tabulky, ale implementuje
> se to jako pole odkazu. Kdyz tomu dam delku, tak by to kompiler mohl
> delat jako tabulku s jasne danym rozmerem a ne jako pole pointeru.
>
> Jirka
>
>
Další informace o konferenci Hw-list