Pull to refresh

Comments 40

А stm32f4discovery на картинке про поддерживаемые платы просто для смеха размещена, или ее тоже можно прошить и использовать с Espruino? А то я бы достал ее с полки чтоб попрообовать.
Нет, вовсе не для смеха. Под неё можно собрать ядро из исходников и загрузить через штатный ST-Link по USB-кабелю. Мы пробовали — работает.
Оу, отлично. Надо сдуть пыль со своей и попробовать.
Что имеет значение, так это то, что C++ — сложный и деревянный. Да, он близок к железу, но именно поэтому требует глубокого понимания этого железа и информатики.

Скажу как человек, который любит высокоуровневые языки и которому лень изучать что то другое.
Когда только начал смотреть в сторону arduino много гуглил, можно ли под него взять какой нибудь питон и не париться. Но когда все же попробовал писать на С++ (знаю знаю, arduino ide добавляет очень много сахара), никаких проблем не возникло. Если не лезть в дебри, то можно обойтись обычным официальным мануалом. Это не сложнее, чем JavaScript.
Сложно написать большую программу, а причин две: 1) отсутствие неявного преобразования типов и как следствие — выходящие из под контроля монструозные функции и 2) погруженность в единый loop(), от которого, как ни крутись, не избавишься.
2) погруженность в единый loop(), от которого, как ни крутись, не избавишься

Вы не поверите, но с этим никаких проблем!
Вам никто и ничто не мешает написать типичное "int main(){...}".
Ну тут как посмотреть. Я бы сказал, что тут у медали, как водится, две стороны
Извините за каламбур, но плюсы плюсов:
1) отстутствие неявного преобразования типов, и, следовательно, упрощение разработки в IDE и меньшее количество багов на этапе отладки
и
2) явная погруженность в единый loop(), что позволяет намного точнее управлять происходящим, нежели некий абстрактный setInterval()

p.s: код, чтобы гонять туда-сюда массивы на любом языке плюс/минус одинаков
«код, чтобы гонять туда-сюда массивы на любом языке плюс/минус одинаков»
вот только почему то изредка попадаются вакансии на то чтоб гонять туда сюда массивы байт в сыром виде,
и начинаются они с 150-200тр.
совсем недавно мужик искал спеца по передаче данных для мед техники и томографов с «простой» задачей — достигнуть 50% полосы пропускания USB 2.0 HS (480 МГц) на фтди. Сфейлилась вся очередь желающих и соискателей.
UFO just landed and posted this here
Хм, я, например, в js как раз больше всего и не перевариваю это неявное приведение типа.
Не смотря на то, что старенькая STM32VLDISCOVERY в списке поддерживаемых, после прошивки бутлоадера по ману с их сайта — дискавери отвалилась навсегда. Теперь она не определяется в системе и прошить ее штатно невозможно. Ну а поскольку отдельного STLink-а под руками нет — пришлось на все это забить. Вот такая печаль-беда. Теперь есть дискавери-сувенир =(.
Именно версию VL не пробовал, пробовал F4. Если что-то пошло не так, на плате должен быть пин BOOT0. Замыкаете его на 3.3V, ресетите и вы в DFU — сможете заново залить нужную прошивку.
СТМ32 можно навсегда ушатать, только прошив Level 2 защиту. Из всех остальных состояний они поднимаются через бутлоадер, жытаг и даже СВД с пре-ресетом
Эти Espruino стоят практически как полноценные мини-пк вроде raspberry, ну и зачем они тогда?
Это разные вещи. Каждой — своя задача. RPi стартует дольше минуты, опустошает батарейку моментально и не имеет аппаратных средств для работы с большей частью хоббийной периферии, зато мощи хоть отбавляй: Linux, мультимедиа, все дела. Espruino из другого лагеря: лёгкая, энергоэффективная, коммуникабельная.
----Программирование похоже на… JavaScript.

то что написали практически один в один С++
Может, не совсем удачный пример. Вся прелесть становится очевидно в проектах сложных с архитектурной точки зрения.
Но даже в этом сниппете: сможете на C++ также быстро разобрать SMS и проверить её валидность?
Если имплементированы необходимые библиотеки, то ваш код будет работать без изменений на C++.
Я понимаю если бы вы писали про голимый С — там с архитектурной точки зрения все плохо, но java-script — это полный кошмар среди языков, хуже наверное тока VB.

Современный С++ обладает большинством фишек функциональных языков.
А уж с архитектурой приложений на нем всегда было в порядке.
Ну а всё же, смску разберёте на C++?
Мне кажется, вы лукавите, судя по документации, с вашем примере просто использована встроенная функциональность: http://www.espruino.com/SIM900

На C++ при наличии готовой библиотеки было бы что-то типа такого (не ручаюсь за синтаксис, я на С++ не писал давольно давно, а профессионально, в общем, никогда):

#include <stdio.h>
#include <sim900.h>

void SMSHandler(char* text) {
int r,g,b;
sscanf(text, "%i %i %i", &r, &g, &b);
if(r && g && b) fadeTo(r,g,b);
}

sim900 *sim = new sim900();
sim->powerOn();
sim->addHandler(sim900::EVENT_SMS, &SMSHandler);

А хорошо :) Речь не о библиотеке шла, а о скорее банальных вещах. Вот в вашем примере: кто хозяин строки текста СМС, т.е. кто должен освободить память? Кто-то как-то должен и для этого должен быть дополнительный код или вызов. Аналогично, addHandler мы сделали, но где-то нужно давать шанс этому хендлеру вызываться. Ничего сложного, но мелочей много и что-то обычно уходит из виду.
>> кто хозяин строки текста СМС, т.е. кто должен освободить память
класс sim900, он нам ее передает, так что это его проблемы.

