LINUX.ORG.RU

Не-IDE для микроконтроллеров

 ,


3

4

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

void
setup()
{
}

ему почему-то нужно, чтобы void setup были на одной строке. Не трагедия, но довольно-таки странно.

Поскольку основной софт пишу в виме и собираю мейком, то хотелось бы узнать у бывалых эмбедщиков, чем они пользуются при разработке. Например можно ли кросс-конпелять сорцы обычным gcc или другой консольной тулзой и заливать через /dev/cu* обычной последовательностью по типу AT-команд или какой там протокол у встроенных программаторов? Также интересно, какой чип вы юзаете для рандомных исследовательских задач, т.е. когда непонятно, сколько нужно будет Кб и МГц. Пока смотрю в сторону готовых STM32/discovery со встроенным отладчиком (st-link, если я правильно все понял), т.к. у них есть весьма жирные камушки, способные на худо-бедную обработку данных. Расбери-пи конечно дороговат, но истории успеха также приветствуются.

Шаблонизатор проекта я могу склепать самостоятельно, главное то, можно ли отвязаться от этих студий, чтобы не делать туда ctrl-c ctrl-v из вима, а вместо этого писать нормально, как обычные модульные десктопно-консольные программы, линковать [свои] библиотеки, собирать и выкатывать все через make struct / make build / make upload / cat минуя графические свистелки.

В интернетах в основном восторги по поводу простоты, ориентированные на тех, кому за 16, ничего такого пока не видел.

В ардуино страндартный GCC. Как именно компилятор ругается на этот void?

Простых и универсальных способов заливать прошивку нет. Нужно выбирать МК и там смотреть. Я поддерживаю простую и кросс-платформенную утилиту для МК Atmel - https://github.com/ataradov/edbg . Но при желании другие МК можно добавить за 1 день.

Естественно нужен внешний программатор, но сейчас почти все отладчные платы его имеют на ботрту.

alexru ★★★★
()

ТС, у тебя каша в голове. Расбери-пи это не контроллер, а одноплатный полноценный компьютер с нормальным Linux-ом на борту или даже с виндой. Про Arduino и vim ты уже гуглил?

peregrine ★★★★★
()
Ответ на: комментарий от alexru
void // enter вместо пробела (этого коммента нет)
setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}
Arduino: 1.6.6 (Mac OS X), Плата:"Arduino/Genuino Uno"

sketch_dec23a:2: error: two or more data types in declaration of 'setup'
 setup() {
            ^
sketch_dec23a:2: error: ISO C++ forbids declaration of 'setup' with no type [-fpermissive]
 setup() {
       ^
/Users/Artur/Documents/Arduino/sketch_dec23a/sketch_dec23a.ino: In function 'int setup()':
sketch_dec23a:2: error: new declaration 'int setup()'
In file included from sketch/sketch_dec23a.ino.cpp:1:0:
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Arduino.h:145:6: error: ambiguates old declaration 'void setup()'
 void setup(void);
      ^
exit status 1
two or more data types in declaration of 'setup'
~$ /Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avr-g++ --version
avr-g++ (GCC) 4.8.1


edbg

Круто. Но похоже для уно не взлетит, только для zero.

Пока искал, что за компилятор, наткнулся на сборочный лог, там все, что нужно для уны есть. Наверное и из других сред можно вытащить тулзы, сами по себе среды не мешают, пусть стоят. Спасибо!

arturpub ★★
() автор топика
Ответ на: комментарий от peregrine

Нет, чот сразу не догадался :)

не контроллер, а одноплатный полноценный компьютер с нормальным Linux-ом на борту или даже с виндой

GPIO есь? Есь.

arturpub ★★
() автор топика
Ответ на: комментарий от arturpub

Это похоже на какие-то проблемы с переносами строк.

Edbg использует протокол SWD для общения с чипом и стандартный CMSIS-DAP для общения с программаторами. Так что в основном подходит только для ARM-ов и еще нескольких странных, но совместимых чипов.

Ну и да, Zero поддерживается из коробки.

alexru ★★★★
()
Последнее исправление: alexru (всего исправлений: 3)

«Студиями» только вантузятники пользуются. У нормальных людей обычные самописные Makefile (а у некоторых даже cmake) и иногда простые левые библиотечки (вроде того же opencm3 для STM32).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от peregrine

Если бы у STM32 был mmu, это был бы отличный заменитель какой-нибудь «малинке».

Eddy_Em ☆☆☆☆☆
()

Пользую ТИ ланчпад серию, там есть все, от 16-ти битного лоу павер мк мсп430, до «мощных» Cortex-M/Cortex-R. Юзаю gmake+гцц в обеих случаях(gcc430 и обычный gcc для М4).
Когда надо еще больше, есть TI CCS(или вим + обычный линаровский кроскомпиллер) и Cortex A8/A9 с линуксами... Ну или прям на борде компилю :-)

Jetty ★★★★★
()
Последнее исправление: Jetty (всего исправлений: 1)
Ответ на: комментарий от arturpub

PLL есь? Не. ADC/DAC встроенные есь? Не. Таймеры программируемые есь? Не. Какой он тебе микроконтроллер на?

anonymous
()

Я к говнуино даже не притрагивался - просто купил несколько разных attiny и atmega, бредборд и рассыпуху, сначала писал на асме (avra) и шил через LPT порт (avrdude), потом перешёл на C (avr-gcc, avr-libc), и нормальный usb программатор (usbasp, заказал на electronshik.ru, шить той же avrdude). IDE - vim, сборка и заливка - make. Всё работает идеально.

А к stm32 я пока не знаю как подступиться, аналогов avr-gcc и avr-libc под них я не вижу, программатор там другой, с не-DIP корпусами работать сложно, а попсовую плату типа discovery я покупать не хочу. Так что ну его нафик.

И вообще я думаю что если не хватает атмеги, то лучше взять полноценный одноплатник на arm (типа rpi или cubieboard), поставить туда полноценную ось и работать по ethernet/ssh/git/собираться прямо на железке. Никаких программаторов и протоколов, а отлаживаться можно без гемороя на десктопе.

slovazap ★★★★★
()
Последнее исправление: slovazap (всего исправлений: 2)
Ответ на: комментарий от anonymous

Анон, мне вот совершенно пофигу до номенклатуры и буквоедства. Главное, что это не «десктоп» и не «ноут», куда нельзя воткнуть периферию с рандомными ногами. Раз уж это не было понятно из контекста, я добавил небольшой намек, без цели спорить о терминах. Алсо, в таком формате неважно, встроено что-то или нет.

arturpub ★★
() автор топика
Ответ на: комментарий от slovazap

и avr-libc под них

Нафейхоа они на stm32? Какие такие возможности у libc что нет в либах под stm32???

с не-DIP корпусами работать сложно

QFP паяется элементарно

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Нафейхоа они на stm32?

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

QFP паяется элементарно

подтверждаю

Eddy_Em ☆☆☆☆☆
()

Пока смотрю в сторону готовых STM32/discovery со встроенным отладчиком (st-link, если я правильно все понял), т.к. у них есть весьма жирные камушки, способные на худо-бедную обработку данных. Расбери-пи конечно дороговат, но истории успеха также приветствуются.

Насколько я помню, там разница в цене 1к рублей.

И таки согласен с peregrine, у вас каша в голове.

Например можно ли кросс-конпелять сорцы обычным gcc или другой консольной тулзой и заливать через /dev/cu* обычной последовательностью по типу AT-команд или какой там протокол у встроенных программаторов?

Не знаю как под ST-link, a у JLINK`а есть GDB и GDBserver.

Raspberry Pi, как уже сказали, это обычный linux (только под ARM). Там все тот же GDBserver вам в помощь.

RiseOfDeath ★★★★
()
Ответ на: комментарий от RiseOfDeath

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

arturpub ★★
() автор топика
Ответ на: комментарий от Eddy_Em

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

Да и 300 рублей она стоит только на али. В магазинах я дешевле 500р за шт. не видел (это было полгода назад)

RiseOfDeath ★★★★
()
Последнее исправление: RiseOfDeath (всего исправлений: 5)
Ответ на: комментарий от Gorthauer

К нему нет «штатного линукса».

В Raspbian`е (Debian для малинки) точно не стоят патчий на реалтайм, но вообще реалтаймовые патчи для линукса существуют.

RiseOfDeath ★★★★
()
Последнее исправление: RiseOfDeath (всего исправлений: 2)
Ответ на: комментарий от Eddy_Em

Для таких мощей realtime нафиг не втарахтелся!

Realtime это не как можно меньшее, а гарантированное наихудшее время реакции системы.

one_more_hokum ★★★
()
Ответ на: комментарий от one_more_hokum

