Спасибо, прислали ответ на почту (проверил, работает):
Тут нужно выровнять адрес загрузки в 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;
}