<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=50&amp;t=9739&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-12-18T21:20:53+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=50&amp;t=9739&amp;mode</id>
<entry>
<author><name><![CDATA[Atlantis]]></name></author>
<updated>2014-12-18T21:20:53+01:00</updated>
<published>2014-12-18T21:20:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9739&amp;p=109382#p109382</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9739&amp;p=109382#p109382"/>
<title type="html"><![CDATA[Re: Przenośność kodu: C --&gt; C++]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9739&amp;p=109382#p109382"><![CDATA[
Hmm... Czyli nie zrozumiałem. Zastosowanie extern &quot;C&quot; {} nie sprawi, że projekt zacznie traktować fragment kodu wedle zasad charakterystycznych dla języka C? Nie zacznie np. bardziej liberalnie traktować rzutowania jednego typu na drugi?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2174">Atlantis</a> — 18 gru 2014, o 21:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atlantis]]></name></author>
<updated>2014-12-18T20:40:08+01:00</updated>
<published>2014-12-18T20:40:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9739&amp;p=109373#p109373</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9739&amp;p=109373#p109373"/>
<title type="html"><![CDATA[Re: Przenośność kodu: C --&gt; C++]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9739&amp;p=109373#p109373"><![CDATA[
<div class="quotetitle">mokrowski napisał(a):</div><div class="quotecontent"><br />W takich przypadkach pierwsze pytania które powinny paść to:<br />1 Czy użyłeś extern &quot;C&quot; ? Język C i C++ inaczej buduje pliki *.o. <br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic7208.html" >topic7208.html</a><!-- l --> &lt;- tu masz na ten temat więcej.<br /></div><br /><br />Tak, ale nie wiem czy dobrze go używam, bo mimo to dostaję błędy wynikające z charakterystyki C++.<br />Weźmy na przykład bibliotekę do parsowania komend AT z Green Booka. Treść pliku komendy_at.c przeniosłem do utworzonego w projekcie pliku komendy_at.cpp, zamykając ją w następującej klamrze:<br /><br />[syntax=cpp]extern &quot;C&quot; {<br /><br />}[/syntax]<br /><br />To samo zrobiłem z zawartością pliku komendy_at.h.<br />Niestety przy kompilacji cały czas dostaję błąd wynikający z rzutowania typów, które są niekompatybilnej w C++.<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">Error   1   invalid conversion from 'void*' to 'int8_t (*)(uint8_t, char*, char*, int) {aka signed char (*)(unsigned char, char*, char*, int)}' &#91;-fpermissive&#93;<br /></div><br /><br />W C ten kod kompilował się bez problemu. Czyżby extern &quot;C&quot; {} nie działało z jakiegoś powodu? Co robię źle?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2174">Atlantis</a> — 18 gru 2014, o 20:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atlantis]]></name></author>
<updated>2014-12-18T09:36:39+01:00</updated>
<published>2014-12-18T09:36:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9739&amp;p=109288#p109288</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9739&amp;p=109288#p109288"/>
<title type="html"><![CDATA[Przenośność kodu: C --&gt; C++]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9739&amp;p=109288#p109288"><![CDATA[
Zdaje sobie sprawę z tego, że pomiędzy C i C++ występują pewne równice, m.in. w definicjach typów, rzutowanie jednego typu na drugi, charakterze stałych itp. Z tego powodu kompilator nieraz zgłosi jakiś błąd i będzie trzeba się trochę pomęczyć.<br />Teraz jednak mam do czynienia z innym problemem - kod się kompiluje, ale nie działa prawidłowo.<br /><br />Sytuacja wygląda następująco:<br />Przerzucam się powoli na AVR C++, próbując wykorzystać biblioteki z Arduino w swoich projektach. W tej chwili udało mi się doprowadzić Arduino Ethernet library do stanu, w którym kompiluje się ona bez problemu. Działa także inicjowanie układu W5100 oraz nawiązywanie prostej komunikacji. Do debugowania potrzebuję jednak UART-a. Wziąłem więc bibliotekę Pana Mirka (ta z Green Booka) i po prostu skopiowałem ją do plików mkuart.h i mkuart.cpp. Treść plików została pożyczona z projektu (napisanego w C), w którym komunikacja po serialu działała bez najmniejszych problemów na <strong>tej samej</strong> płytce uruchomieniowej, również mojego projektu. We właściwościach ustawiona jest ta sama wartość F_CPU, właściwa dla kwarcu na płytce.<br /><br />Program skompilował się bez problemu, ale po jego wgraniu nie widziałem w terminalu żadnych danych wysyłanych przez uart_puts(). Jednocześnie płytka odpowiadała na wysyłane pakiety UDP, a więc wiadomo, że pozostały kod się wykonywał.<br /><br />Taki problem może wynikać z jakichś różnic w specyfice języków C i C++, czy raczej to ja coś pomieszałem i po prostu nie widzę ewidentnego błędu, patrząc w kod?<br /><br />Oczywiście później chętnie doprowadziłbym tę bibliotekę do stanu obiektowego, ale na razie chcę po prostu uruchomić kod.<br /><br />Mam też nadzieję, że przeniesienie do C++ biblioteki parsującej komendy AT nie będzie zbyt skomplikowane. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2174">Atlantis</a> — 18 gru 2014, o 09:36</p><hr />
]]></content>
</entry>
</feed>