Не работают функции записи/чтения внутри Code-ключа
Столкнулся со следующей проблемой.
В маске ключа есть защищенная ячейка, которая содержит в себе строку типа "Hello, World". Ячейка активна, чтение по паролю.
Обычным способом ячейка успешно читается:
struct {
DWORD dwSize;
BYTE abData[128];
} sIOData;
// Reading protected item (with a password):
sIOData.dwSize=64;
int nRet = GrdPI_Read(hGrd, 0x04, 0, sIOData.dwSize, sIOData.abData, 54321, NULL);
MemoLog->Lines->Add("PI Value (обычным способом): " + String((char*)sIOData.abData));
А внутри ключа прочитанными данными оказываются нули, при этом функция чтения возвращает GrdE_OK.
Код внутри ключа:
extern struct
{
DWORD dwSize;
BYTE abData[128];
} iodata ALIGNED;
DWORD main(DWORD dwInDataLng, DWORD dwOutDataLng, DWORD dwP1)
{
volatile int i;
int ret = GcaPI_Read( 0, 4, 0, iodata.dwSize, iodata.abData, 0, 0);
if (ret == GrdE_OK)
{
GcaLedOff(0);
for (i = 0; i < 500000; i++);
GcaLedOn(0);
}
if (iodata.abData[1] != 0)
{
GcaLedOff(0); // Этот код по факту не выполняется !
for (i = 0; i < 500000; i++);
GcaLedOn(0);
}
return ret; // в главной программе проверял - возвращается GrdE_OK
}
Из-за чего может быть данная ошибка? Даже не представляю где копать.
Точно также происходит и с обычной памятью и функциями Read\Write:
GrdRead и GrdWrite работают как надо, а их аналоги GcaRead и GcaWrite вообще ничего не делают, хотя возвращают GrdE_OK.