<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[SDS PLC/PAC: Měření Energie & OnlineTechnology.cz - Makra #define]]></title>
		<link>https://forum.sds.an-d.cz/viewtopic.php?id=1082</link>
		<atom:link href="https://forum.sds.an-d.cz/extern.php?action=feed&amp;tid=1082&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Nejnovější příspěvky v Makra #define.]]></description>
		<lastBuildDate>Mon, 26 Sep 2022 07:29:40 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Makra #define]]></title>
			<link>https://forum.sds.an-d.cz/viewtopic.php?pid=7394#p7394</link>
			<description><![CDATA[<p>Děkuji za vysvětlení, teď je mi to úplně jasné.</p>]]></description>
			<author><![CDATA[null@example.com (absolonj)]]></author>
			<pubDate>Mon, 26 Sep 2022 07:29:40 +0000</pubDate>
			<guid>https://forum.sds.an-d.cz/viewtopic.php?pid=7394#p7394</guid>
		</item>
		<item>
			<title><![CDATA[Re: Makra #define]]></title>
			<link>https://forum.sds.an-d.cz/viewtopic.php?pid=7391#p7391</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (adamn)]]></author>
			<pubDate>Sun, 25 Sep 2022 07:14:30 +0000</pubDate>
			<guid>https://forum.sds.an-d.cz/viewtopic.php?pid=7391#p7391</guid>
		</item>
		<item>
			<title><![CDATA[Re: Makra #define]]></title>
			<link>https://forum.sds.an-d.cz/viewtopic.php?pid=7390#p7390</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (absolonj)]]></author>
			<pubDate>Fri, 23 Sep 2022 10:45:02 +0000</pubDate>
			<guid>https://forum.sds.an-d.cz/viewtopic.php?pid=7390#p7390</guid>
		</item>
		<item>
			<title><![CDATA[Re: Makra #define]]></title>
			<link>https://forum.sds.an-d.cz/viewtopic.php?pid=7376#p7376</link>
			<description><![CDATA[<p>Děkuji za rychlost opravy</p>]]></description>
			<author><![CDATA[null@example.com (absolonj)]]></author>
			<pubDate>Mon, 19 Sep 2022 14:23:53 +0000</pubDate>
			<guid>https://forum.sds.an-d.cz/viewtopic.php?pid=7376#p7376</guid>
		</item>
		<item>
			<title><![CDATA[Re: Makra #define]]></title>
			<link>https://forum.sds.an-d.cz/viewtopic.php?pid=7375#p7375</link>
			<description><![CDATA[<p>Chyba nalezena, opravena (natvrdo se to přetypovávalo na int32_t). Oprava bude v dalším vydání FW.</p>]]></description>
			<author><![CDATA[null@example.com (adamn)]]></author>
			<pubDate>Fri, 16 Sep 2022 16:06:55 +0000</pubDate>
			<guid>https://forum.sds.an-d.cz/viewtopic.php?pid=7375#p7375</guid>
		</item>
		<item>
			<title><![CDATA[Re: Makra #define]]></title>
			<link>https://forum.sds.an-d.cz/viewtopic.php?pid=7366#p7366</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (adamn)]]></author>
			<pubDate>Wed, 07 Sep 2022 13:36:57 +0000</pubDate>
			<guid>https://forum.sds.an-d.cz/viewtopic.php?pid=7366#p7366</guid>
		</item>
		<item>
			<title><![CDATA[Re: Makra #define]]></title>
			<link>https://forum.sds.an-d.cz/viewtopic.php?pid=7365#p7365</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (absolonj)]]></author>
			<pubDate>Wed, 07 Sep 2022 12:34:26 +0000</pubDate>
			<guid>https://forum.sds.an-d.cz/viewtopic.php?pid=7365#p7365</guid>
		</item>
		<item>
			<title><![CDATA[Re: Makra #define]]></title>
			<link>https://forum.sds.an-d.cz/viewtopic.php?pid=7364#p7364</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (adamn)]]></author>
			<pubDate>Wed, 07 Sep 2022 12:22:38 +0000</pubDate>
			<guid>https://forum.sds.an-d.cz/viewtopic.php?pid=7364#p7364</guid>
		</item>
		<item>
			<title><![CDATA[Makra #define]]></title>
			<link>https://forum.sds.an-d.cz/viewtopic.php?pid=7363#p7363</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (absolonj)]]></author>
			<pubDate>Wed, 07 Sep 2022 10:50:37 +0000</pubDate>
			<guid>https://forum.sds.an-d.cz/viewtopic.php?pid=7363#p7363</guid>
		</item>
	</channel>
</rss>
