Easyelectronics.ru

Электроника для всех
Текущее время: 24 апр 2018, 02:16

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



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

Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Библиотека устройства и несколько одинаковых функций.
СообщениеДобавлено: 02 ноя 2017, 11:49 
Заглядывает иногда

Зарегистрирован: 25 апр 2011, 01:46
Сообщения: 130
Приветствую!
Не знаю насколько правильно я думаю это сделать, прошу прокомментировать.

Есть некая плата, назовём её громко ПЛК. На этой самой плате могут запускаться несколько Проектов, причем в рамках одного Проекта - одна прошивка, которая в себе содержит код всех вариантов кем может прикинуться ПЛК в рамках Проекта - назовём код конкретной вариации payload.
При старте прошивки читается конфиг и происходит запуск payload в соответствии с ним.

В payload-ах есть отличающиеся обработчики одного и того-же железа, но называться им желательно одинаково и содержать weak прототип в библиотеке железа ПЛК.

Т.е. я себе это представляю так - есть базовый набор библиотек и одинаковая заготовка (main.c и соответствующие сырцы) Проекта, и к нему желательно просто линковать набор payload-ов, которые пишутся в соответствии с библиотекой.

Собственно вопрос - как это правильно сделать, и стоит ли так делать?

Спасибо за внимание.

P.S. Пришел я к этому от того что payload маленькие, памяти много, и хочется производить обновление прошивки в рамках Проекта с одного на другой ПЛК.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека устройства и несколько одинаковых функций.
СообщениеДобавлено: 02 ноя 2017, 12:10 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 1741
Что то мне подсказывает, что это проще реализовать на плюсах.
Через абстрактные функции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека устройства и несколько одинаковых функций.
СообщениеДобавлено: 02 ноя 2017, 21:59 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1279
Можно на плюсах, можно без плюсов.
Как понятнее так и сделать можно.
Проблемы нет вообще.
От слова совсем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека устройства и несколько одинаковых функций.
СообщениеДобавлено: 03 ноя 2017, 00:29 
Старожил
Аватара пользователя

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 491
Еще можно и средствами среду разработки такое реализовать. IAR точно позволяет. Думаю и Keil тоже не откажется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека устройства и несколько одинаковых функций.
СообщениеДобавлено: 03 ноя 2017, 01:23 
Заглядывает иногда

Зарегистрирован: 25 апр 2011, 01:46
Сообщения: 130
Пожалуйста укажите направление хотябы как это правильно называется?
Я пока не представляю что искать.

P.S. Хоть я и использую кокос, но как мне кажется лучше если решение не зависит от IDE.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека устройства и несколько одинаковых функций.
СообщениеДобавлено: 03 ноя 2017, 01:37 
Старожил
Аватара пользователя

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 491
В Кейле например это называется Project Target. В IAR вроде также. Очень часто по умолчанию среды делают два таргета один из них debug.
Для каждого таргеты Вы можете установить свои опции компиляции и линковки. Ну набор файлов тоже может быть свой. Или смешанный. Это уже все от задач. Мне кажется любая среда это позволяет делать.
Еще вариант сделать как это сделано во FreeRTOS. Разрулить все условной компиляцией. Ну или смешать эти два метода.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека устройства и несколько одинаковых функций.
СообщениеДобавлено: 03 ноя 2017, 01:56 
Заглядывает иногда

Зарегистрирован: 25 апр 2011, 01:46
Сообщения: 130
Как это работает я понимаю, но это "условная компиляция".
Другой затык - как грубо говоря сделать несколько разных задач во FreeRTOS, которые содержат допустим каждая свой парсер строки, но обе работают с UART1 через его обработчик прерывания.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека устройства и несколько одинаковых функций.
СообщениеДобавлено: 03 ноя 2017, 02:09 
Старожил
Аватара пользователя

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 491
Qic писал(а):
Как это работает я понимаю, но это "условная компиляция".
Другой затык - как грубо говоря сделать несколько разных задач во FreeRTOS, которые содержат допустим каждая свой парсер строки, но обе работают с UART1 через его обработчик прерывания.

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


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека устройства и несколько одинаковых функций.
СообщениеДобавлено: 03 ноя 2017, 02:09 
Старожил
Аватара пользователя

