Отговори на тема  [ 23 мнения ]  Отиди на страница Предишна  1, 2
АРМ - библиотеки за закъснения? 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10088
Мнение 
що да е неугледно? добре си изглежда :roll:

аз бих го направил фор-а наопъки:
for ( i=t; i>=0; i--) asm("nop");
защото:
- ако е възходящ цикъл, ще има още една операция сравнение, която е незнайно колко дълга в контекста на брой цикли и дифайна няма да е толкова прост за смятане
- не съм сигурен, но инкрементиране със сравнение на константа май не е една инструкция, докато декреметиране със сравнение на 0 е една
- така, като е написано NOP() е функция, която ако не е inline, ще вснесе също неизвестно закъснение


Пон Мар 06, 2006 6:56 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение 
for ( i=t; i>=0; i--) asm("nop");
това има смисъл само ако има асемблерска инструкция JUMP IF ZERO и компилатора е съобразен със това

за различните платформи и компилатори най-добре е да се тестват (--) и (++).....


Пон Мар 06, 2006 7:05 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10088
Мнение 
ами аз почти не съм виждал процесори без такава инструкция :roll: но съм виждал процесори, които нямат инструкция за сравнение
а доколко компилатора ще се усети - трябва да е нещо от ранга на М$-notepad, за да не го направи, дори и без оптимизация


Пон Мар 06, 2006 7:18 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 2:01 pm
Мнения: 1952
Местоположение: Варна
Мнение 
Доколкото разбирам точност не се гони. Аз използвам
Код:
inline void Timeout(uint8 timeout){ while(timeout--); };

не знам дали компилатора ти няма да приложи "dead code elimination" в подобен случай. При мен работи с GCC v3.1.1 и -O3.
Не си струва да пишеш на асемблер за подобно нещо.
Горния код го ползвам именно за около 10 такта закъснение при работа с LCD контролер(SED1335F).


Пон Мар 06, 2006 9:01 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10088
Мнение 
това е целта на asm("nop") - да не го махне оптимизатора


Пон Мар 06, 2006 9:53 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 2:01 pm
Мнения: 1952
Местоположение: Варна
Мнение 
Прощавай Дедо, прочетох темата по диагонал и съм пропуснал, че си обърнал внимание на това.
Като резултат на асемблер компилатора трябва да направи това(само за цикъла):
Код:
loop :  subs r0, r0, #1
        bne loop


Вто Мар 07, 2006 1:11 am
Профил
Ранг: Напреднал
Ранг: Напреднал
Аватар

Регистриран на: Пет Окт 21, 2005 8:45 am
Мнения: 499
Мнение 
ДедоБоре написа:
аз бих го направил фор-а наопъки:
for ( i=t; i>=0; i--) asm("nop");


и аз, само че така :

for(i=t; i>0; i--) asm("nop");

_________________
Простотията е Божи дар, но човек не бива да парадира с подаръците си!


Вто Мар 07, 2006 9:37 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Мда, накрая всичките стигнахме до едно решение с много варианти.

Мен по ме занимава въпроса защо ИАР си няма готови функции за тая работа. Щото микрочипския компилатор, дето е манджа с грозде си има и е голямо улеснение. От друга страна обаче АРМ-а с всичките му видове адресации, тактови цикли и кешове прави трудно дефинирането на някаква стандартна функция за подобно нещо. Ама ИАР се тупат че са спецове точно в ембедед системи, а ебати ембедед системата дето да мине без подобни закъснения.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Вто Мар 07, 2006 11:05 am
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 23 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни