|
лог некой шины, Как это реализовать более оптимально? |
|
|
|
Jun 29 2011, 14:26
|
Местный
  
Группа: Участник
Сообщений: 245
Регистрация: 15-08-07
Пользователь №: 29 795

|
Необходимо снять лог некой шины, у которой частота в районе мегагерца. Код простой Код u08 array[1000]; u08* pArr = &array[999]; while(pArr >= array) *pArr-- = PINA; У меня получается приблизительно 18 тактов на цикл. Можно ли это улучшить?
|
|
|
|
|
 |
Ответов
|
Jul 2 2011, 22:33
|
Местный
  
Группа: Участник
Сообщений: 245
Регистрация: 15-08-07
Пользователь №: 29 795

|
Попробую прокоментировать, если че поправьте.
Loop: in temp,<порт> - получить состояние шины (1 такт) st Z+,temp - засунуть это значение в оперативку (2 такта) cp ZL,... - если младший байт указателя не переходит границу, то перейти к опросу порта (1 такт) cpc ZH,... - иначе проверить старший байт, если ... - неважно in temp,<порт> - получить состояние шины (1 такт) st Z+,temp - засунуть это значение в оперативку (2 такта) brne Loop - продолжить (если нужно) (1 такт)
Т.е. если не придираться к иногда возникающему CP-CPC, то в среднем по четыре такта на один опрос. Ну в принципе в настоящий момент у меня тоже их четыре А вот как-бы засунуть в сишный файл вот это - in temp,<порт> st Z+,temp in temp,<порт> st Z+,temp in temp,<порт> st Z+,temp ... ???
|
|
|
|
|
Jul 3 2011, 07:11
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(Sirko @ Jul 3 2011, 02:33)  Попробую прокоментировать, если че поправьте.
cp ZL,... - если младший байт указателя не переходит границу, то перейти к опросу порта (1 такт) Вот тут неправильно. Последовательность cp ZL,... cpc ZH,... - это сравнение с 16-битным значением (заданным в регистрах), определяющим границу массива. Цитата Т.е. если не придираться к иногда возникающему CP-CPC, то в среднем по четыре такта на один опрос. Не четыре, а пять, и не в среднем, а всегда. Но граница должна быть установлена на один байт раньше.
|
|
|
|
Сообщений в этой теме
Sirko лог некой шины, Как это реализовать более оптимально? Jun 29 2011, 14:26 galjoen Цитата(Sirko @ Jun 29 2011, 18:26) У меня... Jun 29 2011, 14:54 kovigor Цитата(Sirko @ Jun 29 2011, 17:26) У меня... Jun 29 2011, 15:00 Sirko Цитатаменее чем за 20 тактов не только...Возможно,... Jun 29 2011, 16:08 =GM= Цитата(Sirko @ Jun 29 2011, 13:26) Можно ... Jun 29 2011, 16:10 demiurg_spb У xMega есть DMA...
Правда xMega живьём не видел и... Jun 29 2011, 17:37  V_G Цитата(demiurg_spb @ Jun 30 2011, 04:37) ... Jun 30 2011, 05:02 Sirko Цитатаи не знаюАналогично.
Сам сегодня щупаю впер... Jun 29 2011, 17:49 kovigor Цитата(Sirko @ Jun 29 2011, 20:49) Сам се... Jun 29 2011, 18:35 Sirko ЦитатаНа асме можно улучшить до 3 тактов.В три так... Jun 29 2011, 20:34 =GM= Цитата(Sirko @ Jun 29 2011, 19:34) В три ... Jun 30 2011, 13:09 Палыч Цитата(Sirko @ Jun 29 2011, 18:26) У меня... Jun 30 2011, 04:32 alexeyv ЦитатаУ меня получается приблизительно 18 тактов н... Jun 30 2011, 06:05 rx3apf Цитата(alexeyv @ Jun 30 2011, 10:05) Отко... Jun 30 2011, 15:41 Sirko Странновато как-то:
Попробовал на ноуте скомпилить... Jun 30 2011, 09:48 alexeyv ЦитатаА в пятой студии свой компилятор?
Так же как... Jul 1 2011, 13:07 Sirko ЦитатаНеобходимо снять лог некой шины, у которой ч... Jul 2 2011, 18:33 =GM= Цитата(Sirko @ Jul 2 2011, 17:33) Наивный... Jul 2 2011, 20:22 Sirko ЦитатаСкажу так, за 5 циклов можно считать, записа... Jul 2 2011, 20:50 rx3apf Цитата(Sirko @ Jul 3 2011, 00:50) Это че,... Jul 2 2011, 21:45 Sirko ЦитатаВот тут неправильно.Понял. Спасибо.
Но тогд... Jul 3 2011, 07:58 rx3apf Цитата(Sirko @ Jul 3 2011, 11:58) Понял. ... Jul 3 2011, 09:45 Sirko Спасибо, буду знать. Jul 3 2011, 09:51 defunct Цитата(Sirko @ Jul 3 2011, 12:51) Спасибо... Jul 4 2011, 13:25
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|