Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 16.05.2018, 09:41  
Исбанни
Прописка
 
Регистрация: 21.04.2018
Сообщений: 174
Сказал спасибо: 1
Сказали Спасибо 66 раз(а) в 53 сообщении(ях)
Исбанни на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

Я сбросил флаг в самом начале. Это означает выход из прерывания разве?? Я ж написал, что выход из прерывания подразумевает некоторые аппаратные действия. И происходит он там, где закрывается последняя сишная скобка }

Обработчик прерывания при использовании API функций RTOS занимает гооооораздо больше, чем 10-20 тактов. Но работает все норм.
Ну а в тех МК, где нет векторов, или же когда под одним вектором находятся несколько запросов на прерывание, и требуется сначала проверить источник прерывания - вот там попробуйте-ка уложиться в эти ваши 10-20
Реклама:
Исбанни вне форума  
Непрочитано 16.05.2018, 12:15  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

Сообщение от STM32F0 Посмотреть сообщение
сделай на СТМ8 обслугу полухардварного софтового ЮАРТа и ИР-датчика одновременно
Делал. И все работало.
STM32F0, и каким местом ты будешь хардварно засекать время срабатывания внешнего прерывания? Допустим, микросекунды отмеряются таймером, а все остальное — структура (дата, часы, минуты, секунды).
И???
__________________
Смерть бандеровской мразоте!
eddy вне форума  
Непрочитано 16.05.2018, 15:18  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,901
Сказал спасибо: 499
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

Сообщение от eddy Посмотреть сообщение
Вот как сбросили флаг прерывания, так считай и вышли.
Шо, правда? И приоритет (в МК с приоритетной системой прерываний) выполняемого кода изменился, и менее приоритетное прерывание может выполниться?
AR_Favorit вне форума  
Непрочитано 16.05.2018, 16:57  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

AR_Favorit, как только флаг сбросишь, это же самое прерывание опять может вызвать обработчик, хоть он до конца и не дошел! и насрать!!!
__________________
Смерть бандеровской мразоте!
eddy вне форума  
Непрочитано 16.05.2018, 20:37  
Исбанни
Прописка
 
Регистрация: 21.04.2018
Сообщений: 174
Сказал спасибо: 1
Сказали Спасибо 66 раз(а) в 53 сообщении(ях)
Исбанни на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

eddy, в приоритетном STM32 такого нет - повторно войти без выхода не даст одинаковые приоритет и номер активного и отложенного прерывания. В ПИКах с одним вектором тоже не будет повторного входа - аппаратно запрещаются прерывания во время нахождения в режиме прерываний, и повторный вход без выхода из прерывания или без программного разрешения, находясь в прерывании - невозможен. Про АВР-ы не помню, я с ними почти не работал.
Да и вообще, флаг прерывания работает немного по-другому. Вспомните, что бывает, если флаг не сбросить до выхода из обработчка?

Последний раз редактировалось Исбанни; 16.05.2018 в 20:40.
Исбанни вне форума  
Непрочитано 17.05.2018, 01:18  
parovoZZ
Почётный гражданин KAZUS.RU
 
Регистрация: 15.11.2010
Сообщений: 2,378
Сказал спасибо: 338
Сказали Спасибо 328 раз(а) в 253 сообщении(ях)
parovoZZ на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

Сообщение от CERGEI1982 Посмотреть сообщение
Вы хоть свой пример покажите, на чем пишете, какой микропроцессор, что хотите изобразить.
МК без приоритетных прерываний.
По прерыванию от nRF мне надо быстро считать её буфер и обработать эти данные. Если данные не для меня, то их либо удалить, либо отправить дальше.Но есть ещё одно прерывание, которое более приоритетное для данной задачи. Поэтому обработку принятых данных могу отложить на потом. Главное - считать буфер nRF, потому как следом может ещё прилететь радио-пакет. Решение в лоб через флаг мне не нравится - этот флаг надо постоянно опрашивать. Но раз так, то проще опрашивать регистр nRF, чем делать замуты с прерываниями. А есть ли решение, чтобы после обработчика прерывания сразу перейти в функцию обработчика данных? Это было б идеально.
parovoZZ вне форума  
Непрочитано 17.05.2018, 04:56  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,901
Сказал спасибо: 499
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

Сообщение от eddy Посмотреть сообщение
AR_Favorit, как только флаг сбросишь, это же самое прерывание опять может вызвать обработчик, хоть он до конца и не дошел! и насрать!!!
Мда.

Специально же подчеркнул: для МК с приоритетной системой прерываний.
Флаг запросто и автоматически сбрасывается в некоторых прерываниях (по чтению регистра данных, например), но при этом это же прерывание "из него самого" тут же опять вызваться не может. Как и любое другое с тем же или более низким приоритетом.

А у неприоритетных типа АВР вход в прерывание тупо автоматически запрещает прерывания, и пока обработчик не закончится каким-нить RETI в машинном коде, тоже никто никого не прервет и не вызовет.
AR_Favorit вне форума  
Непрочитано 17.05.2018, 06:13  
Исбанни
Прописка
 
Регистрация: 21.04.2018
Сообщений: 174
Сказал спасибо: 1
Сказали Спасибо 66 раз(а) в 53 сообщении(ях)
Исбанни на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

