C _ jak rozepsat ?__ádek

Miroslav Mraz mraz na seznam.cz
Neděle Duben 28 12:41:51 CEST 2013


Díky za obsáhlý rozbor problematiky. Dále v textu:

Jan Waclawek píše v Ne 28. 04. 2013 v 12:09 +0200:

> > > Nepomůže. Nicméně je to tedy v zásadě vlastnost CM0
> 
> Nie je to nijako ARM/CM0 specificka vlastnost; naopak. Viac-nez-8-bitove procesory maju odjakziva tendenciu mat so zarovnanym/nezarovnanym pristupom (plus s endianitou) nejake specifika. V principe su mozne styri pristupy:
> - nezarovnane pristupy sa spravaju uplne identicky ako zarovnane (to je asi len v pripade 8-bitovych externych zbernic)
> - nezarovnane pristupy funguju, ale trvaju dlhsie ("niekto" ich rozklada/sklada)
> - pri nezarovnanom pristupe sa zapise/cita nieco prekvapive (typicky ak sa jednoducho zahadzuju spodne bity adresy, t.j. ak sa zapisuje na adresu 1 PQRS a ocakava sa [1]=P, [2]=Q, [3]=R, [4]=S, tak sa v skutocnosti zapise bud [0]=P, [1]=Q, [2]=R, [3]=S alebo niekde aj [0]=S, [1]=P, [2]=Q, [3]=R; pri citani obdobne)
> - pri nezarovnanom pristupe nastane chyba (trap). Toto mal uz aj PDP11 (skalni Cckari samozrejme vedia, preco spominam prave PDP-11 :-) )
> 
Ten příklad nebyl jen akademická úvaha. Typicky je to potřeba při
parsování nějakého protokolu při přenosu dat mezi PC a tím malým
procesůrkem. Očekával bych zde chování podle bodu 2. vašeho výčtu, na
i386 a x86-64 se to tak chová. Body 3. 4. jsou špatně, nebudu bádat nad
tím, proč. Pouze to beru na vědomí s tím, že použiju memcpy(), výkonu i
paměti je dost a tohle i líp vypadá. Ale dle mého skromného názoru by se
s tím měl překladač vypořádat podle 1. nebo když to nejde tak 2.

> > > To je dobrá informace. Studovat specifikace to je pro mě projev krajního zoufalství.
> 
> Studovat specifikacie a snazit sa pochopit fungovanie veci okolo nas je IMO prospesna vec z viacerych dovodov; ale ak sa Vam to nechce, tak jednoducho nepouzivajte "skutocne C", t.j. rozne "skratky" a "finty". Konkretne vo Vasom pripade ak chcete zlozit zo 4 bytov lubovolne umiestnenych v poli jeden 32-bitovy word, nuz to tak aj zapiste, pomocou nasobeni (posuvov) a scitovani. Toto je (pri zachovani pravidiel aritmetiky v C, co tiez nie je trivialne :-( ) bezpecne a prenositelne. Ak sa Vam to zda roztahane, spravte si na to makro. Ak mate obavy, ze je to neefektivne, tak zabudnite na C a pouzivajte assembler.
> 
> wek
Ještě tak na to mít čas. Vycházím ze zásady - Když už nevíš jak dál,
přečti si návod. A kdybych si ten návod přečetl, nepokládal bych hloupé
otázky a neměli bychom o čem drbat. Možná že z takovéto diskuze bude mít
někdo i nějaký užitek.

Mrazík





Další informace o konferenci Hw-list