Официальный форум СВД Встраиваемые Системы
05 Августа, 2020, 07:56:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: время выполнения  (Прочитано 76 раз)
aslav
Пользователь

Сообщений: 21



« : 15 Июля, 2020, 23:32:13 »

здравствуйте!

Имеем плату advantech 1780, пишу код, который выдает для DO0, D01 5В на контакты.


Создал в потоке импульс, 100мс.

В нем выполняю

1)
out8(base+xx,0b001); //установить 5В
жду 4мкс
out8(base+xx,0);//снять

жду 10 мкс

2)
out8(base+xx,0b010); //установить 5В
жду 4мкс
out8(base+xx,0);//снять


Так вот, проблема в том, что по показаниям осцилографа время выполнения 1) и 2) "скачет".
Другими словами то нормально порядка 8 мкс каждый фронт. То по 40мкс фронт.

с Clockperiod игрался, не помогло.

Может кто-нибудь подскажет как убрать задержки?
Записан
Андрей Докучаев
Сотрудник СВД ВС
Ветеран

Сообщений: 846



WWW
« Ответ #1 : 16 Июля, 2020, 09:48:17 »

Поскольку все действия выполняются в потоке, его могут вытеснить как другие потоки, так и обработчики прерываний. Если нужно понять кто вытесняет - можно собрать трассу ядра и посмотреть. В качестве решения можно попробовать следующее:

1. Повысить приоритет своему потоку.
2. Поскольку речь идет о задержке в 100мс, то явно присутствует таймерное прерывание. Можно приаттачить к нему тот же пульс с высоким приоритетом через InterruptAttachEvent без флага _NTO_INTR_FLAGS_END, что автоматически поставит ISR в начало очереди других клиентов и будет разблокировать поток в приоритетоном порядке.
3. Выполнять out() прямо в таймерном ISR.
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2020 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 17 Июля, 2020, 16:14:52