|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 11:41 pm
АРМ - библиотеки за закъснения?
| Автор |
Съобщение |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
 АРМ - библиотеки за закъснения?
Става въпрос за кратки закъснения - до около 1 мс, но да кажем с резолюция под 1мкс.
Нещо от сорта на - 10,100,1000,10000 тактови цикъла. Говорим за закъснения които си ангажират процесора, без таймери, многозадачност и прочие. Просто да му кажеш - изчакай 100 цикъла.
Знам че някой ще каже да ги напиша сам на асемблер, ама още ми е малко мътен асемблера за това говедо. Аз съм разглезен в това отношение от пиковете, къде нещата с тактовите цикли бяха доста по ясни.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пон Мар 06, 2006 1:02 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Добре, нямаш ли свободно таймерче? 
|
| Пон Мар 06, 2006 1:43 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Ами нали се сещаш. Управляваш например екрана. И трябва да закъснееш два от сигналите на 1us. Е сега за една проста входно изходна операция да пускам таймери? Е че само инициализацията и обработката на таймера ще отнеме повече време.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пон Мар 06, 2006 2:03 pm |
|
 |
|
ДедоБоре
Ранг: Форумен бог
Регистриран на: Нед Ное 21, 2004 11:31 pm Мнения: 10088
|
няма да се раминеш без асемблер.
най-малкото нещо е NOP в цикъл. дали ще инлайн или макрос си преценяваш ти
по-трудното е да го направиш универсално, т.е. да работи на всякакви честоти на CPU-то.
ще трябва да се калибрираш в началото. нещо от рода:
пускаш таймера на 1мс и броиш колко nop-а се изпъляват за този период
|
| Пон Мар 06, 2006 2:12 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Е извинявай, ама ако викаш ф-я, докато инициализираш преди да влезеш в цикъла за изчакване, пак ще мине повече от 1 uS. Зависи от тактовата честота де, ама пак.
|
| Пон Мар 06, 2006 2:14 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Няма нужда от NOP. Просто инкрементиране с последващо сравняване. Калибриращият коефициент е достатъчно да бъде инициализиран еднократно при ресета.
|
| Пон Мар 06, 2006 2:16 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Ами обикновенно практиката е такава. Правят се различни функции например за 10,100*n, 1000*n тактови цикъла.
10 цикъла се прави макрос с нопове, 100 се прави като макрос на асемблер с някъв луп n-пъти, от там на горе обикновенно са по висши функции. Идеята е да не се специфицира време, а просто брой цикли n пъти. После като си знаеш тактовата честота - сам си определяш коя да включиш. Не е много универсално, но е достатъчно просто.
Само дето някой трябва да чете асемблер за АРМ.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пон Мар 06, 2006 2:18 pm |
|
 |
|
3aek
Ранг: Форумен бог
Регистриран на: Вто Яну 10, 2006 2:40 pm Мнения: 2258
|
закъсненията при арм най-добре прави през таймер да ти е мирна главата
иначе ще си зависим от PLL-и, кеш, код и прочее
|
| Пон Мар 06, 2006 2:25 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Странна практика. Един loop от сорта на:
е напълно достатъчен за всичко. Ако горното се изпълнява за n такта, то калибриращия коефициент се смята просто като mhz/точност/n.
|
| Пон Мар 06, 2006 2:28 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Заек - как да направя следното с таймер -
1.Някакъв пин се вдига.
2. Пауза около 500нс.
3. Друг пин се вдига.
Прощавай ама това да го правиш с таймер си е чист мазохизъм.
Сега естествено че ако ми трябва нещо около милисекунда, ще навия таймер.
Аз по принцип във почти всеки проект си имам прекъсване тиктакащо на милисекунда, даже си го пействам като стандартен код, все нещо се налага да се мери в милисекунди.
Ама тук става въпрос за стандартен запис в стандартен LCD дисплей (текстов) - Пуснеш му данните и трябва да изклокаш енейбъла, ама да има поне 500нс пулс, че дисплея бавно хваща. Сега за всяка подобна глупост да навивам таймери и да ги дебна за такива времена е гадно.
Да не говорим че специално при АРМ-а (LPC2138), таймерите също са зависими от PLL, VPB divider и пр.
Реконструктор - и аз това точно имах предвид (прости лупове), ама писането на асемблер за АРМ не ми е силна страна. Не мога да го направя с inline асемблера, понеже незнам дали няма да прецакам някой регистър дето го ползва компилатора. Трябва да си направя отделен асемблерски фаил, който да линквам към проекта. А това не ми е ясно как става - трябва да го чета. Също и самия асемблер - тия ядра имат една камара инструкции и видове адресации, всяка със собствено мнение по отношение на брой цикли.
Не може някой да не е правил нещо подобно. Направо съм учуден че ИАР-а няма подобни библиотеки или поне аз не ги откривам.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пон Мар 06, 2006 3:54 pm |
|
 |
|
nickich
Ранг: Почетен член
Регистриран на: Вто Ное 01, 2005 10:23 am Мнения: 704 Местоположение: Limerick, Ireland
|
аз го правя така:
може да си дефинираш и закъснения по-малки от 1мс...
_________________ "640 К са достатъчни на всеки за всичко." Бил Гейтс
|
| Пон Мар 06, 2006 4:12 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Пробвах и така, става, ама за големи закъснения около 1ms.
А на мен ми трябва около и под 1us.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пон Мар 06, 2006 4:41 pm |
|
 |
|
nickich
Ранг: Почетен член
Регистриран на: Вто Ное 01, 2005 10:23 am Мнения: 704 Местоположение: Limerick, Ireland
|
ами в моя случай DELAY_1ms се получава 17550, т.е. за 1 us => около 17 и за 500 нс => около 8-9..., и inline. Трябва да стане... 
_________________ "640 К са достатъчни на всеки за всичко." Бил Гейтс
|
| Пон Мар 06, 2006 4:49 pm |
|
 |
|
nickich
Ранг: Почетен член
Регистриран на: Вто Ное 01, 2005 10:23 am Мнения: 704 Местоположение: Limerick, Ireland
|
... за горния пример съм си дефинирал:
_________________ "640 К са достатъчни на всеки за всичко." Бил Гейтс
|
| Пон Мар 06, 2006 4:51 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
мда нещо подобно правя и аз. Засега е решение. Малко неугледно, ама... толкоз
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пон Мар 06, 2006 6:39 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 1 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|