>> нужно давать шанс этому хендлеру вызываться
опять же, sim900 его и вызовет

Для нас все будет точно так же, на нашем уровне абстракции нам только надо написать обработчик с прототипом, указанным в документации («SMSHandler») и зарегистрировать его («sim->addHandler(sim900::EVENT_SMS, &SMSHandler);»).

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

Я просто хотел сказать, что C++ позволяет при желании писать точно в таком же стиле. А то, что многие примеры «как сделать XXX на МК» в интернете представляют собой лапшу из бизнес-логики и двоичных операций над регистрами — это не вина языка.
>java-script — это полный кошмар

Ну ужас. Но не УЖАС УЖАС! (с)

На js можно транспилить что то вроде больше сотни языков https://github.com/jashkenas/coffeescript/wiki/list-of-languages-that-compile-to-js
Берете любой по своим понятиям и пишите — в чем проблема?

PS авторам — может действительно стоило бы разобрать пример с каким нибудь питоном?
… а теперь мы попробуем запустить майнкрафт на AtTiny48!
Майнкрафт на JavaScript?
А кстати, что у Espruino с генерацией точной частоты?
Чтобы сделать музыкальный синтезатор на Arduino, я выводил tone() на пин, затем железно соединял его с прерыванием, по которому выполнялся код, который обрабатывал короткий Калман-фильтр с клавиатуры и мог выставить новое значение tone().
SetInterval(), как я понимаю, не гарантирует микросекундную точность?
С другой стороны, digitalPulse не дает последовательной пульсации.
Задача tone — генерация ШИМ с 50% скважностью, но с заданной частотой, которая отличается от «жёстко-установленной» для analogWrite.
На Espruino всё проще, analogWrite сама принимает параметр частоты. Вот, например, 3 кГц:
analogWrite(P2, 0.5, {freq: 3000});

Или вот сигнал для серво:
analogWrite(P2, 0.05 /* 1000 us */, {freq: 50});
Спасибо, это хороший вариант.
Обратно также через прерывания заводить?
Да, через setWatch. Это не совсем настоящее прерывание: при возникновении события ставится лишь флаг на исполнение, а настоящее исполнение происходит в основном event-loop’е, но его будет вполне достаточно, если в event-loop’е нет других задач.
Настоящие прерывания всё равно возможны, только они сложнее: обработчик обязан быть написан на нативном Си.
Не, это работать не будет. Впрочем, никто не мешает мне поставить рядом ардуино для таких задач…
Подробнее про ESP8266 можете рассказать? Интересно использование Espuino с дешевым железом
C++ тоже далек от железа. Как, например, на нём сделать циклический сдвиг через флаг переноса? И как вообще работать с флагами? Всякие прикольные инструкции не поиспользуешь. Код, для которого нужны жесткие тайминги, тоже непонятно как писать. Кто его знает во что C++ код будет откомпилирован и сколько тактов это будет выполняться.
С другой стороны, для большинства задач это наверное не важно.
#asm(«sei»);

Еспруино это ладно. Меня вчера матерый электронщик, дед с окладистой бородой, спрашивал — вот смотри, раньше в электронике-60 системах была команда Halt, меня интересует, а сейчас на коре2дуо я такой же фокус повторить смогу? Тырить осциллографом уровни при адресации… Ну, я ему обьяснил, как устроена материнка.
Я его огорчил. Сильно. Потому что нижнего уровня почти не осталось. А если еще контроллеры начнут на яваскрипте запускать — то всё, тут даже всей лабораторией с кучей навороченных приборов уже мало что поймёшь. Утрирую, но нынешние SOC — кошмар в плане ремонта и отладки, если ты не подписал NDA.
Здесь WebAssembly был бы в тему, чтобы заливать в железку байт-код, а не текст JavaScript.
Видимо они решили, что 256КБ флэша хватит всем, а кому не хватит пусть страдают
Главная проблема любого фрэймворка и высокоуровнего языка — это документация. О многих имеющихся функциях не узнаешь, пока на stackoverflow кто-нибудь не упомянуть. Откуда информацию берут тамошние обитатели — для меня загадка. Пока что единственный пример, который меня в этом плане устроил — это док на unity3d. Каждый метод, каждое свойство идут здоровенным списком и, как минимум, дают знать о том что они существуют. А примеры уже внутри, не снаружи. Обратный пример — Qt: сначала читаете примеры, в которых есть не всё, а потом ищем класс в доке. Наоборот не получится: классификация их по разделам угробищная и не привязана к решаемой задаче, как в U3D. Или stackoverflow. Вашу доку сейчас посмотреть не могу, но вы можете сделать это сами и оценить к какому из примеров она ближе. Если к юнити — молодцы, не считая того, что в принципе сделали ересь.

Ардуинщики в большинстве своём не станут профессионалами в отличие от тех, кто в изучал своё хобби на примере 2313 и ассемблерных уроков с радиокота и им подобных. Зато первые хороши тем, что им можно что нибудь продать, это да.
Насчет языка не соглашусь. Узнавание функции на stackoverflow часто никак не связано, задокументирована эта функция или нет, а часто связана с тем, что всеми любимую документацию не удосужились прочитать от корки до корки. По JS есть MDN и я не видел еще не одной функции, которая бы работала, но не была задокументирована. Да, конечно есть плохо задокументированые места, но как показывает практика, они никому не сдались.
Что касается доки Unity3D… С одной стороны, это лучше Qt, с другой стороны найти в 100500 классах нужный, а еще лучше найти его в другом неймспейсе через гугл… В общем, легко превратить свою жизнь в адъ. ИМХО, дока той же Node.js горазда приятнее
Sign up to leave a comment.