<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[SDS PLC/PAC: Měření Energie & OnlineTechnology.cz - Makra #define]]></title>
	<link rel="self" href="https://forum.sds.an-d.cz/extern.php?action=feed&amp;tid=1082&amp;type=atom" />
	<updated>2022-09-26T07:29:40Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.sds.an-d.cz/viewtopic.php?id=1082</id>
		<entry>
			<title type="html"><![CDATA[Re: Makra #define]]></title>
			<link rel="alternate" href="https://forum.sds.an-d.cz/viewtopic.php?pid=7394#p7394" />
			<content type="html"><![CDATA[<p>Děkuji za vysvětlení, teď je mi to úplně jasné.</p>]]></content>
			<author>
				<name><![CDATA[absolonj]]></name>
				<uri>https://forum.sds.an-d.cz/profile.php?id=11958</uri>
			</author>
			<updated>2022-09-26T07:29:40Z</updated>
			<id>https://forum.sds.an-d.cz/viewtopic.php?pid=7394#p7394</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Makra #define]]></title>
			<link rel="alternate" href="https://forum.sds.an-d.cz/viewtopic.php?pid=7391#p7391" />
			<content type="html"><![CDATA[<p>Původní zápis, ač samozřejmě správný, v tomto případě nelze použít (jak jsem psal, lze se na to dívat tak, že makra s kódem jsou zpracována až za preprocesorem (téměř) jako funkce).</p><p>Je to potřeba zapsat takto:</p><div class="codebox"><pre><code>  #define TIMER_VALUE 16
  #define TIMER_start(t, s)   *(t) = (s)

  int timer;
  TIMER_start( &amp;timer, TIMER_VALUE );</code></pre></div><p>Pozn. Závorky (t) a (s) jsou &quot;safety best-practice&quot;, na princip (tzn. primárně zde jde o použití &amp; a *) nemají vliv.</p>]]></content>
			<author>
				<name><![CDATA[adamn]]></name>
				<uri>https://forum.sds.an-d.cz/profile.php?id=7</uri>
			</author>
			<updated>2022-09-25T07:14:30Z</updated>
			<id>https://forum.sds.an-d.cz/viewtopic.php?pid=7391#p7391</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Makra #define]]></title>
			<link rel="alternate" href="https://forum.sds.an-d.cz/viewtopic.php?pid=7390#p7390" />
			<content type="html"><![CDATA[<p>Ještě další dotaz: fungují makra se dvěma prametry? Například:</p><div class="codebox"><pre><code>  #define TIMER_VALUE 16
  #define TIMER_start(t, s) t = s

  int timer;
  TIMER_start(timer, TIMER_VALUE);</code></pre></div><p>neudělá nic, kdežto zápis</p><div class="codebox"><pre><code>  #define TIMER_VALUE 16

  timer =  TIMER_VALUE;</code></pre></div><p>funguje.</p>]]></content>
			<author>
				<name><![CDATA[absolonj]]></name>
				<uri>https://forum.sds.an-d.cz/profile.php?id=11958</uri>
			</author>
			<updated>2022-09-23T10:45:02Z</updated>
			<id>https://forum.sds.an-d.cz/viewtopic.php?pid=7390#p7390</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Makra #define]]></title>
			<link rel="alternate" href="https://forum.sds.an-d.cz/viewtopic.php?pid=7376#p7376" />
			<content type="html"><![CDATA[<p>Děkuji za rychlost opravy</p>]]></content>
			<author>
				<name><![CDATA[absolonj]]></name>
				<uri>https://forum.sds.an-d.cz/profile.php?id=11958</uri>
			</author>
			<updated>2022-09-19T14:23:53Z</updated>
			<id>https://forum.sds.an-d.cz/viewtopic.php?pid=7376#p7376</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Makra #define]]></title>
			<link rel="alternate" href="https://forum.sds.an-d.cz/viewtopic.php?pid=7375#p7375" />
			<content type="html"><![CDATA[<p>Chyba nalezena, opravena (natvrdo se to přetypovávalo na int32_t). Oprava bude v dalším vydání FW.</p>]]></content>
			<author>
				<name><![CDATA[adamn]]></name>
				<uri>https://forum.sds.an-d.cz/profile.php?id=7</uri>
			</author>
			<updated>2022-09-16T16:06:55Z</updated>
			<id>https://forum.sds.an-d.cz/viewtopic.php?pid=7375#p7375</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Makra #define]]></title>
			<link rel="alternate" href="https://forum.sds.an-d.cz/viewtopic.php?pid=7366#p7366" />
			<content type="html"><![CDATA[<p>V pohodě, účel dáva smysl.<br />Problému bude nejspíše v implementaci u mě, tam se všude pracuje nativně s int32_t, musím se podívat jak se tam akceptuje to přetypování, ale mělo by, co si z paměti pamatuju (už jsem na tuto část dlouho nesahal), tak makra se interně prakticky interpretují stejně jako funkce, jen svůj zápis ve zdrojovém kódu mají (samozřejmě) jiný.<br />Jak se k tomu dostanu tak dám vědět.</p>]]></content>
			<author>
				<name><![CDATA[adamn]]></name>
				<uri>https://forum.sds.an-d.cz/profile.php?id=7</uri>
			</author>
			<updated>2022-09-07T13:36:57Z</updated>
			<id>https://forum.sds.an-d.cz/viewtopic.php?pid=7366#p7366</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Makra #define]]></title>
			<link rel="alternate" href="https://forum.sds.an-d.cz/viewtopic.php?pid=7365#p7365" />
			<content type="html"><![CDATA[<p>No já jsem zvyklý na různé složité konstrukce, které pro tuto jednoduchou aplikaci nejsou třeba, takže to berte s rezervou. Jen zkoumám možnosti.</p><br /><p>K těm makrům - chtěl jsem vypreparovat jednotlivé byty z IP adresy:</p><div class="codebox"><pre><code>#define IP0(a) ((unsigned int)a &amp; 0x000000FF)
...
unsigned char IP0(unsigned int a) { return (unsigned char)(a &amp; 0x000000FF); }
unsigned char IP1(unsigned int a) { return (unsigned char)((a &gt;&gt; 8) &amp; 0x000000FF); }
...</code></pre></div><p>Funkce fungují, ale makra vracejí nějaké vysoké hodnoty - většinou v nejvyšším a nejnižším bytu.</p>]]></content>
			<author>
				<name><![CDATA[absolonj]]></name>
				<uri>https://forum.sds.an-d.cz/profile.php?id=11958</uri>
			</author>
			<updated>2022-09-07T12:34:26Z</updated>
			<id>https://forum.sds.an-d.cz/viewtopic.php?pid=7365#p7365</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Makra #define]]></title>
			<link rel="alternate" href="https://forum.sds.an-d.cz/viewtopic.php?pid=7364#p7364" />
			<content type="html"><![CDATA[<p>Na ty makra se musím podívat, ale jistá omezení v preprocesoru jsou - je navržen hlavně pro základní použití define/ifdef a podobných, neměl jsem tam cíl pro úplně hluboké kouzlení s preprocesorem, když se to většinou dá zapsat čistě (a čitelně). Nicméně makra jsou implementována a v potřebné (doufám že dobře určené) míře fungují.</p><p>Příklad s HIBYTE(a) by ale fungovat měl, musím se podívat co se tam děje a vyzkoušet to.<br />Nakonec i ty příklady výše by také měli být OK, musím si to projít.<br />Zkuste nejprve nadefinovat ty proměnné, a až pak jim přiřadit hodnoty.</p><p>typedef je zablokován jako klíčové slovo, ale definice nových typů není obecně povolena / implementována, pro tento embedded systém to nemělo velký význam vůči náročnosti implementace a rozsahu potřebných testů.</p>]]></content>
			<author>
				<name><![CDATA[adamn]]></name>
				<uri>https://forum.sds.an-d.cz/profile.php?id=7</uri>
			</author>
			<updated>2022-09-07T12:22:38Z</updated>
			<id>https://forum.sds.an-d.cz/viewtopic.php?pid=7364#p7364</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Makra #define]]></title>
			<link rel="alternate" href="https://forum.sds.an-d.cz/viewtopic.php?pid=7363#p7363" />
			<content type="html"><![CDATA[<p>Jsem překvapen, že makra fungují, i když ne asi úplně správně.</p><p>Např.:</p><div class="codebox"><pre><code>  #define SYS_DEVICE_IP_ADDRESS 12
  #define SYS_GetIPAddress() SDS_get_u32(SYS_DEVICE_IP_ADDRESS)
  #define SYS_GetIPAddress1() SDS_get_u32(12)

   (1) unsigned int localAddress = SDS_get_u32(SYS_DEVICE_IP_ADDRESS);
   (2) unsigned int localAddress = SYS_GetIPAddress();
   (3) unsigned int localAddress = SYS_GetIPAddress1();</code></pre></div><p>Řádek (1) správně přečte IP adresu, např. 192.168.88.88, řádky (2) a (3) jen její spodní část (vrací 0.169.88.88). Je vidět, že se správně dosadí první definovaná konstanta do makra ve druhém #define, protože obě varianty vracejí stejnou hodnotu. Možná něco dělám špatně, když tak vystačím s variantou (1).</p><p>Podobně se chovají i makra s parametry, pro každý parmetr je jiná hodnota výsledku, nicméně špatná:</p><div class="codebox"><pre><code>#define HIBYTE(a) ((a &gt;&gt; 24) &amp; 0x000000FF).</code></pre></div><p>A ještě otázka: typedef kompilátor vezme, ale asi to není nijak implementováno, že?</p>]]></content>
			<author>
				<name><![CDATA[absolonj]]></name>
				<uri>https://forum.sds.an-d.cz/profile.php?id=11958</uri>
			</author>
			<updated>2022-09-07T10:50:37Z</updated>
			<id>https://forum.sds.an-d.cz/viewtopic.php?pid=7363#p7363</id>
		</entry>
</feed>
