<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Форум Guardant &mdash; API и 2 функции]]></title>
		<link>https://forum.guardant.ru/topic/597/</link>
		<atom:link href="https://forum.guardant.ru/feed/rss/topic/597/" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «API и 2 функции».]]></description>
		<lastBuildDate>Fri, 27 Nov 2015 02:55:41 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: API и 2 функции]]></title>
			<link>https://forum.guardant.ru/post/2939/#p2939</link>
			<description><![CDATA[<p>Спасибо, прислали ответ на почту (проверил, работает):</p><p>Тут нужно выровнять адрес загрузки в makefile для каждой из двух сборок загружаемого кода.<br />--- --- ---<br /># RAM configuration:<br />CFG_RAM_ADDR&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = 0x40003000<br />CFG_RAM_SIZE&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = 0x00004FE0<br />--- --- ---<br />Так, например, загружаемый код №1:<br /># ROM configuration:<br />CFG_PROGRAM_ADDR&nbsp; &nbsp; &nbsp; &nbsp; = 0x00020000<br />CFG_PROGRAM_SIZE&nbsp; &nbsp; &nbsp; &nbsp; = 0x00008000<br />Так, например, загружаемый код №2:<br /># ROM configuration:<br />CFG_PROGRAM_ADDR&nbsp; &nbsp; &nbsp; &nbsp; = 0x00030000<br />CFG_PROGRAM_SIZE&nbsp; &nbsp; &nbsp; &nbsp; = 0x00008000</p><p>Также необходимо выравнивать и синхронизировать память и в самих сборках загружаемого кода, чтобы они могли работать с общими, специально выделенными областями RAM, и не &quot;портить&quot; те области, которые должны использоваться каждой из сборок изолированно, для собственных нужд.</p><p>Так, например, загружаемый код №1 может содержать такие объявления:</p><p>DWORD sharedbuffer[100] NO_INIT; // общая память<br />BYTE buffer_LC1[1024]; // буфер для загружаемого кода №1<br />BYTE buffer_LC2[1024] NO_INIT; //буфер для выравнивания, в этом коде нигде не используется</p><p>DWORD main(DWORD dwInDataLng, DWORD dwOutDataLng, DWORD dwP1)<br />{<br />&nbsp; &nbsp; DWORD ret = sharedbuffer[ 0 ];<br />&nbsp; &nbsp; sharedbuffer[ 0 ] = 1;<br />&nbsp; &nbsp; return ret;<br />}</p><p>В свою очередь в загружаемом коде №2 будут следующие аналогичные объявления:</p><p>DWORD sharedbuffer[100] NO_INIT; // общая память<br />BYTE buffer_LC1[1024] NO_INIT; // буфер для выравнивания, в этом коде нигде не используется<br />BYTE buffer_LC2[1024]; // буфер для загружаемого кода №2</p><p>DWORD main(DWORD dwInDataLng, DWORD dwOutDataLng, DWORD dwP1)<br />{<br />&nbsp; &nbsp; DWORD ret = sharedbuffer[ 0 ];<br />&nbsp; &nbsp; sharedbuffer[ 0 ] = 2;<br />&nbsp; &nbsp; return ret;<br />}</p>]]></description>
			<author><![CDATA[null@example.com (astafiev)]]></author>
			<pubDate>Fri, 27 Nov 2015 02:55:41 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/2939/#p2939</guid>
		</item>
		<item>
			<title><![CDATA[API и 2 функции]]></title>
			<link>https://forum.guardant.ru/post/2936/#p2936</link>
			<description><![CDATA[<p>Здравствуйте.<br />Вопрос: если загрузить 2 исполняемых кода, то как сделать у них какой-то общий буфер (например, на 32 байта),<br />который будет доступен только ВНУТРИ ключа и не доступен из программы ?</p><p>(общий буфер нужен для обмена данными между двух программ).<br />Если написать в каждой программе:<br />DWORD common[ 32 ] ALIGNED NO_INIT;<br />не проходит: если записать данные в 1-ой программе, то при считывании их во 2-ой программе - данные не видятся !</p>]]></description>
			<author><![CDATA[null@example.com (astafiev)]]></author>
			<pubDate>Wed, 25 Nov 2015 11:41:42 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/2936/#p2936</guid>
		</item>
	</channel>
</rss>
