Вобщем собрал отладочную платку с 512 кило SRAM. Подключил все как положено по EBI, поставил 2 573х... Вобщем все работает как надо. То есть стандартный апнот от атмела всяко пашет.
пишу тестовую прогу:
так записываю
for (i = 0; i < video_memory; i++)
{
buff[i]=color;
ch=0xff;
__far_mem_write(i+SRAM_ADDR,ch);
i++;
cl=0х00;
__far_mem_write(i+SRAM_ADDR,cl);
}
color = 0;
так читаю
for ( i = 0; i <video_memory; i++)
{
color=__far_mem_read(i+SRAM_ADDR)<<8;
i++;
color=color + __far_mem_read(i+SRAM_ADDR);
ili9320_WriteData(color);
Clr_nWr;
Set_nWr;
}
Set_Cs;
}
все работает идеально.
Собственно вопрос. Как заставить компилятор работать с переменными во внешней памяти. Типа
u16 buff[20000];
ну и собственно запись чтение в этот буфер.
Сразу оговорюсь в настройках проекта в system ставил галку enable external sram. Memory model ставил HUGE.
Просто чутка недопонял в 3х пунктах
RAM ROM Non volatile
В RAM я так понял ставим стандартный адрес внутренней срам с адреса 0х2000 длиной в 0х1000(4 кило)
в ROM я ничего не пишу, не знаю что
в Non Volatile - (я так понял это внешняя срам) я прописал соответственно 512 кило срам.
Просьба не обсмеивать мои предположения ( в настройках иар лазил редко да и подключение срам внешней делаю в первый раз).
Щас компилер понимает запись типа u16 buff[20000];
ошибка не вызывается о переполнении, но там всегда 00, что туда ни пиши. То же самое наблюдается с остальными переменными.
То есть запись типа а=0хffff при проверки к примеру той же записью в жк выдается черной точкой(00) хотя передача функе напрямую обходя переменную работает.
Подскажите пожалуйста что не так.