Зарегистрирован: 01 авг 2016, 10:47
Сообщения: 209
Откуда: Таганрог
Так с FreeRTOS просто ж,...

при создании задачи есть возможность передать в него параметр любого типа.
вот и передавай туда или какой-нибудь ключ по которому будет изменяться указатель на функцию обработки\или непосредственно указатель на функцию. Зависит уже от деталей, делается легко и непринужденно.

как по мне, обработчик прерываний должен тупо сообщать о том, что он данные из А положил в Б. А вот реальный обработчик сидит где-то в сторонке и ждетс... хотя и тут возможны исключения, всяко бывает


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека устройства и несколько одинаковых функций.
СообщениеДобавлено: 03 ноя 2017, 02:15 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2409
Откуда: Санкт-Петербург
Может, отложить на пару дней (или даже на недельку, чтобы не торопиться) решение конкретной задачи и перечитать учебник по Си? Конкретней - нужен раздел про указатели на функции, но имеет смысл повторить всё.
Ну или если C++ - то про виртуальные функции. (Совсем для крутого решения я бы ещё напомнил про CRTP, но это необязательно, просто позволяет кое-где оптимизировать)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека устройства и несколько одинаковых функций.
СообщениеДобавлено: 03 ноя 2017, 12:06 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 4200
Qic писал(а):
как грубо говоря сделать несколько разных задач во FreeRTOS, которые содержат допустим каждая свой парсер строки, но обе работают с UART1 через его обработчик прерывания.

На входе, обработчик прерывания проверяет некую переменную, и в зависимости от значения выполняет парсер1 или парсер2 или парсер3 ....
;)
Короче говоря, не "набор разных обработчиков", а один обработчик с разными вариантами (режимами работы).
А вообще - почитайте, что такое Конечный автомат, оно же машина состояний, оно же стейт-машина.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека устройства и несколько одинаковых функций.
СообщениеДобавлено: 03 ноя 2017, 15:39 
Заглядывает иногда

Зарегистрирован: 25 апр 2011, 01:46
Сообщения: 130
aamonster писал(а):
Может, отложить на пару дней (или даже на недельку, чтобы не торопиться) решение конкретной задачи и перечитать учебник по Си? Конкретней - нужен раздел про указатели на функции, но имеет смысл повторить всё.

Основательно учил я паскаль и ассемблер, сишку как-то на лету. Я прекрасно понимаю как это выглядит. Ознакомился с этим разделом, спасибо за наводку, буду вникать.
Задача кстати решена, просто в данный момент я ищу более так сказать "красивое" решение.

u37 писал(а):
А вообще - почитайте, что такое Конечный автомат, оно же машина состояний, оно же стейт-машина.

Спасибо, я знаю что такое КА. Были несколько задач которые положено делать на КА, пока делал составил табличку состояний и посмотрев на неё другим взглядом выкинул все КА и сделал набор условий работающих с известными состояниями системы, звучит как КА, но им не является, оказалось проще. Но я не отрицаю КА в целом - каждому инструменту своё назначение.

u37 писал(а):
На входе, обработчик прерывания проверяет некую переменную, и в зависимости от значения выполняет парсер1 или парсер2 или парсер3 ....

Мне оказалось проще буферизовать такие данные и отдавать их грубо говоря через API моей системы, однако когда я попытался сократить работу с ОЗУ и передавать низкоуровневые участки из обработчиков указатели на массивы, то логика слегка поломалась и всё стало очень связанно.

Я осознал что не везде стоит пихать модульность и независимость блоков друг от друга. Сделаю буферное API с "ядром" которое будет жестко сконфигурировано, а каждый payload будет с уникальными именами подзадач, так по моему будет надежнее, логичнее, более читабельно и проще для осмысления.
Всем спасибо!


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

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


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

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


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

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

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