Easyelectronics.ru

Электроника для всех
Текущее время: 26 фев 2018, 00:49

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 20 ] 
Автор Сообщение
 Заголовок сообщения: Какие api функции использовать в callback функции?
СообщениеДобавлено: 17 ноя 2017, 20:44 
Только пришел

Зарегистрирован: 02 апр 2011, 17:37
Сообщения: 7
в LWIP есть callback функция которая вызывается автоматически после получения UDP пакета.
Я бы хотел из её отправлять данные в задачи (их две). Во FreeRTOS лучше использовать для этих целей очереди (я так понял). Мне не понятно какие api использовать (обычные или для вызова из обработчиков прерываний) xQueueSendToBack() или xQueueSendToBackFromISR()? По своей природе callback функции это ISR или обычные функции? Если вопрос ламерский ногами не бейте. Я учусь :)
Контроллер esp8266.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какие api функции использовать в callback функции?
СообщениеДобавлено: 19 ноя 2017, 13:53 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1184
Ну-с, кто-тут у нас претендовал на звание доктора наук по коллбэкам, мм? Благоволите объяснить господину, в чем разница между коллбэком, функцией и прерыванием. :))))

Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какие api функции использовать в callback функции?
СообщениеДобавлено: 19 ноя 2017, 16:45 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1033
Откуда: Германия
BusMaster писал(а):
Ну-с, кто-тут у нас претендовал на звание доктора наук по коллбэкам, мм? Благоволите объяснить господину, в чем разница между коллбэком, функцией и прерыванием. :))))


Услышали знакомое слово и возбудились? :)
ничем не отличаются они кроме одного - контекста, в котором они вызываются.

zip1982b писал(а):
в LWIP есть callback функция которая вызывается автоматически после получения UDP пакета.

Вам надо определить, в каком контексте вызываются ваши колбяки.
Я поглядел по коду LwIP, что есть у меня, и как я понимаю, ваши колбяки это:
pcb->recv
-> raw_input
--> ip_input
---> tcpip_thread
----> ethernetif_input

Т.е. котекст вызова pcb->recv это функция ethernetif_input, которую вы должны где нить периодически вызывать.
У меня она вызывается в отдельной задаче FreeRTOSa, таким образом я бы использовал обычные функции FreeRTOSa без суффика ISR. Если вы вызываете этот ethernetif_input поток в прерывании, например SysTick, что вполне возможно, но не желательно, тогда вы должны использовать FreeRTOS функции с суффиксом ISR.

чтоб быстро определить контекст вызова - в дебаггере поставьте брейк в ваш колбяк, и когда выполнение тормознется, поглядите на callstack, а именно самую верхнюю функцию вызова. Как на картинках:


Вложения:
Комментарий к файлу: Прерывание
Callstack 2.PNG
Callstack 2.PNG [ 4.51 Кб | Просмотров: 724 ]
Комментарий к файлу: Обычная задача
Callstack 1.PNG
Callstack 1.PNG [ 4.81 Кб | Просмотров: 724 ]

_________________
Мои поделки
http://www.fun-electronic.net/
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какие api функции использовать в callback функции?
СообщениеДобавлено: 19 ноя 2017, 16:55 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1184
Пхахаха. Чувак, я уже об этом давно написал:
BusMaster писал(а):
. А callback-и могут быть вызваны откуда угодно, потому что вызываются программно.

...хотя нет, походу вы так и не поняли, что такое "прерывания" :))))) фееричная упертость.

Кстати, у топикстартера другой МК, а вы ему STM32F4 суете :)))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какие api функции использовать в callback функции?
СообщениеДобавлено: 19 ноя 2017, 17:26 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1033
Откуда: Германия
У ТС FreeRTOS, и логика её работы не очень отличается от процессора к процессору.

_________________
Мои поделки
http://www.fun-electronic.net/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какие api функции использовать в callback функции?
СообщениеДобавлено: 19 ноя 2017, 17:44 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1033
Откуда: Германия
BusMaster писал(а):
Пхахаха. Чувак, я уже об этом давно написал:
BusMaster писал(а):
. А callback-и могут быть вызваны откуда угодно, потому что вызываются программно.

...хотя нет, походу вы так и не поняли, что такое "прерывания"

И что, компилятор как то по другому компилирует функции, коллбяки и обработчики прерываний? Ну да, на АВР контроллерах, если компилятору об этом сказать, он вместо RET IRET поставит. На арм он ничего не изменит по сравнению с обычными функциями.

