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

Josef Štengl ok1ced na nagano.cz
Sobota Duben 27 22:11:37 CEST 2013


	Já to chápu a nic víc v tom nehledám :-).
	Bohužel, když vidím jak programují lidi vyšlí ze školy se všemi 
nectnostmi které v jazyce C je možno vytvořit, tak vidím svoje začátky a 
zoufám si, že se po 15 letech co jsem pryč, pořád učí stejně mizerně :-[
	Mám ještě naivní tendence se to pokoušet měnit.

ced

Dne 27.4.2013 21:59, Jaroslav Buchta napsal(a):
> 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
>
> _______________________________________________
> 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