Перейти к содержанию
С Днём Победы! ×

C++ и Микроконтроллеры


Гость Игорь

Рекомендуемые сообщения

Добрый день!

На данный момент язык С++ представляет очень большие возможности. STL, многопоточность и прочее. 

Подскажите, из того что есть в ++ что обязательно необходимо знать для программирования микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

2 минуты назад, Гость Игорь сказал:

из того что есть в ++ что обязательно необходимо знать для программирования микроконтроллеров ?

Обязательно - ничего. Достаточно вообще обычного Си.
 

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

8 минут назад, Alex сказал:

Обязательно - ничего. Достаточно вообще обычного Си.
 

А желательно ? может классы для более хорошей организации программы.

Ссылка на комментарий
Поделиться на другие сайты

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Только что, Гость Игорь сказал:

классы для более хорошей организации программы

Даром там не нужны. Только лишнюю память забивать. МК программят на Си.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

8 часов назад, Гость Игорь сказал:

А желательно ?

Думаю, шаблоны надо изучить. По тем примерам, которые мне попадались, С++ для микроконтроллеров (я говорю про круг своих интересов - AVR, т.е. 8-битники), я делаю вывод, что основной выигрыш достигается применением шаблонов, а не классов.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

А чего там подробнее? Прежде всего, я лично с плюсами не очень дружу - так, общее представление имею...

Иерархии классов для известных мне примеров не дают тех преимуществ, как для "больших" систем, т.к. в маломерных МК можно использовать только статические экземпляры классов, что по своей сути ничем от обычного С-подхода не отличается, разве что чуть элегантнее исходники (не кидайтесь тапками, но тут в пример приведу ардуино-скетчи - абстрагирование от аппаратуры очень высокое). Главные плюшки "объектного" подхода проявляются при динамическом создании и уничтожении экземпляоров классов, а для этого и памяти маловато, и быстродействия.

Что еще остается в плюсах, кроме не пригождающихся классов? Только шаблоны. Вот тут и получается более-менее приятный результат - написал, вроде 1 шаблон, а в итоге работает 100500 разных функций. Наибольший шок эти шаблонные подходы у меня вызвали, когда я на просторах electronix.ru наткнулся на статью про "виртуальные порты", т.е. когда при выводе байта каждый его бит может попадать на произвольную ногу микроконтроллера. К сожалению, ни ссылки, ни автора не помню... Помню только, что очень лихо там автор шаблоны применял - голову сломать можно.

Что касается "оверхеда", то С++ в основном не так уж и проигрывает классическому С, если все-таки говорить об ограниченном применении для МК-маломерок (см. выше). Так что если хочется - запросто можно пользовать. Лично я не делаю этого по одной причине: выигрыш мизерный, а головняк по изучению плюсов заметный, и даже те же шаблоны перегревают мозг.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

"Перегрузка" ещё - хороший плюс плюсов.
Что касается классов. По мне, единственным их плюсом в использовании под "мелкие" платформы, без ущерба ресурсам - логическое объединение (связывание) полей классов (или структур) и методов. На Си приходится создавать функции, одним из параметров которых - указатель на структуру. Плюсы решают это мелкое недоразумение.


 

Ссылка на комментарий
Поделиться на другие сайты

22 минуты назад, Alex сказал:

"Перегрузка" ещё - хороший плюс плюсов

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

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

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

 

 

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, BARS_ сказал:

А смысл?

Смысл осознаётся только тогда, когда начинаешь использовать эти все возможности.
Расписывать это всё тут бессмысленно.
 

Ссылка на комментарий
Поделиться на другие сайты

12 часа назад, ARV сказал:

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

http://easyelectronics.ru/rabota-s-portami-vvoda-vyvoda-mikrokontrollerov-na-si.html

В 04.06.2017 в 13:58, Гость Игорь сказал:

Подскажите, из того что есть в ++ что обязательно необходимо знать для программирования микроконтроллеров ?