_________________
Мои поделки
http://www.fun-electronic.net/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какие api функции использовать в callback функции?
СообщениеДобавлено: 19 ноя 2017, 18:00 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1184
Разумеется прерывания отличаются от вызовов функций. Например в ARM прерывания отличаются другим аппаратным режимом работы ядра.
Ваша беда, как и некоторых других, в том, что вы не исследовали вопросы аппаратной работы микроконтроллера и его ядра. В принципе, вам оно и не особо нужно, и для вас не важно, что и как в действительности работает. В этом и отличие любителей от профессионалов :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какие api функции использовать в callback функции?
СообщениеДобавлено: 19 ноя 2017, 18:07 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1033
Откуда: Германия
BusMaster писал(а):
Разумеется прерывания отличаются от вызовов функций. Например в ARM прерывания отличаются другим аппаратным режимом работы ядра.
Ваша беда, как и некоторых других, в том, что вы не исследовали вопросы аппаратной работы микроконтроллера и его ядра. В принципе, вам оно и не особо нужно, и для вас не важно что и как в действительности работает. В этом и отличие любителей от профессионалов :)

Ну я понял, что вы смотрите на этот вопрос о разнице тех или иных функций с точки зрения того, как процессор вызывает эти функции, я же смотрю на этот вопрос с точки зрения того, как компилятор переводит с языка программирования в машинный код. Но поверьте мне, я тоже в теме того, как процессор работает с машинным кодом, что ему подсунул программист.

С точки зрения компилятора все эти различия (прерывания, колбеки или нормальные функции) существуют лишь в голове программиста.

Вот и вся суть нашего спора.

И кстати, не надо тут себя выставлять за профессионала ;-) и других причислять в любители.

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

_________________
Мои поделки
http://www.fun-electronic.net/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какие api функции использовать в callback функции?
СообщениеДобавлено: 19 ноя 2017, 19:04 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1184
Компилятор всего лишь преобразует текст из одной формы в другую. А действия выполняет микроконтроллер. Так что желательно бы смотреть именно с точки зрения микроконтроллера.
Потому что. С точки зрения компилятора - без разницы, какую - xQueueSendToBack или xQueueSendToBackFromISR - использовать. Но почему то работают они по разному :))

Ну, если бы я был любителем, я бы не зарабатывал столько бабла :)))))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какие api функции использовать в callback функции?
СообщениеДобавлено: 19 ноя 2017, 19:48 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1319
BusMaster писал(а):
Ну, если бы я был любителем, я бы не зарабатывал столько бабла :)))))

Напомнило старый анекдот: пациент пожилого возраста пришел к доктору и говорит:
- Все мои знакомые говорят, что регулярно трахают баб, а я не могу :(
Доктор говорит:
- Откройте рот. Так... язык на месте. Не понимаю, что вам мешает говорить тоже самое.

Так что да, вам лучше о мифическом бабле рассказывать, это куда безопаснее для вашей репутации, чем ваши чайниковские рассуждения о коллбеках.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какие api функции использовать в callback функции?
СообщениеДобавлено: 19 ноя 2017, 19:51 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1319
BusMaster писал(а):
Разумеется прерывания отличаются от вызовов функций. Например в ARM прерывания отличаются другим аппаратным режимом работы ядра.

Это никак не влияет на то, что прерывание ровно такой же коллбек, как и программный.
BusMaster писал(а):
Ваша беда, как и некоторых других, в том, что вы не исследовали вопросы аппаратной работы микроконтроллера и его ядра.

Можно подумать, что вы в этом разбираетесь.
BusMaster писал(а):
В этом и отличие любителей от профессионалов :)

Ну да, профессионалы давно научились отделять несущественные технические детали от существенных. Вот вы, например, еще не научились.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какие api функции использовать в callback функции?
СообщениеДобавлено: 19 ноя 2017, 20:04 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1184
:))) Я знал, что ёvsi тут появится и не удержится не по делу. По делу то ему нечего сказать :))) Ну что, ёvsi, доложи-ка нам по форме, ты уже разобрался с коллбэками и прерываниями, мм? :) Или всё на том же месте застрял?

Хрена се - "несущественная деталь" - xQueueSendToBack или xQueueSendToBackFromISR :))) Ну-кась, доложи-ка нам, в чем между ними разница, а? Так знаешь или нет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какие api функции использовать в callback функции?
СообщениеДобавлено: 19 ноя 2017, 20:24 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1319
BusMaster писал(а):
:))) Я знал, что ёvsi тут появится и не удержится не по делу.

Ну что вы, недержание не по делу это сугубо ваш профиль.
BusMaster писал(а):
Ну что, ёvsi, доложи-ка нам по форме,

