Цитата(ведущий_специалист @ Sep 25 2010, 12:45)

Щас компилер понимает запись типа u16 buff[20000];
Это вам не Паскаль.

Компилятор пропустит всё что угодно. Границы не контролируются. Линкер может указать, что "не влазит".
Цитата
ошибка не вызывается о переполнении, но там всегда 00, что туда ни пиши. То же самое наблюдается с остальными переменными.
То есть запись типа а=0хffff при проверки к примеру той же записью в жк выдается черной точкой(00) хотя передача функе напрямую обходя переменную работает.
Подскажите пожалуйста что не так.
Вы должны указать место, куда размещаете массив.
Смысл в том, что скорее всего, компилятор размещает это всё единым куском. Поэтому открытие массива может осуществлятся и во внутренней памяти. Либо просто адреса попутаны и линкер не туда "укладывает".
Проверить это просто. Перейдите в ассемблер и посмотрите по какому адресу обращается.
Как настроить.
1) Можно в настройках линкера установить галочку на вывод листинга. И тогда, в заголовке файла вы увидите тот стандартный xcl файл, который подключает линкер по умолчанию. Его можно и просмотреть.
2) Можно написать свой файл xcl (и это будет лучший вариант), взяв за основу файл с п.1. Там разместить сегменты так, как вам надо. Ну а массив располагать уже в конкретном сегменте памяти. В опциях указать имя этого xcl файла.