Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Препроцессор QT/moc
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
nanorobot
Поннравился механизм signal/slot в Qt. Его реализация обеспечивается препроцессором moc. То есть теоретически есть возможность его использования вне Qt. Реализовать соответствующий алгоритм в makefile и вперед. Лично моей квалификации на это пока не хватит. Мож делал кто?
Непомнящий Евгений
Ну вообще то там две части - с одной стороны препроцессор (который обеспечивает удобный синтаксис объявления сигналов/слотов) а с другой - поддержка в библиотеке (которая обеспечивает работу всего этого во время выполнения)

Просто взять и выдрать из Qt сигналы/слоты врядли получится - они потянут еще какие-то части QtCore. Если процессор "жирный", то можно просто взять Qt и скомпилировать его часть (эту самую QtCore) для данного процессора.

Или можно посмотреть на буст, там есть нечто похожее - signals2, который (насколько я помню) компиляции не требует.
nanorobot
Цитата(Непомнящий Евгений @ Jul 2 2015, 12:31) *
Просто взять и выдрать из Qt сигналы/слоты врядли получится - они потянут еще какие-то части QtCore. Если процессор "жирный", то можно просто взять Qt и скомпилировать его часть (эту самую QtCore) для данного процессора.


Правильно ли я понял, что можно собрать Qt, который будет генерировать код, не привязанный к ОС , например, линуксу?

Напрямую из Вашего поста это не следует, но если нет, тогда к чему эти манипуляции? Просто берем и пишем для линуха

PS не знаю процента жирности LPC435xx
Непомнящий Евгений
Цитата(nanorobot @ Jul 2 2015, 10:55) *
Правильно ли я понял, что можно собрать Qt, который будет генерировать код, не привязанный к ОС , например, линуксу?
Напрямую из Вашего поста это не следует, но если нет, тогда к чему эти манипуляции? Просто берем и пишем для линуха

Qt большая. Сигналы и слоты относятся к QtCore, которую, по идее, можно собрать и без ОС (но скорее всего весьма непросто sm.gif )

Стоит ли овчинка выделки только ради сигналов/слотов - хз, мне кажется много проще взять std::function. Как-то так

Код
struct MyCoolObject {
  std::vector<std::function<void(int a)> > subscribers;
  
  void fireEvent() {
    for (auto &s: subscribers)
      s(42);
  }
} obj;

obj.subscribers.push_back([](int a) { std::cout<< a;});

obj.fireEvent();


Цитата
PS не знаю процента жирности LPC435xx

200 МГц, 1 Мб ПЗУ и 136 кб ОЗУ - ну хз, сильно зависит, сколько сожрет прикладной код. Моя QtCore.dll весит 2,1 Мб. Утоптать ее наверное можно, вот только какая выгода?
nanorobot
Цитата(Непомнящий Евгений @ Jul 2 2015, 15:17) *
200 МГц, 1 Мб ПЗУ и 136 кб ОЗУ - ну хз, сильно зависит, сколько сожрет прикладной код. Моя QtCore.dll весит 2,1 Мб. Утоптать ее наверное можно, вот только какая выгода?

Параметры процессора мне известны. Неизвестна "жирность" по отношению к гипотетическому КуТэ без линуха...
Непомнящий Евгений
Цитата(nanorobot @ Jul 2 2015, 14:23) *
Параметры процессора мне известны. Неизвестна "жирнрсть" по отношению к гипотетическому КуТэ без линуха...

ИМХО, для Qt тут ресурсов маловато. Хотя возможно я ошибаюсь. Экспериментируйте sm.gif
den_po
Цитата(Непомнящий Евгений @ Jul 2 2015, 12:31) *
Или можно посмотреть на буст, там есть нечто похожее - signals2, который (насколько я помню) компиляции не требует.

Или можно посмотреть на реализации, использующие FastDelegate, например https://github.com/pbhogan/Signals
Mihey_K
Без ОС Qt вам не собрать, потому что это фреймворк над системными интерфейсами. Как вариант можно портировать под uClinux 4ую версию Qt, но потребуется немало времени для подбора оптимальных настроек и поиска патчей под Thumb2. На lpc1788 где-то месяц потратил на порт.
Непомнящий Евгений
Цитата(Mihey_K @ Jul 3 2015, 14:57) *
Без ОС Qt вам не собрать, потому что это фреймворк над системными интерфейсами.

Думаю собрать, но напильником придется поработать, отключая лишнее. Собственно многие вещи там к системе никак не относятся - те же сигналы/слоты к примеру
Mihey_K
Можно многое напильником сделать, но оправдает ли задачу потраченное время... К слову скажу, что без поддержки тредов Qt4 и тем более 5 не собрать. ОС хотя б это предлагает.
Непомнящий Евгений
Цитата(Mihey_K @ Jul 3 2015, 15:25) *
Можно многое напильником сделать, но оправдает ли задачу потраченное время...

Я бы не стал, но в принципе то sm.gif Собственно для проца ТС-а все это вообще непонятно зачем надо.

Цитата
К слову скажу, что без поддержки тредов Qt4 и тем более 5 не собрать. ОС хотя б это предлагает.

Думаю зависит от степени владения напильником. По крайней мере qtCore наверное собрать можно и что-то даже работать будет. Самый простой вариант - просто заменить все связанное с потоками на заглушки. Или какой-то базовый функционал строго завязан на наличие фоновых потоков?
Mihey_K
Как минимум придется пилить атомарный доступ, спинлоки. Вопрос уже поднимался. Особенно сильно на потоки завязаны QtWidgets.
Slash
Вроде бы используя ОС EmBox http://se.math.spbu.ru/SE/embox можно запускать на МК приложения, написанные на Qt.

Еще вариант, с помощью компилятора Clang можно заменить moc http://woboq.com/blog/moc-with-clang.html
Сколько труда нужно вложить, чтобы для МК получить сигналы/слоты - даже не представляю ( в этом варианте, без сторонних библиотек).
Mihey_K
Механизм сигналов/слотов можно в некоторой степени заменить мьютексами средствами RTOS.
nanorobot
Цитата(Mihey_K @ Jul 7 2015, 03:29) *
Механизм сигналов/слотов можно в некоторой степени заменить мьютексами средствами RTOS.



Вероятно Вы хотели сказать - семафорами?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.