Вобщем собрал отладочную платку с 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) хотя передача функе напрямую обходя переменную работает. Подскажите пожалуйста что не так.
|