реклама на сайте
подробности

 
 
> IAR 5.11 LPC2478 (отладка в ОЗУ) - чуть меняю, прогу - отладчик тормозит и улетает
Student Pupkin
сообщение Aug 7 2008, 20:33
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 23-05-08
Пользователь №: 37 760



Прошу, подскажите, в какую сторону копать.
Пытался сделать эффект "циклического" сдвига изображения на ЖКИ (128х32, I2C). Сам ЖКИ считывать данные не позволяет. Поэтому определил массив char video_ram[512] - видеопамять. Сначала меняю содержимое video_ram, потом просто по I2C переписываю его в ОЗУ самого дисплея.

В функции для "циклического сдвига" есть такой фрагмент:

int i,j;
for(j=0;j<=3;j++){ // сдвиг
for(i=1;i<=127;i++){
video_ram[128*j+i] = video_ram[128*j+i-1];
}
}

Под отладкой увидел, что сделал не то совсем, поэтому этот фрагмент поменял:

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];
}
}

Это было единственной изменение. При всех попытках запуска проги под отладчиком (в ОЗУ) было следующее:
1) Отладчик стал запускаться значительно дольше ( IAR повисает секунд на 10-15)
2) При пошаговой отладке переход на следующую команду тоже с тормозами приличными
3) При запуске программы (неважно, до точки останова или без них) проц повисает (на ЖКИ хоть какая-то хрень но выводиться должна, а этого нет), при попытке сделать halt IAR повисает навечно...


Может у кого-то что-то подобное уже было? Где причину искать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение Aug 8 2008, 07:00
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(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];
}
}

Бога ради не сочтите за "наезд", но Вам еше рано отлаживать и писать рано sad.gif надо учиться. Начните с вдумчивого чтения литературы (чуть было не сказал "любой", но вспомнил "творение" Редькина и вздрогнул ) по '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() для данного частного случая.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Student Pupkin
сообщение Aug 8 2008, 18:07
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 23-05-08
Пользователь №: 37 760



Нашел, где исправить. Прога заработала. Правда, так и не понял, почему процессор зависал. 07.gif
Думаю, никому подробности не интересны. Итак все со мной понятно.
Многоуважаемому zltigo - спасибо за критику. twak.gif Да, наверно я как программист - отстой. crying.gif
Постараюсь больше в этой теме форума не писать - мое место, как я понял, в теме для новичков.
Если zltigo еще намекнет по поводу рекомендуемой литературы по си (кстати правда - от моего ТВАРЬения попахивает паскалем, си я только начал учить), то буду очень признателен a14.gif
Еще раз приношу извинения - за то, что сюда залез smile.gif
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 09:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01442 секунд с 7
ELECTRONIX ©2004-2016