Знаю. Просто я действительно не вижу ни одной попсовой задачи, где нужен риалтайм. Ядреные реакторы к попсовым задачам не относятся.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

не вижу ни одной попсовой задачи

Имеется в виду — для домашнего использования? Если так, то да, дома realtime непонятно, куда воткнуть. А если про промышленное применение в целом — то полно случаев, когда требуются гарантии того, что система стопудово отработает не позднее, чем...

one_more_hokum ★★★
()
Ответ на: комментарий от one_more_hokum

Если так, то да, дома realtime непонятно, куда воткнуть.

В домашнюю систему поддержания жизнеобеспечения больного? Ну или просто потому, что «так хочется рилтайма» :)

andreyu ★★★★★
()
Ответ на: комментарий от one_more_hokum

для домашнего использования?

Да. Понятное дело, ЭБУ в автомобиле только на нормальном мелкоконтроллере можно делать. А то зависнет так линукс, и кирдык!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от andreyu

В домашнюю систему поддержания жизнеобеспечения больного?

Которую спаяет на коленке его сын?

Ну или просто потому, что «так хочется рилтайма»

Для самообразования — да, может быть полезным в плане прокачать навыки, и ЧСВ.

one_more_hokum ★★★
()
Ответ на: комментарий от andreyu

В домашнюю систему поддержания жизнеобеспечения больного?

Там и 2 минуты неопределенности — пустяк. Это тебе не автомобиль, не конвейер и даже не ядерный реактор.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от t184256

Ну ты даешь! При работе со звуком реальное время нахрен не втарахтелось: ОСь потихоньку загоняет данные в буфер звуковухи по мере его освобождения, а уж звуковуха эти данные гонит в динамики.

Дотрындишься так, что без RT-оси вообще невозможно на десктопе работать... Ржунимагу.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Gorthauer

Для меня это не так важно, потому что не зная, что это, я не найду задач, где это можно было бы применить, и наоборот. Все мои (не мои вернее, а окружающие) идеи это как через sms/3g/bt управлять медленным оборудованием и снимать показания раз в секунду. Самолеты в космос мы не запускаем. Разница в архитектурах интересна только с точки зрения удобства программирования, а если нужна будет целая серия, то для этого есть тз, бюджет и миницех, который все сделает прямыми руками.

arturpub ★★
() автор топика
Ответ на: комментарий от Eddy_Em

а буфер этот нужен размером <5мс => требования на интервал между загонами присутствует и жесткое. не пори горячку.

t184256 ★★★★★
()
Ответ на: комментарий от Eddy_Em

А это смотря как и с каким звуком работать. Если надо очень быстро реагировать на звук с какого-то источника, то RT надо.

peregrine ★★★★★
()
Ответ на: комментарий от Eddy_Em

Это потому что ты днище и не знаешь что такое сэмплер.

anonymous
()
Ответ на: комментарий от slovazap

Бинарники мне не нужны, мне нужны порты под FreeBSD

А они (порты) что, не в бинарниках идут? Ну так есть и исходники — конпелируй-не-хочу. В чём проблема-то?

one_more_hokum ★★★
()
Ответ на: комментарий от slovazap

Для cortex M* (напр в stm32f4discovery) используется arm-none-eabi-gcc и openocd для прошивки, и то и то есть в бинарниках/исходниках под все распространённые платформы (ну и самому можно собрать). Для фряхи есть в портах, под linux/os x есть бинарники и пакеты для дистрибутива. Редактировать можно в чём угодно, собирать хоть ninja хоть make. Я обычно добавляю phony сразу для прошивки и по make flash заливает на контроллер. Если нужна rtos, то обычно берут freertos, если нужно с hal то есть chibi os. Если нужна сеть/sd карты, но есть готовая плата от electron14 в которую втыкается discovery. Ethernet работает через lwip.

Если периферия слишком сложная, то при наличии java работает stm32cubemx для генерации шаблона, который потом можно запускать через makefile (и если хочется ide работает через eclipse).

anonymous
()
Ответ на: комментарий от anonymous

Ну да, я так примерно и понял. Ещё слышал про stlink (для прошивки) и сам недавно наткнулся на libopencm3 (libc). Похоже софт действительно весь есть, теперь меня останавливает только отсутствие чипов в DIP исполнении.

slovazap ★★★★★
()
Ответ на: комментарий от slovazap

Впрочем, нашёл Cortex-M0+ LPC1100L от NXP. Не знаю, есть ли в нём смысл.

slovazap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.