|
Как оценить время в Keil, Не могу посчитать количество тактов |
|
|
|
 |
Ответов
|
Mar 19 2010, 12:23
|

Местный
  
Группа: Validating
Сообщений: 207
Регистрация: 14-01-09
Из: Днепропетровск
Пользователь №: 43 367

|
Типа отчет, о том что получилось. Тестовая программка: Код while (1) { AT91C_BASE_PIOA -> PIO_SODR = AT91C_BASE_PIOA -> PIO_SODR | 0x00000800; // PA11 = 1 AT91C_BASE_PIOA -> PIO_CODR = AT91C_BASE_PIOA -> PIO_CODR | 0x00000800; // PA11 = 0 } Мне удалось разогнать процессор (at91sam7s256) до 100 Мгц. При выполнении программы из ОЗУ период меандра на ножке PA11 был примерно 200 нс. И это при тактовом цикле 10нс! Дизассемблер показал, что изменение состояния ножки занимает 4-5 команд: Код 319: while (1) { 0x00102CE0 EA000008 B 0x00102D08 320: AT91C_BASE_PIOA -> PIO_SODR = AT91C_BASE_PIOA -> PIO_SODR | 0x00000800; // PA11 = 1 0x00102CE4 E3A00000 MOV R0,#0x00000000 0x00102CE8 E5100BD0 LDR R0,[R0,#-0x0BD0] 0x00102CEC E3800B02 ORR R0,R0,#0x00000800 0x00102CF0 E3A01000 MOV R1,#0x00000000 0x00102CF4 E5010BD0 STR R0,[R1,#-0x0BD0] 321: AT91C_BASE_PIOA -> PIO_CODR = AT91C_BASE_PIOA -> PIO_CODR | 0x00000800; // PA11 = 0 0x00102CF8 E3A00000 MOV R0,#0x00000000 0x00102CFC E5100BCC LDR R0,[R0,#-0x0BCC] 0x00102D00 E3800B02 ORR R0,R0,#0x00000800 0x00102D04 E5010BCC STR R0,[R1,#-0x0BCC] 319: while (1) { 0x00102D08 EAFFFFF5 B 0x00102CE4 Если каждая команда будет выполняться ровно 2 такта, то все складывается. Но, если я не ошибаюсь, у армов большинство команд выполняется за один такт. Может кто-нибудь подскажет, в чем дело?
|
|
|
|
|
Mar 19 2010, 13:24
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Nikitoc @ Mar 19 2010, 15:23)  Мне удалось разогнать процессор (at91sam7s256) до 100 Мгц. Что за стремление разогнать процессор, даже не попытавшись сначала освоить работу с ним в штатном режиме? Цитата(Nikitoc @ Mar 19 2010, 15:23)  Но, если я не ошибаюсь, у армов большинство команд выполняется за один такт. Ошибаетесь. Только MOV и ORR в приведенном листинге выполняются за один такт. Цитата(Nikitoc @ Mar 19 2010, 15:23)  Может кто-нибудь подскажет, в чем дело? Оптимизатор надо было включить. Ну и на чтениях порта теряете время.
|
|
|
|
|
Mar 19 2010, 13:47
|

Местный
  
Группа: Validating
Сообщений: 207
Регистрация: 14-01-09
Из: Днепропетровск
Пользователь №: 43 367