Кто такие "вы" и с какого перепугу я дожен вам что-то докладывать? Вы что, так из армии и не вернулись? Пора бы уж.
BusMaster писал(а):
ты уже разобрался с коллбэками и прерываниями, мм? :) Или всё на том же месте застрял?

Я давно разобрался. А в том же месте застряли вы.
BusMaster писал(а):
Хрена се - "несущественная деталь" - xQueueSendToBack или xQueueSendToBackFromISR :)))

Забавно, что с тем, что это коллбек вы не спорите.
BusMaster писал(а):
Ну-кась, доложи-ка нам, в чем между ними разница, а?

Так кто такие "вы"? Вы уже почкованием размножаетесь? Или это из серии "Мы, Николай второй"?
BusMaster писал(а):
Так знаешь или нет?

Знаю. А вы?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какие api функции использовать в callback функции?
СообщениеДобавлено: 19 ноя 2017, 20:41 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1184
Ну так и расскажи тогда, в чем разница :))) Не можешь рассказать? Значит, не знаешь :))))
Эк скока у тебя букв то поперло то :)) И главное, что ни одной - по теме темы :)))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какие api функции использовать в callback функции?
СообщениеДобавлено: 19 ноя 2017, 21:33 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1319
BusMaster писал(а):
Ну так и расскажи тогда, в чем разница :)))

Так отчего же вы ничего не рассказали? Или ваш "профессионализм" не распространяется дальше рассказов о мифическом бабле?
BusMaster писал(а):
Не можешь рассказать? Значит, не знаешь :))))

А вы не можете или не знаете?
BusMaster писал(а):
И главное, что ни одной - по теме темы :)))

Вы тоже ничего по теме не сказали. Собственно, вы даже не заметили как согласились с тем, что прерывание это тоже коллбек. Впрочем, вы же "профессионал" :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какие api функции использовать в callback функции?
СообщениеДобавлено: 20 ноя 2017, 13:39 
Только пришел

Зарегистрирован: 02 апр 2011, 17:37
Сообщения: 7
Ребят прочёл все ответы, очень много трештока. Извиняюсь за отсутствие на форуме.
По вопросу, насколько мне известно, что если вызвать обычную api-функцию xQueueSendToBack() из прерывания, то система уйдёт в критическую ошибку. Может методом исключения поэкспериментировать? Я больше склоняюсь, что callback функция не является прерыванием и в ней можно использовать обычные api (без суффикса ISR).
/*вызовом udp_recv мы сообщаем LwIP,
что любой входящий пакет, соответствующий этому фильтру
(==, проходящий через этот сокет), должен быть передан
функции обратного вызова (callback) с именем callback_udp_recv для обработки */
udp_recv(recv_pcb, callback_udp_recv, NULL);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какие api функции использовать в callback функции?
СообщениеДобавлено: 20 ноя 2017, 13:54 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1319
zip1982b писал(а):
Может методом исключения поэкспериментировать? Я больше склоняюсь, что callback функция не является прерыванием и в ней можно использовать обычные api (без суффикса ISR).

Полагаю имеет смысл посмотреть потроха LwIp и проверить в каком контексте вызывается коллбек.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какие api функции использовать в callback функции?
СообщениеДобавлено: 20 ноя 2017, 14:49 
Только пришел

Зарегистрирован: 02 апр 2011, 17:37
Сообщения: 7
evsi писал(а):
zip1982b писал(а):
Может методом исключения поэкспериментировать? Я больше склоняюсь, что callback функция не является прерыванием и в ней можно использовать обычные api (без суффикса ISR).

Полагаю имеет смысл посмотреть потроха LwIp и проверить в каком контексте вызывается коллбек.

Хорошее предложение. гляну отпишусь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какие api функции использовать в callback функции?
СообщениеДобавлено: 01 дек 2017, 11:59 
Только пришел

Зарегистрирован: 02 апр 2011, 17:37
Сообщения: 7
Использовал обычные api (без суф. ISR) программа работает отлично (без ошибок). Хотел было разобраться в LWIP, залез в дебри и заблудился :). Честно сказать уровень мой пока не дотягивает до этого. Думаю тему можно закрывать. Всем кто откликнулся спасибо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Какие api функции использовать в callback функции?
СообщениеДобавлено: 01 дек 2017, 13:52 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1319
zip1982b писал(а):
Использовал обычные api (без суф. ISR) программа работает отлично (без ошибок).

Вот и замечательно. А вообще, я думаю, в документации на функцию было бы написано, что коллбек вызывается в контексте прерывания.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB