Цитата(vesago @ Apr 5 2006, 12:59)

Я вообще представлял, что создаешь любые переменные, прописываешь в опциях модуля память и линкер автоматом их размещает. А тут он как-то избирательно подходит. Если массив - в инициализируемой памяти, если переменная, то во внешней. Таким образом не могу придумать главное - как мне помещать и считывать данные из внешней SRAM.
Как Вы просили, так он и сделал - если нужно разместить массив во внешней памяти, то
линкеру нкжно было писать:
Код
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 (+ZI)
}
}
Цитата(vesago @ Apr 5 2006, 12:59)

Вообще реалвью показался мне недружественным. С указателями требует крайней точности. unsigned char *blabla = 0x80000 не пройдет. Обязательно надо поставить unsigned char *blabla = (unsigned long*)0x80000. В функцию передаю аргумент, внутри функции он каким-то макаром передает левое значение. Я и volatile писал - не помогает. Короче не пойму - чего его народ хвалит?
И правильно, что ругается - прямое присвоение указателю числового значения недопустимо.
А ставить надо не unsigned char *blabla = (unsigned long*)0x80000, а unsigned char *blabla = (unsigned char*)0x80000.
Просто с типами надо работать аккуратнее.