|
Цитата(aaarrr @ Mar 19 2010, 17:24)  Ошибаетесь. Только MOV и ORR в приведенном листинге выполняются за один такт. А не подскажете, случайно, где можно подробно посмотреть время исполнения (в тактах) ассемблерных команд? Цитата Оптимизатор надо было включить. Ну и на чтениях порта теряете время. Ну да. При включенной оптимизации по времени 3-го уровня компилятор сократил код до 3-х команд: Код 319: AT91C_BASE_PIOA -> PIO_CODR = AT91C_BASE_PIOA -> PIO_CODR | 0x00000800; 0x00102BC4 E5140BCC LDR R0,[R4,#-0x0BCC] 0x00102BC8 E3800B02 ORR R0,R0,#0x00000800 0x00102BCC E5040BCC STR R0,[R4,#-0x0BCC] 320: AT91C_BASE_PIOA -> PIO_SODR = AT91C_BASE_PIOA -> PIO_SODR | 0x00000800; 0x00102BD0 E5140BD0 LDR R0,[R4,#-0x0BD0] 0x00102BD4 E3800B02 ORR R0,R0,#0x00000800 0x00102BD8 E5040BD0 STR R0,[R4,#-0x0BD0] 318: while (1) { 0x00102BDC EAFFFFF8 B 0x00102BC4 Но измерить разницу (увидеть на осциллографе) в периоде мне не удалось. Я имею в виду, что период так и остался равным примерно 200 нс... А по поводу разгона... так я ж говорил это мне видео хочется поснимать  При таких условиях мне удается захватить примерно 3,5 fps (QCIF 176x144). Но меня ограничивает скорость COM-порта PC - 115200. Поэтому следующий этап - освоение SPI и DMA. Хочется сделать потоковую запись на SD-карточку. Если это конечно будет иметь смысл (по скорости).
Сообщение отредактировал Nikitoc - Mar 19 2010, 13:48
|
|
|
|
|
Mar 19 2010, 14:14
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Nikitoc @ Mar 19 2010, 16:47)  А не подскажете, случайно, где можно подробно посмотреть время исполнения (в тактах) ассемблерных команд? В даташите на ARM7TDMI. Цитата(Nikitoc @ Mar 19 2010, 16:47)  Но измерить разницу (увидеть на осциллографе) в периоде мне не удалось. Я имею в виду, что период так и остался равным примерно 200 нс... Было 22 такта, стало 19. Уберите чтение PIO_SODR и PIO_CODR - это регистры только для записи. И почитайте даташит на процессор.
|
|
|
|
|
Mar 19 2010, 14:27
|

Местный
  
Группа: Validating
Сообщений: 207
Регистрация: 14-01-09
Из: Днепропетровск
Пользователь №: 43 367

