QUOTE (AHTOXA @ Sep 29 2012, 13:53)

Узнаем, кто виноват. Может видеобуфер тормозит.
Нет, видеобуфер точно не тормозит. Система виснет до вывода картинки. Извините, что не пояснил этот момент сразу. Сама картинка выводится "влет"

А до вывода картинки происхоид основательная задержка в sleep, затем все sleep'ы отрабатываются правильно. Программа работает сутками, никаких ошибок...
Если обращение к массиву переместить в другое место к коду - проблема остается...
Кажется, я просчитался:
Если прошивка ложится с адреса 0xa0200000, а массив лежит с 0xa0222160, то он лежит после прошивки (она занимает 145760 байт). Т.е. после секции .text. Но все равно, последний адрес в map-файле это
CODE
text.align 0xa02a3188 0x0
0xa02a3188 . = ALIGN (0x8)
0xa02a3188 _etext = .
0xa02a3188 _data_image = _etext
.data 0xa0600000 0x8d0 load address 0xa02a3188
0xa0600000 . = ALIGN (0x4)
0xa0600000 _data = .
Как я понимаю, это фрагмент нам позволяет убедится в том, что секция .data лежит очень далеко после секции .text Т.е. переменные и стек не могут затираться?!
Вставил в оську отладочный код
CODE
void TBaseProcess::sleep(timeout_t timeout)
{
TCritSect cs;
FHAL::halPrintf( "\r\nSleep 0" );
Kernel.ProcessTable[Kernel.CurProcPriority]->Timeout = timeout;
FHAL::halPrintf( "\r\nSleep 1" );
Kernel.set_process_unready(Kernel.CurProcPriority);
FHAL::halPrintf( "\r\nSleep 2" );
Kernel.scheduler();
FHAL::halPrintf( "\r\nSleep 3" );
}
На злосчастной функции выводится
CODE
Sleep 0
Sleep 1
Sleep 2
Т.е. висим прилично в шедулере, пока не знаю где.
Затем быстренько через положенный таймаут выводится то, что надо
CODE
Sleep 0
Sleep 1
Sleep 2
Sleep 3.
Sleep 0
Sleep 1
Sleep 2
Sleep 3.
Sleep 0
Sleep 1
Sleep 2
Sleep 3.
Sleep 0
Sleep 1
Sleep 2
Sleep 3.
Точка после тройки, это точка, изображающая диаграммку) т.е. как и должно быть. Интересно, что на шедулере вся оська виснет... Таймаут функции sleep передается без искажений...
В шедулере висим на этом
CODE
os_context_switcher(Curr_SP_addr, Next_SP);
Причем, если отладочного дебага добавить/убавить, то иногда не висим! Дело в выравнивании? Но, как мне кажется, в скрипте все настроено... Да и каким образом массив в конце может влиять на что-то за несколько строк кода до его чтения? Блин, я уже заинтригован