Обязательно шаблоны и по возможности только статические методы классов (без конструктора)

Пробовал C++ вместо Си (компилятор IAR):
по RAM можно получить результат как на Си (байт в байт), по объёму кода (Flash) зависит от оптимизации, но в целом код на C++ соизмерим с размером кода на Си (пробовал C++ на ATtiny2313 и ATmega32, работает нормально и там и там).

Когда основные классы уже написаны, то получается очень даже ничего, например настройка и использование таймера (прерывание каждую милисекунду) выглядит так:

typedef TTimer0_SimpleCycle < TTimerValue< 1 >::ms> Timer_0;   // класс, отвечающий за настройку таймера на 1 млсек
...
Timer_0::Init();
Timer_0::Start();

Можно задавать в MCycles, KCycles, Cycles, MHz, KHz, Hz, ms, us, ns. Причём, если таймер не позволяет обеспечить нужное значение, то во время компиляции выдаётся ошибка.

Изменено пользователем dm37
Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

То, что у меня получилось на C++, можно посмотреть здесь https://ru.files.fm/u/a2sfccuf#/list/, файл uC_cpp.7z

Внутри:
- пример с динамической индикацией (исходники + proteus)
- пример с LCD на HD44780 (исходники + proteus)
- небольшое описание

Микроконтроллеры ATtiny2313 и ATmega32, компилятор IAR

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Привет)
у меня возникла проблема с программированием микроконтроллера....
не могу понять как мне из 8 светодиодов сделать так скажем бегущую "змейку" из 4 светодиодов ? не подскажете как это на с++ оформить?

 

Ссылка на комментарий
Поделиться на другие сайты

Ну если применительно к тому, что я писал, то:
- создать класс драйвера выходного устройства (например DrvLed8), в классе драйвера создать два метода:
   DrvLed8::Init() - инициализация пинов контроллера,
   DrvLed8::Set(uint8_t mask) - включение/выключение светодиодов в зависимости от маски (0xAA, 0x55)
- создать класс устройства DevLed8 с одним методом DevLed8::Tick(), в котором будет осуществляться смена маски для DrvLed8::Set(uint8_t mask)
- создать счётчик TCounter, для определения (изменения) скорости мигания (если доработать, то, например, через метод TCounter::Set(uint16_t value) можно менять скорость мигания, при наличии кнопок, конечно)
- настроить прерывание на 1 млсек (можно другое значение). В прерывании выполнять Counter::Tick()

а дальше примерно так

typedef TFlags < 1 > Flags;                                         // хранилище флагов на 1 флаг
typedef TFlag < Flags, 0 > FCounter;                                // флаг для работы счётчика
typedef TDevLed8 < TDrvLed8 > DevLed8;                              // устройство управления 8 светодиодами
typedef TCounter < 200, FCounter > Counter;                         // счётчик на 200 млсек
typedef TTimer0_SimpleCycle < TTimerValue < 1 > ::ms > Timer_1ms;   // настройка таймера на 1 млсек
//---------------------------------------------------------
struct IRQ_1ms
{
    #pragma inline = forced
    static inline void execute(void)
    {
        Counter::Tick();
    }
};
template void IRQ_Timer0_CompareA < IRQ_1ms > ::execute();
//---------------------------------------------------------
void main(void)
{
    DevLed8::Init();
    Timer_1ms::Init();
    Counter::Init();

    Timer_1ms::Start();
    _SEI();

    while(1)
    {
        if(Counter::Check())
        {
            DevLed8::Tick();
            Counter::Reset();
        }
    }
}

