Easyelectronics.ru

Электроника для всех
Текущее время: 17 окт 2018, 12:51

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

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

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

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

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

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

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

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

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


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

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


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

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


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

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


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

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

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


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

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


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

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

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


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

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

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


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


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

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

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

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


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

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


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

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

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


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

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


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

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


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

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

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