(2015-11-25 14:48:08 отредактировано astafiev)

API и 2 функции

Здравствуйте.
Вопрос: если загрузить 2 исполняемых кода, то как сделать у них какой-то общий буфер (например, на 32 байта),
который будет доступен только ВНУТРИ ключа и не доступен из программы ?

(общий буфер нужен для обмена данными между двух программ).
Если написать в каждой программе:
DWORD common[ 32 ] ALIGNED NO_INIT;
не проходит: если записать данные в 1-ой программе, то при считывании их во 2-ой программе - данные не видятся !

Re: API и 2 функции

Спасибо, прислали ответ на почту (проверил, работает):

Тут нужно выровнять адрес загрузки в makefile для каждой из двух сборок загружаемого кода.
--- --- ---
# RAM configuration:
CFG_RAM_ADDR            = 0x40003000
CFG_RAM_SIZE            = 0x00004FE0
--- --- ---
Так, например, загружаемый код №1:
# ROM configuration:
CFG_PROGRAM_ADDR        = 0x00020000
CFG_PROGRAM_SIZE        = 0x00008000
Так, например, загружаемый код №2:
# ROM configuration:
CFG_PROGRAM_ADDR        = 0x00030000
CFG_PROGRAM_SIZE        = 0x00008000

Также необходимо выравнивать и синхронизировать память и в самих сборках загружаемого кода, чтобы они могли работать с общими, специально выделенными областями RAM, и не "портить" те области, которые должны использоваться каждой из сборок изолированно, для собственных нужд.

Так, например, загружаемый код №1 может содержать такие объявления:

DWORD sharedbuffer[100] NO_INIT; // общая память
BYTE buffer_LC1[1024]; // буфер для загружаемого кода №1
BYTE buffer_LC2[1024] NO_INIT; //буфер для выравнивания, в этом коде нигде не используется

DWORD main(DWORD dwInDataLng, DWORD dwOutDataLng, DWORD dwP1)
{
    DWORD ret = sharedbuffer[ 0 ];
    sharedbuffer[ 0 ] = 1;
    return ret;
}

В свою очередь в загружаемом коде №2 будут следующие аналогичные объявления:

DWORD sharedbuffer[100] NO_INIT; // общая память
BYTE buffer_LC1[1024] NO_INIT; // буфер для выравнивания, в этом коде нигде не используется
BYTE buffer_LC2[1024]; // буфер для загружаемого кода №2

DWORD main(DWORD dwInDataLng, DWORD dwOutDataLng, DWORD dwP1)
{
    DWORD ret = sharedbuffer[ 0 ];
    sharedbuffer[ 0 ] = 2;
    return ret;
}