Arduino - platnost #define

Pavel Kutina hw na prelude.cz
Středa Květen 6 17:07:25 CEST 2020


Priznam se, ze v tomhle porad plavu, takze mne to trochu prekvapilo, ale 
chapu, ze je to vlastnost.

Projekt je to cizi, ktery si priohybam ke svemu HW, ale rad bych, aby to 
chodilo i s originalnim. Je tam docela hezka hromadka ruznych zavislosti a 
potreboval jsem udelat nejake zmeny v tech originalnich knihovnach nejak 
tak, aby se to dalo snad "prepnout", idealne jednim radkem v nektere casti 
meho kodu.

V ramci toho Arduina to ted asi vyresim vlastne "korektne", napsanim 
definice pro muj HW, ale docela by mne zajimalo, jestli se to da nejakym 
zpusobem resit "legalne", tedy jedna direktiva (nebo neco takoveho) spolecna 
pro cely projekt.

Diky, myslel jsem, ze to bude o chlup jednodussi :)

Pavel Kutina


----- Original Message ----- 
From: "Jan Waclawek" <konfera na efton.sk>
To: "HW-news" <hw-list na list.hw.cz>
Sent: Wednesday, May 06, 2020 4:37 PM
Subject: Re: Arduino - platnost #define


>> A v tom je asi to, co nechapu. Vzdyt prece vsechny casti projektu jsou
>> odnekud includovane, nebo by aspon mely byt, ne?
>
> Najpravdepodobnejsie nie.
>
> Teoreticky sa da vacsi projekt robit aj tak, ze sa vsetky zdrojove texty
> z#includuju dohromady do jedneho velkeho, a ten sa skompiluje a smitec.
> Ale nerobi sa to tak.
>
> Inaksie povedane, ak v inkriminovanom zdrojovom texte, v ktorom "nie je
> vidiet" #define v inom subor, nenajdete #include suboru, kde ste napisali
> ten #define - alebo #include suboru ktory #includuje dany subor atd.
> rekurzivne - tak v tom zdrojovom texte ten #define jednoducho nie je.
>
> Dobrym zvykom je ne-#includovat .c subory, t.j. ak ste ten #define 
> napisali
> v nejakom .c, tak je takmer iste, ze ho ziadne ine .c nevidia.
>
> Bohuzial, je v tom vela toho "takto sa to tradicne robi", "kazdy vie ze je
> to tak" a k tomu bordelu prispievaju IDE a aj samotny gcc (t.j. nie
> kompilator ale "driver", ktory ten kompilator a ostatne zlozky prekladaca
> vola), ktore cast toho procesu zakryvaju.
>
> Jednou z tych matucich veci su predkompilovane kniznice, najma systemove,
> ktore su potom ako binarny objekt zdruzene v knizniciach (t.j. velkom
> binarnom subore, lebo zbierka .c suborov nie je kniznica ale "kniznica" -
> to je zase taky terminologicky problem, terminologia nikdy nie je pevna a
> ustalena). To je nieco co je vzdy schovane prekladacom, takze clovek
> nadobudne pocit, ze kedze staci urobit #include <time.h> takze v tom
> <time.h> su niekde vsetky tie funkcie atd. co s time.h suvisia. No nie su.
>
> Mechanizmus, ako su pospajane jednotlive binarne objekty (t.j. vysledky
> kompilacie jednotlivych .c suborov, ktore sa preprocesuju aj kompiluju
> obvykle po jednom) je linkovanie, to s #include nema nic spolocne.
>
> Snazil som sa to rozpisat v tej mojej knizke co som este stale nedopisal
> (napr. http://www.efton.sk/tmp/C_ch12.pdf do tej kapitoly po dnesku asi
> doplnim aj poznamku o viditelnosti #define... :-) ), vlastne sa toho tyka
> pomerne vyznamna cast tej knihy, ale sam s tym nie som spokojny.
>
> wek
>
>
> ----- Original Message ---------------
>
> Subject: Re: Arduino - platnost #define
>   From: "Pavel Kutina" <hw na prelude.cz>
>   Date: Wed, 6 May 2020 16:05:26 +0200
>     To: "HW-news" <hw-list na list.hw.cz>
>
> A v tom je asi to, co nechapu. Vzdyt prece vsechny casti projektu jsou
> odnekud includovane, nebo by aspon mely byt, ne?
>
> V hlavnim souboru mam include nejake knihovny, ta si zase inkluduje mejake
> dalsi a ty zase dalsi vcetne jejich .h), takze ve vysledku to cele visi na
> nejakm strome, ktery zacina v korenu tim hlavnim projektem, takze kdyz
> prave
> v nem udelam onen #define, tak by na to mel slyset ten preprocesor i u te
> inkludovane knihovny z N-te vetve. Ted takhle jsem si to alespon
> predstavoval... Jen mi to takhle nefunguje :)
>
> Pavel Kutina
>
>
> ----- Original Message ----- 
> From: "Jan Waclawek" <konfera na efton.sk>
> To: "HW-news" <hw-list na list.hw.cz>
> Sent: Wednesday, May 06, 2020 3:39 PM
> Subject: Re: Arduino - platnost #define
>
>
>>> Jak se definice dedi
>>
>> Podla salickeho prava ;-)
>>
>> Direktivy preprocesora sa nijako "nededia". Preprocesor je (takmer) len
>> jednoduchy textualny procesor, ktory prechadza suborom, a kde uvidi napr.
>> #define A B, zapamata si, ze ma nahradit za A B, a ked neskor narazi na 
>> A,
>> prepise ho na B.
>>
>> Toto sa deje len v ramci jedneho zdrojoveho textu a len v jednom
>> priechode,
>> t.j. #define z jedneho zdrojoveho textu nie je "vidiet" v inom zdrojovom
>> texte.
>>
>> Pritom si ale treba uvedomit, ze v zdrojovom texte mozu byt zahrnute ine
>> zdrojove texty pomocou direktivy #include, tie zahrnute zdrojove texty sa
>> stavaju pre ucel preprocesora sucastou povodneho zdrojoveho textu.
>>
>> Dohoda je (a to je naozaj len nepisana dohoda), ze sa takto "zahrnaju"
>> tzv.
>> header subory (.h), takze ak chcete aby nejaky #define bol "vidiet" vo
>> viacerych zdrojovych (.c) suboroch, tak ho napisete do nejakeho .h suboru
>> ktory je #includnuty vo vsetkych dotknutych .c suboroch.
>>
>> wek
>>
>>
>> ----- Original Message ---------------
>>
>> Subject: Arduino - platnost #define
>>   From: "Pavel Kutina" <hw na prelude.cz>
>>   Date: Wed, 6 May 2020 14:47:22 +0200
>>     To: "HW-news" <hw-list na list.hw.cz>
>>
>> Zdravim,
>>
>> trochu tu valcim s arduinem, mozna spis s C.
>>
>> Mam tu nejaky bastl, kterym v podstate kopiruju M5Stack, tj., ESP32 s
>> prilepenym displejem ILI9341, nic zvlastniho. Protoze chci pouzit puvodni
>> M5stack knihovny a nesedi mi displej (otoceni je jinak), tak jsem upravil
>> puvodni knihovny pro praci s diplejem, zadrhel je samozrejme v tom, ze 
>> pak
>> nechodi s originalem.
>>
>> Chtel jsem do hlavniho souboru zapsat neco jako:
>>
>> #define ABCD
>>
>> v knihovnach nasledne
>>
>> #ifdef ABCD
>> ....
>> #else
>> ....
>> #endif
>>
>> Logicke, jednoduche - lec nefunkcni. Jak se definice dedi a zpracovavaji 
>> v
>> ramci projektu? V ramci hlavniho kodu natazeneho v IDE to jde, ale v
>> knihovnach se to tvari jako nedefinovane, tusi nekdo, kde by mohl byt
>> problem? Je dost pravdepodobne, ze neco nechapu, nebo delam blbe...
>>
>> Diky.
>>
>> Pavel Kutina
>>
>>
>> -- 
>> Tato zpráva byla zkontrolována na viry programem Avast Antivirus.
>> https://www.avast.com/antivirus
>>
>> _______________________________________________
>> 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