<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум Guardant &mdash; API и 2 функции]]></title>
	<link rel="self" href="https://forum.guardant.ru/feed/atom/topic/597/" />
	<updated>2015-11-27T02:55:41Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.guardant.ru/topic/597/</id>
		<entry>
			<title type="html"><![CDATA[Re: API и 2 функции]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/2939/#p2939" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[astafiev]]></name>
				<uri>https://forum.guardant.ru/user/1036/</uri>
			</author>
			<updated>2015-11-27T02:55:41Z</updated>
			<id>https://forum.guardant.ru/post/2939/#p2939</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[API и 2 функции]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/2936/#p2936" />
			<content type="html"><![CDATA[<p>Здравствуйте.<br />Вопрос: если загрузить 2 исполняемых кода, то как сделать у них какой-то общий буфер (например, на 32 байта),<br />который будет доступен только ВНУТРИ ключа и не доступен из программы ?</p><p>(общий буфер нужен для обмена данными между двух программ).<br />Если написать в каждой программе:<br />DWORD common[ 32 ] ALIGNED NO_INIT;<br />не проходит: если записать данные в 1-ой программе, то при считывании их во 2-ой программе - данные не видятся !</p>]]></content>
			<author>
				<name><![CDATA[astafiev]]></name>
				<uri>https://forum.guardant.ru/user/1036/</uri>
			</author>
			<updated>2015-11-25T11:41:42Z</updated>
			<id>https://forum.guardant.ru/post/2936/#p2936</id>
		</entry>
</feed>
