Благодарю! Я почитал. Переварю. Пробовал и примеры из кейла разбирать. В общем понятно, но вопрос открыт. Я прописал для LPC2214 основную память и внешнюю срам:
Код
LR_IROM1 0x00000000 0x00040000 {; load region
ER_IROM1 0x00000000 { ; load address = execution address
*.o (RESET, +First)
* (+RO)
}
RW_IRAM1 0x40000000 0x00004000 {; RW data
* (+RW +ZI)
}
RW_RAM1 0x80000000 UNINIT 0x00004000 {
2.o (+RW)
}
}
В файле 2.с создавал различные переменные, которые пользовал в майне. В опшионс для 2.с прописал кроме дефаулт внешнюю память. Мне не понравилось, что линкер упорно не захотел разместить массив данных, расположенный в 2.с во внешней памяти. Массив он пихает в набортную память. Код как положено, а переменные в файле 2. как раз во внешней памяти. Я вообще представлял, что создаешь любые переменные, прописываешь в опциях модуля память и линкер автоматом их размещает. А тут он как-то избирательно подходит. Если массив - в инициализируемой памяти, если переменная, то во внешней. Таким образом не могу придумать главное - как мне помещать и считывать данные из внешней SRAM.
Вообще реалвью показался мне недружественным. С указателями требует крайней точности. unsigned char *blabla = 0x80000 не пройдет. Обязательно надо поставить unsigned char *blabla = (unsigned long*)0x80000. В функцию передаю аргумент, внутри функции он каким-то макаром передает левое значение. Я и volatile писал - не помогает. Короче не пойму - чего его народ хвалит?