|
Цитата(aaarrr @ Mar 19 2010, 18:14)  В даташите на ARM7TDMI. Было 22 такта, стало 19. Уберите чтение PIO_SODR и PIO_CODR - это регистры только для записи. И почитайте даташит на процессор. :-) Все, я ушел просвещаться. Спасибо за помощь. P.S. Хотя по поводу PIO_SODR и PIO_CODR я не понял. Код AT91C_BASE_PIOA -> PIO_CODR = AT91C_BASE_PIOA -> PIO_CODR | 0x00000800 Я здесь вроде не читаю, а записываю... Как это сделать - на асме или на Си тоже можно?
Сообщение отредактировал Nikitoc - Mar 19 2010, 14:42
|
|
|
|
|
Mar 19 2010, 20:37
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Nikitoc @ Mar 19 2010, 17:27)  Код AT91C_BASE_PIOA -> PIO_CODR = AT91C_BASE_PIOA -> PIO_CODR | 0x00000800 Я здесь вроде не читаю, а записываю... Как это сделать - на асме или на Си тоже можно? Читаете, естественно. Откуда иначе возьмется содержимое PIO_CODR, над которым производится операция bitwise OR? Если принять во внимание совершенную бесполезность чтения PIO_CODR (вредность, точнее, ибо никто даже не гарантирует, что из этого регистра будет считан 0, хотя на практике это и так), то останется: Код AT91C_BASE_PIOA->PIO_CODR = 0x00000800; И этот код даст точно такой же результат. P.S. Запись вида a |= 1 вместо a = a | 1 делает код гораздо более удобочитаемым.
|
|
|
|
Сообщений в этой теме
Nikitoc Как оценить время в Keil Mar 16 2010, 14:30 aaarrr Цитата(Nikitoc @ Mar 16 2010, 17:30) Посо... Mar 16 2010, 15:09 Nikitoc Цитата(aaarrr @ Mar 16 2010, 19:09) Debug... Mar 16 2010, 18:48  aaarrr Цитата(Nikitoc @ Mar 16 2010, 21:48) А ес... Mar 16 2010, 19:31   Nikitoc Цитата(aaarrr @ Mar 16 2010, 22:31) И бли... Mar 16 2010, 20:24 aaarrr Поподробнее можно посмотреть в даташите. Если крат... Mar 16 2010, 20:30 Nikitoc Угу, ясненько. И если можно последний моментик: Вы... Mar 16 2010, 20:39 aaarrr Периферия находится на "медленной" шине ... Mar 16 2010, 20:46 Nikitoc Цитата(aaarrr @ Mar 16 2010, 23:46) Периф... Mar 16 2010, 20:53     RabidRabbit Цитата(Nikitoc @ Mar 19 2010, 17:27) Я зд... Mar 19 2010, 20:29      Nikitoc Огромное спасибо за пояснения уважаемым гуру. Я, в... Mar 19 2010, 22:45       aaarrr Цитата(Nikitoc @ Mar 20 2010, 01:45) Врод... Mar 19 2010, 22:51   defunct Цитата(Nikitoc @ Mar 19 2010, 15:47) А не... Mar 21 2010, 00:23 toweroff ЦитатаAT91C_BASE_PIOA -> PIO_SODR = AT91C_BASE_... Mar 19 2010, 20:04 Nikitoc Хм. Ну ладно, но нафига тогда эта петрушка со смещ... Mar 19 2010, 23:11 aaarrr Потому что в 32 бита команды не получится упихать ... Mar 19 2010, 23:15 Nikitoc Да я вообще и пытаюсь это делать. Но блин, тяжело ... Mar 19 2010, 23:27 aaarrr Цитата(Nikitoc @ Mar 20 2010, 02:27) Да я... Mar 19 2010, 23:39 Nikitoc Пасибки. Попробую дочитать хотя бы до половины ... Mar 20 2010, 09:49 aaarrr По такой логике LDR и STR должны занимать одинаков... Mar 21 2010, 01:11 defunct Цитата(aaarrr @ Mar 21 2010, 03:11) По та... Mar 21 2010, 01:34  aaarrr Цитата(defunct @ Mar 21 2010, 04:34) ...А... Mar 21 2010, 01:47   defunct Цитата(aaarrr @ Mar 21 2010, 03:47) И мож... Mar 21 2010, 02:09 Nikitoc Продолжаю терзать at91sam7s256.
Привожу код котор... Apr 6 2010, 15:59 aaarrr Цитата(Nikitoc @ Apr 6 2010, 19:59) ...те... Apr 6 2010, 16:08  Nikitoc Цитата(aaarrr @ Apr 6 2010, 19:08) Предла... Apr 6 2010, 16:26   aaarrr Цитата(Nikitoc @ Apr 6 2010, 20:26) Такое... Apr 6 2010, 16:39    Nikitoc Цитата(aaarrr @ Apr 6 2010, 19:39) А он в... Apr 6 2010, 16:44 aaarrr pP_M_C чему равен? И зачем вообще использовать эти... Apr 6 2010, 17:12 Nikitoc ЦитатаpP_M_C чему равен? И зачем вообще использова... Apr 6 2010, 17:27 aaarrr Для write only есть соответствующие status-регистр... Apr 6 2010, 17:29 Nikitoc Цитата(aaarrr @ Apr 6 2010, 20:29) Провер... Apr 6 2010, 17:33 Nikitoc Вот здесь http://electronix.ru/forum/index.php?sho... Apr 6 2010, 19:02 aaarrr Цитата(Nikitoc @ Apr 6 2010, 23:02) ...я ... Apr 6 2010, 19:21  Nikitoc Проблема решилась. Оказалось что SD-шка мертвая. П... Apr 7 2010, 09:52
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|