Сообщение от parovoZZ Посмотреть сообщение
По прерыванию от nRF мне надо быстро считать её ... Если данные не для меня, то их либо удалить, либо отправить дальше
nRF24L01, да? Используйте её собственные возможности. У нее есть 5-байтный адрес, автоматически обрабатывающий ситуацию "свой/чужой". И еще есть 6 потоков (pipe) со своими адресами, в сумме одна nRF может принимать и автоматически распознавать ("свой/чужой") до 6 передатчиков.
Когда по адресу будут распознаны данные именно для вашей nRF, она опустит в 0 свою линию прерывания IRQ и вы можете совершенно спокойно прочитать данные с нее.
Но читать данные конечно лучше не в прерывании, поскольку, когда вы читаете, у вас либо идет ожидание принятого по SPI очередного байта, либо если используете прерывание по получении байта SPI, то это прерывание не сможет быть обработано из-за неприоритетного контроллера прерываний.
То есть, вам в прерывании от IRQ можно запустить передачу по SPI первой команды для чтения nRF (команда R_RX_PAYLOAD), и выйти из текущего прерывания. А в прерывании по приему байта SPI вы уже будете как-то разруливать остальное.
Второй момент: радиопакеты слать слишком часто не следует, когда у вас целая сеть развернута, иначе эфир будет сильно забит. Арбитража там не предусмотрено, лишь только подтверждение приема, приходящее по радио обратно передатчику. И то - если этот режим включен (ShockBurst).

parovoZZ, вас не зря же спросили про более ясную конкретику, потому что я сейчас описал лишь общие догадки, а что там у вас на самом деле творится - хрен знает. Мы тут не на шоу экстрасенсов.
Исбанни вне форума  
Непрочитано 17.05.2018, 09:34  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

AR_Favorit, ЯХЗ, как должно быть, но когда-то, быдлокодя 1-wire для STM32F103 столкнулся с тем, что пока в процессе отладки весь код пхал в обработчик прерывания от таймера, происходило зависание. Как только код укоротил (только флаги выставлял), все пошло нормально. Воткнуть в прерывание вывод данных на USART я не могу, а читать кроме RM&datasheet на МК еще и документацию на ARM лень, поэтому остается лишь гадать на кофейной гуще, как оно на самом-то деле!
__________________
Смерть бандеровской мразоте!
eddy вне форума  
Непрочитано 17.05.2018, 10:38  
parovoZZ
Почётный гражданин KAZUS.RU
 
Регистрация: 15.11.2010
Сообщений: 2,378
Сказал спасибо: 338
Сказали Спасибо 328 раз(а) в 253 сообщении(ях)
parovoZZ на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

Сообщение от Исбанни Посмотреть сообщение
nRF24L01, да? Используйте её собственные возможности. У нее есть 5-байтный адрес, автоматически обрабатывающий ситуацию "свой/чужой". И еще есть 6 потоков (pipe) со своими адресами, в сумме одна nRF может принимать и автоматически распознавать ("свой/чужой") до 6 передатчиков.
Когда по адресу будут распознаны данные именно для вашей nRF, она опустит в 0 свою линию прерывания IRQ и вы можете совершенно спокойно прочитать данные с нее.
Это я всё в курсах. Но мне не подходит - когда устройств штук 30-50 пайпами не отделаешься. Да и адрес в 5 байт - это дофига. Мне и трех должно хватить=)

Сообщение от Исбанни Посмотреть сообщение
Второй момент: радиопакеты слать слишком часто не следует, когда у вас целая сеть развернута, иначе эфир будет сильно забит. Арбитража там не предусмотрено, лишь только подтверждение приема, приходящее по радио обратно передатчику. И то - если этот режим включен (ShockBurst).
Это тоже не подходит, но придётся включить ради динамической длины пакета и слать NO_ACK в сообщении. Об успешной доставке будет квитировать центральный контроллер.

Сообщение от Исбанни Посмотреть сообщение
Но читать данные конечно лучше не в прерывании, поскольку, когда вы читаете, у вас либо идет ожидание принятого по SPI очередного байта, либо если используете прерывание по получении байта SPI, то это прерывание не сможет быть обработано из-за неприоритетного контроллера прерываний.
То есть, вам в прерывании от IRQ можно запустить передачу по SPI первой команды для чтения nRF (команда R_RX_PAYLOAD), и выйти из текущего прерывания. А в прерывании по приему байта SPI вы уже будете как-то разруливать остальное.
А вот это хорошая идея. Я буду думать в этом направлении.
parovoZZ вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OLED ssd1306 + STM32f030f4 miwutka Песочница (вопросы новичков) 195 07.01.2019 15:38
AVR Studio + CVAVR: директивы #include SwanSwan AVR 2 30.10.2016 18:50
Светодиоды "Straw Hat" - оптимальное использование mikesmith Отвлекитесь, эмбеддеры! 10 09.03.2014 02:28
usb cdc pic18f14k50 gromovi Proteus, KiCAD и другие ECAD 9 21.04.2013 15:31
В какой программе компелить код (подключение #include ) FedorChek Микроконтроллеры, АЦП, память и т.д 4 04.05.2009 20:00


Часовой пояс GMT +4, время: 21:55.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot