Easyelectronics.ru

Электроника для всех
Текущее время: 16 авг 2022, 03:21

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




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 30 мар 2020, 23:51 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5537
делюсь своей поделкой которую делаю для себя как хобби
основная идея - библиотека для IoT, простой мессенжинг многоплатформенный где есть с одной стороны отвязка от железа, а с другой от конкретного транспорта сообщений.
буду пошагово здесь какие то идеи описывать и реализации.

коротко по составу:
smcom - библиотека позволяющая описать железо
smlets - библиотека мессенджинга
smhw - мои конкретные проекты под конкретные платы для примера

smcom сама по себе тоже из двух частей
platform - содержит драйвера под специфичное железо. более менее поддерживаются сейчас stm8s и stm32 F0
наработки по avr тож есть, но семантика файлов не соответствует текущему рефакторингу библиотеки (TODO)

остальные файлы в smcom - надстройки для железа отвязанные от конкретного железа либо для (hwdrv) для какой то внешней переферии
в моих проектах реализована такая уонцепция:
- сначала описывается класс hw-proto.hpp под свое железо используя smcom
- затем описывается application appl-proto.hpp
- после чего пишется main в котором складываются в конечную программу библиотечный node (сейчас работает node-uart.hpp) + hardware + application.
свой такой доморощенный rtos под узкие задачи

из последнего что реализовано - простой мессенжинг с json сообщениями через uart и связкой этих сообщений с MQTT через стандартную прошивку tasmota для esp8266

репозиторий https://github.com/axillent/smletslib


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 30 мар 2020, 23:59 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5537
для затравки как обычно blink

stm8s103f3

на D2 светодиод между землей и выходом, режим pushpull
на D3 светодиод между VCC и выходом, режим инверсный (программно)
timer1 взведен на 1 Гц
первый светодиод будет мигать с частотой 1 ГЦ
второй с частотой 1/5 ГЦ
первый аргумент при вызове Run - число морганий. 255 - бесконечность
я эти Blink использую для всяких сигнальных светодиодов.

Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 00:16 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4537
Откуда: г. Липецк
Прям как по заказу SELEVO топик, на две очень разные платформы (в смысле AVR и STM). Не бывает таких оптимальных, вы будете проигрывать в обоих из-за разницы архитектур. Соберете (каким образом на разных архитектурах) наиболее оптимальные алгоритмы? Так они разные. О общем задумка хорошая, с оптимальной реализацией возможны трудности.


Последний раз редактировалось anakost 31 мар 2020, 00:19, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 00:17 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5537
теперь меняем три первые строки и номера портов
получаем blink под stm32f030f4

Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 00:19 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5537
anakost писал(а):
Прям как по заказу SELEVO топик, на две очень разные платформы. Не бывает таких оптимальных, вы будете проигрывать в обоих из-за разницы архитектур. Соберете (каким образом на разных архитектурах) наиболее оптимальные алгоритмы? Так они разные. О общем задумка хорошая, с оптимальной реализацией возможны трудности.

ктож спорит
универсальность это всегда компромисс
в жертву идет сложный функционал который на бывает кросс-платформенный
тем не менее
на ардуино мне было скучно писать
а на всяких SPL/HAL - грустно
пишу так


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 00:21 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5537
во всех проектах для подключения либы достаточно прописать путь для include
для stm32 кроме того нужно добавить в проект startup файл, он стандартный, копия лежит в либе


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 00:23 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5537
компиляторы IAR для stm8, stm32 (nuvoton 8051)
и g++ (atmel studio) для avr


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 00:23 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4537
Откуда: г. Липецк
Мда, блинк для AVR займет пять строчек (максимум, на некоторых сериях две строчки) ассемблерного кода. Для чего эта портянка?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 00:25 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5537
anakost писал(а):
Мда, блинк для AVR займет пять строчек (максимум, на некоторых сериях две строчки) ассемблерного кода. Для чего эта портянка?

тоже самое - для тех кому на ардуино скучно, а на ассемблере грустно
blink лишь иллюстрация (это надо объяснять?)
сами по себе они ни кому не нужны, даже на ассемблере


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 06:19 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 4986
Откуда: Китай, Пекин
Цитата:
Не бывает таких оптимальных, вы будете проигрывать в обоих из-за разницы архитектур.

почему? строим кодогенератор и вперёд


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 07:10 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 4986
Откуда: Китай, Пекин
давно занимаюсь подобной тематикой
в данный момент кодогенератор в офлайне, поскольку в связи с известным повсеместным шатдауном решился таки дописать то, на что не решался. добавил возможность делать многотиповые поля сообщения типа Oneof в protobuf . но у меня есть возможность массивов в таких полях в отличии от...
версия для C# уже работает

теперь собственно по проекту.
json?? серьёзно? пусть даже и tiny.
json - это иллюзия универсальности, приводящая в ад.

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

у исходников проблемма с кодировкой. win1251? серёзно? комменарии на русском языке? для кого?
MQTT ?? а это то каким боком и для чего?
Цитата:
простой мессенжинг многоплатформенный

в чем его многоплатформенность?

Код:
typedef enum

??? для чего, пострайтесь избегать этого.
есть же Enum Classes

откровенно не понимаю целеполагания проекта
если только как набить руку - то ок.

а если задача побыстрому решить проблемму то бери упомянутый protobuffer хочется реальной эффективности, удобства и так чтобы работало даже на STM8 - то тут только AdHoc protocol

