Время выполнения команд
|
|
Yrok |
Дата: Чт, 27.09.2007, 14:28 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
112
Замечания:
±
На сайте с 27.09.2007
Статус:
Offline
|
Берем microbasic 5.0.0.2--в нем есть софтовый отладчик пишем коротенькую програмку Code option_reg=133 Lcd_Config(PORTC,7,6,5,4,PORTC,1,2,3) Lcd_Cmd(Lcd_CURSOR_OFF) Lcd_Out(1, 1, "Hello!") delay_ms (1000) и начинаем в отладчике смотреть время выполнения команд и что же мы видим перед командой delay_ms (1000) общее время выполнения состовляет 72,26 ms а после ее выполнения 1075,96--а должно быть 1072,26 никто незнает почему так??? соответственно если ставим паузу 3 секунды то получаем 3083,82--погрешность уже 11,56ms
|
|
|
|
bobinventor |
Дата: Вт, 02.10.2007, 07:47 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
3
Замечания:
±
На сайте с 14.09.2007
Статус:
Offline
|
Просто напросто для точных и критичных по времени приложений, нужно пользоваться MPLAB... А эти компиляторы вообщем-то созданы для быстрого создания небольших и не критичных приложений... А на счет задержек... Я думаю что эот траблы в подпрограмме delay_ms. По сути это же подпрограмма, которая наверняка состоит из команд типа BTFSS и BTFCS. А эти команды при одном из условий выполняются за два цикла работы контроллера.... Вот поэтому есть погрешность...
|
|
|
|
ADMIN |
Дата: Вт, 02.10.2007, 17:17 | Сообщение # 3 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Кстати, в MicroBasic есть возможность просмотреть ASM-код. Просто -> Файл - > открыть
|
|
|
|
Popeye |
Дата: Пн, 15.10.2007, 09:13 | Сообщение # 4 |
Группа:
Удаленные
Ранг:
Сообщений:
Статус:
|
Команды delay нельзя пользовать. Они просто выполняют некоторое количество программных циклов. Если есть перерывание точность убежит на время обработки перерывания. И clrwdt в delay нет. Т.е. перерывание нельзя, WDT нельзя включать, кому это надо, delay ?
|
|
|
|
Yrok |
Дата: Пн, 15.10.2007, 10:20 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
112
Замечания:
±
На сайте с 27.09.2007
Статус:
Offline
|
Quote Если есть перерывание точность убежит на время обработки перерывания. Пока выполняется delay --прерывания выполняться небудут!!!!! А вообще просто для примера написал--так как писал программку для измерения длительности входного импульса--результат всегда был меньше истинного--так и неудалось ничего сделать. Недавно понял почему--при выполнении любого оператора прерывание необрабатывается--просто ставиться флаг , а обрабатываются прерывания только при переходе от одного оператора к другому--а это очень плохо!!!!
|
|
|
|
ADMIN |
Дата: Пн, 15.10.2007, 17:41 | Сообщение # 6 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Quote (Yrok) Пока выполняется delay --прерывания выполняться небудут!!!!! Почему вы так решили?
|
|
|
|
Yrok |
Дата: Вт, 16.10.2007, 15:39 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
112
Замечания:
±
На сайте с 27.09.2007
Статус:
Offline
|
Quote Quote (Yrok) Пока выполняется delay --прерывания выполняться небудут!!!!! Почему вы так решили? Пардон проверил--я был неправ--прерывания происходят.
|
|
|
|