После можно будет добавить в класс DevLed8 метод SetMode(uint8_t mode) для задания номера эффекта

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • После входной лампы так и просится расщепленный фазоинвертор, который идеально состыкуется с входным каскадом без разделительной емкости и сам по себе является очень простым и стабильным решением. А вот диффкаскад мало того, что лишний триод, так еще и токи в плечах не совсем симметричны, причем дисбаланс со временем только усугубится. Токи можно выровнять только раздельными катодными резисторами. Такой ФИ понадобится когда раскачка в амплитуде нужна вольт эдак 80 или выше. Еще его можно попробовать в общей петеле ОС по аналогии с транзисторной схемотехникой.
    • Спасибо за ссылку, Именно с этим Паком у меня впервые и возникли проблемы со встроенной внутри заразой. Тоже самое потом было и c DPS. Но это было давно, с тех пор я им больше не пользовался. Возможно что этот лучше, но пока не попробуешь, не будешь знать. Будет время и необходимость, попробую и проверю.  По поводу "бесплатных драйверов" - драйвера у DSP есть бесплатные онлайн, но с "довеском" ввиде всякого шита. Даже полный небесплатный пакет тоже с этим дерьмом идет. Ничего смешного тут нет. Один клиент купил это дерьмо, и что потом, в суд подавать на ту компанию? Он собирался им сделать гадость, хорошо что мне удалось все вычистить... KDE мне нравился старый, новый не очень... Чаще использую XFCE (насколько cтарое железо позволяет), или Cinnamon. Оболочка скорее нужна только для запуска программ, чем сама по себе. Ubuntu сам по себе достаточно "тяжелый", MX Linux, Manjaro или Mint для более старого железа. На одном ядре приходится жертвовать красотой ради  сравнительно  "нормального" управления. Слава богу, что под любой комп можно что-то подобрать.
    • Не совсем понятно чего ТСу надо?  Т.е. очень похоже, что ТС слабо представляет что оно такое и как с этим обращаться и в придачу или забанен во всех поисковиках, или не понимает что там написано.  Выше уже отметили, но и (специально для Гость Алексей) добавлю, что для использования "Z5R" в любых, необходимых в нём местах, никаких схем не надо.. Всё, что нужно для включения её куда-нибудь, все её настройки и режимы в досконально "разжёванном виде" есть в Инете в свободном доступе.
    • Литцендрат в обмотках из-за того , что рабочая частота трансформатора в 1000 раз выше , чем 50 герц в сети 230 вольт. На высоких частотах ток идёт по поверхности проводов - больше площадь поверхности.
    • Проверил на практике, сначала выпаял R123 и второй 10Ом резистор и заменил перемычками, флешка начала определяться на ГУ, но при попытке чтения происходило зависание приложений. Затем попробовал выпаять R101 и  R103 результат такой же. И только когда выпаял L106 и L105 флешка начала нормально читаться. Для теста проиграл одну мелодию. Как-то так, у меня есть вторая плата AUX+USB завтра попробую на ней отпаять дроссели и припаять перемычки.
    • У многих радиолюбителей есть компьютеры, которые их удовлетворяют по многим причинам. На новых нет "железных" LPT и COM портов. Сейчас восстанавливаю мать ASUS M2V. 10-ка LTSC легла, но убиты звуковуха и Eternet. Чипы заказал, приедут перепаяю. А по теме, может всё-таки BIOS обновить, загрузиться с внутренней видеокартой, потом с внешней.
    • Cortland rs400 не отключается mute. Изначально на дисплее светились все сегменты, был пробит транзистор, обрыв стабилитрона по -30в, после замены напряжение в норме но дисплей также весь светился. после замены драйвера все заработало. сейчас ресивер полностью работает но висит в MUTE. Усилитель работает нормально. R324 стоял МЛТ1 заменил на 0.25 47к , МЛТ стоял 47к а новый оказался 44к. все транзисторы, диоды по цепи защиты целые.  Подскажите в какую сторону копать?  Ресивер висит в MUTE из-за Protect. какое напряжение должно быть на  Protect. Именно TEAC часто на форумах с подобным, но решения нет. На клонах проблем нет, единственное отличие в клонах подтяжка Protect 10к а в TEAC 47к. ag15d.pdf
×
×
  • Создать...