PS и не стоить пытаться объять необъятное.

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

нужно создавать библиотеки / универсальный API, да такой, чтобы пользователь легко мог натянуть его на своё железо, которое он знает.


Последний раз редактировалось cheblin 31 мар 2020, 08:35, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 08:17 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4537
Откуда: г. Липецк
Из-за разницы архитектур, т.е отличающихся систем машинных команд конкретная реализация алгоритмов (программных решений) на них неизбежно будет отличаться. Первое что пришло на ум - BCD преобразование, где-то около 7 разновидностей. Наиболее оптимальная реализация должна учитывать особенности конкретной архитектуры, например на AVR и MCS-51 оптимальны разные алгоритмы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 08:34 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 4986
Откуда: Китай, Пекин
прежде чем заниматься подобными "оптимизациями" нужно убедиться в том, что это того стоит.

и только если выигрышь в несколько раз -
делать несколько библиотек и использовать на конкретной платформе ту, которая для неё наиболее оптимальна.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 11:44 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5537
cheblin писал(а):
теперь собственно по проекту.
json?? серьёзно? пусть даже и tiny.
json - это иллюзия универсальности, приводящая в ад.

эта дискуссия у нас уже была.

cheblin писал(а):
Код:
typedef enum

??? для чего, пострайтесь избегать этого.
есть же Enum Classes

enum class поддерживается не всеми компиляторами
а так я бы только за


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 11:55 
Старожил
Аватара пользователя

Зарегистрирован: 13 май 2010, 01:32
Сообщения: 1997
Откуда: Из сказки.
Библиотека хороша, для личного пользования автором.
Для всех остальных не представляет интереса, так как не имеет описания на анг и русском языках.

Я там что-то увидел про nuvoton :)

_________________
vk.cc/5AJ3Pu


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 12:51 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1706
axill писал(а):
более менее поддерживаются сейчас stm8s и stm32 F0

Возьмем, для примера, F072С8. Там куча таймеров, четыре USART-а, по два SPI/I2C, USB, CAN, ADC, DAC, RTC, CEC, компараторы... В либе из этого всего поддерживается только ADC, USART1 и таймеры, кроме самого полезного 32-х битного TIM2. Причем даже этот USART1 нормально не работает из-за классического бага в классе FIFO.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 16:10 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 4986
Откуда: Китай, Пекин
selevo писал(а):
Библиотека хороша, для личного пользования автором.
Для всех остальных не представляет интереса, так как не имеет описания на анг и русском языках.

Я там что-то увидел про nuvoton :)


это старая тема автора не знаю почему он ссылку сам не дал


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 16:44 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5537
Reflector писал(а):
axill писал(а):
более менее поддерживаются сейчас stm8s и stm32 F0

Возьмем, для примера, F072С8. Там куча таймеров, четыре USART-а, по два SPI/I2C, USB, CAN, ADC, DAC, RTC, CEC, компараторы... В либе из этого всего поддерживается только ADC, USART1 и таймеры, кроме самого полезного 32-х битного TIM2. Причем даже этот USART1 нормально не работает из-за классического бага в классе FIFO.

Расскажите про баг
Отладил со своим кодом много устройств, на баг не наткнулся
Поддержку чего либо пишу по мере использования в каком либо проекте, то что перечисленно я нигде не использовал
Колабарация приветствуется


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 16:45 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5537
selevo писал(а):
Библиотека хороша, для личного пользования автором.
Для всех остальных не представляет интереса, так как не имеет описания на анг и русском языках.

Я там что-то увидел про nuvoton :)

Не было запроса
Эта тема попытка понять есть ли такой запрос и отчасти ответить на вопрос использования


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 16:46 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5537
cheblin писал(а):
selevo писал(а):
Библиотека хороша, для личного пользования автором.
Для всех остальных не представляет интереса, так как не имеет описания на анг и русском языках.

Я там что-то увидел про nuvoton :)


это старая тема автора не знаю почему он ссылку сам не дал

Мало общего осталось, поэтому и не давал ссылку


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 18:05 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1706
axill писал(а):
Расскажите про баг
Отладил со своим кодом много устройств, на баг не наткнулся

Допустим во входном буфере один байт, чтобы его забрать вызываем Pop(), внутри есть строка:
Код:
if( !(--(data.n)) ) data.state = FifoState::Empty;

Значение data.n загружается в регистр, если в этот момент произойдет прерывание в котором в буфер добавится новый байт, то data.n станет равным 2, но после возврата туда запишется 0, таким образом новые данные потерялись.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 18:15 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5537
Reflector писал(а):
Значение data.n загружается в регистр, если в этот момент произойдет прерывание в котором в буфер добавится новый байт, то data.n станет равным 2, но после возврата туда запишется 0, таким образом новые данные потерялись.

какое решение?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 18:27 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3728
axill писал(а):
Reflector писал(а):
Значение data.n загружается в регистр, если в этот момент произойдет прерывание в котором в буфер добавится новый байт, то data.n станет равным 2, но после возврата туда запишется 0, таким образом новые данные потерялись.

какое решение?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 20:39 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5537
атомарно это с отключением прерываний?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С++ библиотека для avr8/stm8/stm32
СообщениеДобавлено: 31 мар 2020, 22:38 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1706
axill писал(а):
атомарно это с отключением прерываний?

Да, на F0 только отключение прерываний.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.


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


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

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


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

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

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