Цитата(Student Pupkin @ Aug 7 2008, 22:33)

Под отладкой увидел, что сделал не то совсем, поэтому этот фрагмент поменял:
int i,j;
for(j=0;j<=3;j++){ // сдвиг
for(i=127;i!=0;i--){
video_ram[128*j+i] = video_ram[128*j+i-1];
}
}
Бога ради не сочтите за "наезд", но Вам еше рано отлаживать и писать рано

надо учиться. Начните с вдумчивого чтения литературы (чуть было не сказал "любой", но вспомнил "творение" Редькина и вздрогнул ) по 'C' и чуть-чуть по ARM архитектуре. Ибо написанное Вам выглядит дико
- побайтное обращение к памяти, тем более для такого жестко 32bit контроллера, как ARM;
- пара индексов (ну прямо бейсик с паскалем);
- постоянные умножения, сложения и вычитания в цикле;
- про корявость режущую глаз типа "i != 0", i обьявленную высоко - это уже мелочи..
Компиляторы по нышним временам оптимизируют и не такое до приличного состояния, но тем не менее писать надо грамотно!
Но даже если выненаписанное переписать максимально эффективно, то все равно соревнаваться в скорости с приличными (а в IAR 5.11 они уже хорошо писаны) библиотечными функциями придется упорно. В качестве первого, рабочего и портируемого шага вышенаписанное должно смотреться так:
Код
memmove( &videо_ram[0*128+1], &videо_ram[0*128], (128-1) );
memmove( &videо_ram[1*128+1], &videо_ram[1*128], (128-1) );
memmove( &videо_ram[2*128+1], &videо_ram[2*128], (128-1) );
memmove( &videо_ram[3*128+1], &videо_ram[3*128], (128-1) );
Дальше, поскольку массивы имеют тяжелое для memove() вырожденное перекрытие со сдвигом на 1,
можно провать аккуратно уделать memmove() для данного частного случая.