*****SPAM***** RE: C _ jak rozepsat řádek

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Sobota Duben 27 21:59:26 CEST 2013


Tak asi jiny pohled, vic bych v tom nehledal.  Proste pisu konkretni 
aplikace pro konkretni platformu a dulezite je, ze to na te konkretni 
veci funguje...
A neni to to hlavni, co delam, spis hobby...

Dne 27. 4. 2013 21:55, Josef Štengl napsal(a):
> Vám je to jasné, ostatním na druhé straně to tak jasné být nemusí. 
> Setkal jsem se s dokumenty, kde word/dword  16/32, 32/64 a to dokonce 
> v jednou dokumentu v závislosti na cílové platformě/sběrnici. A bylo 
> to správně a dokumentované.
>
> GCC je známý kompilátor, ale profesionálně jsem dělal se 4 dalšími a 
> ty nebyli GCC kompatibilní jak parametry překladače, atributy a ani 
> pragmami. Endianita není předepsaná, pokud píšete nízkoúrovňové věci 
> či knihovny například pro ARM nebo MIPS nebo něco neznámého a nevíte 
> jaká endianita bude nakonec použita.
>
> Win platforma je možná zřejmá, neznám, ale já dělám převážně embedded 
> záležitosti (dnes nazývané deeply embedded) a tam je jasná jedna věc.
>
> Váš pohled se mi jeví omezený až bych řekl arogantní. Jen jsem chtěl 
> upozornit i na jiný pohled na problematiku. Rozčilují mě takové jasné 
> věci, které jsou jasné všem. A ouha. Někomu je to jasné jinak.
>
> Pokud to nesplňuje normy a doporučení, tak jste to psal zbytečně a 
> nedostanete zaplaceno. Jasné je jen to co je napsáno v normě a ve 
> specifikaci.
>
> Jen špatné zkušenosti ;-).
>
>
> Dne 27.4.2013 20:55, Jaroslav Buchta napsal(a):
>> Tak snad je jasne, co mam na mysli - 8, 16, 32b
>> A uz jsem do ruznych projektu vkladal spustu zdrojaku z ruznych
>> platforem a nikdy s tim nebyl vetsi problem, pokud to bylo rozumne
>> napsano. Zvolit ENDIAN, zarovnani byva taky nejak preddefinovano,
>> naklonec ja uz beru za standard GCC, protoze v tom prekladam uz
>> prakticky pro vsechny MCU. Ve win uz radsi C#, proc si komplikovat zivot
>> ;-)
>>
>> Dne 27. 4. 2013 19:31, Josef Štengl napsal(a):
>>> Ne, je.
>>>
>>> BYTE, WORD, DWORD - nevím co tím myslíte. Takové typy C nezná. A já
>>> vždycky nevím, kolik bitů ten word je. Někdy 16, někdy 32, záleží na
>>> šířce registrů nebo sběrnice a s kým se bavíte. Tyto typy nejsou
>>> obecně specifikovány.
>>>
>>> Makra align jako takové v C neexistují, pokud si je nevytvoříte a
>>> pokud máte na mysli atributy či pragmy, tak ty jsou silně závislé na
>>> překladačích. Pokud programuje na více cílových platforem a pro více
>>> překladačů, je to kraj zapovězený a vstoupit to něj smí jen lidé znalí
>>> a jen když je to nezbytně nutné.
>>>
>>> Nejde o to jestli je to implementováno víceméně stejně, jde o to že to
>>> není standardizováno a je to implementováno víceméně stejně.
>>>
>>> Zrovna bitová pole jsou závislá na endianitě. S tím LSB máte pravdu,
>>> ale problém je, že to LSB je pokaždé na jiné straně, což se může být
>>> problém v komunikaci s perifériemi, které jsou většinou v malých
>>> indiánech a převádí se podle nastavení procesoru. Pokud píšete
>>> ovladače na konkrétní zařízení, je možná pouze jedna endianita a
>>> nemusí mít SIL nebo ASIL tak to vem čert, ale pokud máte procesor
>>> biendian a nevíte jestli se to bude překládat pro malé nebo velké
>>> indiány, tak jste a) v jednom případě v průseru b) obklíčen #ifdefy a
>>> stejně máte možný skrytý problém s jiným překladačem.
>>>
>>> Obecně výskyt union je známkou špatné programovací techniky. Až na
>>> vyjímky a ty poznáte, jsou to většinou nádherné a účelově vymyšlené
>>> konstrukce.
>>>
>>>
>>> ced
>>>
>>> Dne 27.4.2013 18:53, Jaroslav Buchta napsal(a):
>>>> Nevim jak s bitovymi poli ale union pro pristyp BYTE, WORD, 
>>>> DWORD... se
>>>> vidi celkem bezne, da se to osetrit ruznumi makry ALIGN.... 
>>>> xxxENDIAN...
>>>> aby to bylo univerzalne prenositelne a je to OK. Zas takovy bordel v
>>>> ruznych implementacich neni a funguje to celkem stabilne (bitova 
>>>> pole by
>>>> se taky mela postupne umistovat do standardniho typu (int) od LSB ve
>>>> vsech implementacich, ne? )
>>>>
>>>> Dne 27. 4. 2013 18:48, Miroslav Draxal napsal(a):
>>>>>
>>>>> Díky, tohle funguje,
>>>>>
>>>>> Na štábní kultuře zapracuji, v tomto projektu již nechám sprasenou.
>>>>>
>>>>> S těmi ukazateli mam vždy problém, že nějak neumím najít systém, 
>>>>> odkud
>>>>> ten řádek mám začít číst. I za 10 let v tom budu plavat.
>>>>>
>>>>> *From:*hw-list-bounces na list.hw.cz [mailto:hw-list-bounces na list.hw.cz]
>>>>> *On Behalf Of *Josef Štengl
>>>>> *Sent:* Saturday, April 27, 2013 2:26 PM
>>>>> *To:* HW-news
>>>>> *Subject:* Re: C _ jak rozepsat řádek
>>>>>
>>>>> On v nich trošku plave skoro každý :-)
>>>>>
>>>>> To jak máte napsáno „// tohle je OK“, tak to je v pořádku protože
>>>>> pracujete s ukazatelem na strukturu, kterou derefenrecujete a
>>>>> přistupujete k ní jako ke struktuře resp. přímo k položce struktury.
>>>>> Ten
>>>>> typ položky je důležitý, protože položky nazvané Bit[0-7] jsou 
>>>>> položky
>>>>> bitového pole, a položka bitového pole nemá adresu, takže na něj 
>>>>> nelze
>>>>> vytvořit ukazatel. Viz pozn. 106 dokumentu n1256: (C99 draft)
>>>>>
>>>>> The unary & (address-of) operator cannot be applied to a bit-field
>>>>> object; thus, there are no pointers to or arrays of bit-field 
>>>>> objects.
>>>>>
>>>>> Takže se pak přes ukazatel snažíte získat adresu položky pole, 
>>>>> která je
>>>>> ovšem položka bitového pole a ten nemá adresu a skončí to chybou.
>>>>>
>>>>> Dále jen poznámky pod čarou. Pokud vás rozčílí, tak si jich 
>>>>> nevšímejte:
>>>>>
>>>>> Název unionu začíná podtržítkem, což má jazyk C rezervovaný pro 
>>>>> budoucí
>>>>> použití. Podtržítka na začátku čehokoliv v aplikačních programech
>>>>> nepoužívat!
>>>>>
>>>>> Zvážil bych použití bitového pole ve stylu
>>>>>
>>>>> http://c-faq.com/misc/bitsets.html
>>>>>
>>>>> Jen k tomu mám poznámku, že char by měl být unsigned char, protože
>>>>> by se
>>>>> neměly provádět bitové operace na znaménkových typech. Ve velmi
>>>>> speciálních případech dostáváme zajímavě nesprávné výsledky.
>>>>>
>>>>> Vypadá to, že se snažíte mít různý přístup k jednomu místu v paměti s
>>>>> využitím typu union. To je z hlediska specifikace C chybně, 
>>>>> protože jak
>>>>> se ukládají data v položce union je jen a pouze záležitost 
>>>>> překladače a
>>>>> jinde by to nemuselo fungovat správně (dobrá, to že jsem se s tím 
>>>>> ještě
>>>>> nesetkal, neznamená že se to prohlásí za standard. Aby to pak 
>>>>> nedopadlo
>>>>> jak s tím raketoplánem co vybouchl :-)
>>>>>
>>>>> Pro mě je to příklad toho jak by se to psát nemělo. Jestli mi do toho
>>>>> nic není, tak si toho nevšímejte :-D.
>>>>>
>>>>> Hmm než jsem to dopsal, tak toto od pana Augustýna by mohlo fungovat.
>>>>>
>>>>> (*pProgEEpr).EndProgram = 1;
>>>>>
>>>>> Protože se nejprve provede dereference ukazatele na strukturu a 
>>>>> pak se
>>>>> přistupuje k položce.
>>>>>
>>>>> Hezký den.
>>>>>
>>>>>
>>>>> Dne 27.4.2013 12:18, Miroslav Draxal napsal(a):
>>>>> > Dobrý den
>>>>> >
>>>>> > Mějme
>>>>> >
>>>>> > char MenuPolozkaSet;
>>>>> >
>>>>> > typedef union {
>>>>> >
>>>>> > char value;
>>>>> >
>>>>> > struct {
>>>>> >
>>>>> > unsigned Bit0 : 1;
>>>>> >
>>>>> > unsigned Bit1 : 1;
>>>>> >
>>>>> > unsigned Bit2 : 1;
>>>>> >
>>>>> > unsigned Bit3 : 1;
>>>>> >
>>>>> > unsigned Bit4 : 1;
>>>>> >
>>>>> > unsigned Bit5 : 1;
>>>>> >
>>>>> > unsigned Bit6 : 1;
>>>>> >
>>>>> > unsigned Bit7 : 1;
>>>>> >
>>>>> > } Bits;
>>>>> >
>>>>> > struct {
>>>>> >
>>>>> > unsigned val : 7;
>>>>> >
>>>>> > unsigned bit_ : 1;
>>>>> >
>>>>> > } ProlnutiPauza;
>>>>> >
>>>>> > struct {
>>>>> >
>>>>> > unsigned Mesic : 5;
>>>>> >
>>>>> > unsigned AutoOnOff : 1;
>>>>> >
>>>>> > unsigned EndProgram : 1;
>>>>> >
>>>>> > };
>>>>> >
>>>>> > } _ProgramEEprom;
>>>>> >
>>>>> > (*((_ProgramEEprom*) & MenuPolozkaSet)).EndProgram = 1; // tohle
>>>>> je OK
>>>>> >
>>>>> > Pokud bych to chtěl rozepsat přes fyzický ukazatel
>>>>> >
>>>>> > _ProgramEEprom *pProgEEpr = (_ProgramEEprom*) &MenuPolozkaSet;
>>>>> >
>>>>> > *pProgEEpr.EndProgram = 1;
>>>>> >
>>>>> > To hází chybu
>>>>> >
>>>>> > MenuKey.c:261: error: struct/union required
>>>>> >
>>>>> > MenuKey.c:261: error: illegal conversion between types
>>>>> >
>>>>> > Což asi chápu, ale jak to napsat. Snažím se tomu přijít na kloub.
>>>>> V těch
>>>>> > pointerech plavu.
>>>>> >
>>>>> >
>>>>> >
>>>>> > __________ Informace od ESET NOD32 Antivirus, verze databaze 8272
>>>>> > (20130426) __________
>>>>> >
>>>>> > Tuto zpravu proveril ESET NOD32 Antivirus.
>>>>> >
>>>>> > http://www.eset.cz
>>>>> >
>>>>> >
>>>>> > _______________________________________________
>>>>> > HW-list mailing list - sponsored by www.HW.cz <http://www.HW.cz>
>>>>> > Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
>>>>> > http://list.hw.cz/mailman/listinfo/hw-list
>>>>> _______________________________________________
>>>>> HW-list mailing list - sponsored by www.HW.cz <http://www.HW.cz>
>>>>> Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
>>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>>>
>>>>>
>>>>>
>>>>> __________ Informace od ESET NOD32 Antivirus, verze databaze 8272
>>>>> (20130426) __________
>>>>>
>>>>> Tuto zpravu proveril ESET NOD32 Antivirus.
>>>>>
>>>>> http://www.eset.cz
>>>>>
>>>>>
>>>>>
>>>>> __________ Informace od ESET NOD32 Antivirus, verze databaze 8272
>>>>> (20130426) __________
>>>>>
>>>>> Tuto zpravu proveril ESET NOD32 Antivirus.
>>>>>
>>>>> http://www.eset.cz
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> HW-list mailing list - sponsored bywww.HW.cz
>>>>> Hw-list na list.hw.cz
>>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> HW-list mailing list - sponsored by www.HW.cz
>>>> Hw-list na list.hw.cz
>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>> _______________________________________________
>>> HW-list mailing list - sponsored by www.HW.cz
>>> Hw-list na list.hw.cz
>>> http://list.hw.cz/mailman/listinfo/hw-list
>>
>> _______________________________________________
>> HW-list mailing list - sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list