Комментарии 84
Проще говоря, ассемблер — это идентично машкодам, только в языке удобном человеку.
ассемблер — это идентично машкодамсначала так. потом хочется локальных меток и макровычислений. потом — полноценных макроподстановок/препроцессора… а там уже и до хотения ЯВУ недалеко.
ну, первые си-компилеры тоже делали «понятно что». более того, они часто делали не исполняемый модуль, и не объектник — а ассемблерный.
но оптимизирующие компиляторы — они позволяют работать быстрее.
а с учетом того, что «железо» нынче дешево — ассемблеры пора оставить профессионалам.
Часто «для переноса кода на другие платы» аппаратно-зависимые вещи выделяют в отдельные (условно — «низкоуровневые») блоки, которые правят под конкретное железо. А «логика» портируется без изменений.
Не нужно создавать проблемы на ровном месте и противопоставлять Ардуино и «взрослые» решения.
Вот он, умный дом.
сделал на arduine geomagnetic magnetometer
github.com/IvanKor/geomagnetic-magnetometer
который круче (полоса пропускания шире более чем в три раза ) чем используется здесь
geodata.izmiran.ru
В целом, вы просто процитировали статью.
Но в то же время в какое-то серийное изделие на мой взгляд ардуина не особо вписывается.
Ну на STM, PIC, AVR я действительно мог бы и сам сделать, потому что работаю с ними уже давно. Просто однажды мне стало интересно поиграться с ардуиной. Оказалось, что порог вхождения там очень низкий, что меня весьма порадовало. Для своего сегмента это просто отличное решение!
github.com/IvanKor/DS18B20_USART_DMA_STM32
без «ногодрыга» в режиме реалтайм за пару вечеров :D
Максимальная частота анализатора 24 MHz следовательно её необходимо уравнять с частотой контроллера — выставить 16MHz
Но зачем? Частота анализатора должна быть выше чем частота сигнала, что бы снять его точно, нет?
Да и если нам очень нужно генерировать ровный меандр, можно взять stm32 с dma или внешнюю микросхему таймера вроде NE555.Скажите, а вы слышали когда-нибудь о таймерах? Говорят, они даже в ардуине есть.
Данная статья полезна для понимания устройства работы mega328p и arduino в целом.Хм, не уверен.
Если только на этом таймере висит дма, а так нужен обработчик.Для генерации меандра таймеру не нужен ни DMA, ни обработчик.
Channel Counter
• Clear Timer on Compare Match (Auto Reload)
• Glitch-free, Phase Correct Pulse-Width Modulator (PWM)
• Frequency Generator
• 10-bit Clock Prescaler
• Overflow and Compare Match Interrupt Sources (TOV2, OCF2A, and OCF2B)
• Allows Clocking from External 32 kHz Watch Crystal Independent of the I/O Clock
В прошлом году ради интереса делал перенос на Arduino пяти 1-битных синтезаторов звука с ZX Spectrum, в которых довольно хитроумный, максимально оптимизированный код на Z80. Оригинальные алгоритмы ложились на новую платформу довольно занимательным образом, на чистом C, без вставок ассемблера. Наиболее интересный пример: randomflux.info/1bit/viewtopic.php?id=127
Очень полезная статья. По-моему, для новичков очень важно знать, что высокоуровневый код никогда не даст такой скорости и точности, как низкоуровневый и масштабы этого явления. От себя добавлю, что примерно то же самое происходит и с памятью кода. Когда я решил сделать один из своих проектов не на С, как обычно, а на ардуиновском диалекте, для меня было большой неожиданностью, что ATMega2560 закончилась буквально на 400 строке. Насколько я понимаю, особенно прожорлива местная объектная модель.
Что касается памяти, то её тоже «нужно уметь готовить» — на Меге в Ардуино нет никаких проблем с объёмными (как по оперативной, так и по флеш памяти) проектами. Чужие библиотеки действительно могут очень вольно обращаться с памятью, но это скорее проблема не объектной модели программирования, а уровня знаний и прилежания самого автора библиотеки.
С первой публикацией на хабре!
Все конечно хорошо, но саму платформу arduino(как и любых других МК) рассматриваю как утилитарную вещь для решения определенных прикладных задач, пускай уже и тысячу раз реализованных.
Поэтому за парктроник, пускай и на столе работающий — проголосовал, а за сферический blink в вакууме — увы — нет.
Вот если с помощью ардуино квадрокоптеры сбивать, да хоть пуляя микроконтроллерами из рогатки — это был-бы FUN ;-)
точность невелика — но довольно эффектно. но как раз перед демонстрацией сгорела катушка соленоида «электоспуска». было обидно.
Вот если с помощью ардуино квадрокоптеры сбивать
Думал над концепцией такого обвеса для автоматического оружия, которое позволит определять лазерным дальномером дистанцию до дрона, и имея прошитые данные по баллистике применяемого боеприпаса, а также данные с сенсоров температуры, давления и силы ветра (опционально) находить и показывать бойцу, в какое положение необходимо поставить оружие для максимальной вероятности поражения коптера. Такой себе баллистический компьютер для бедных.
Ну, так-то на коротком расстоянии можно и утиной дробью без проблем снять коптер.
А вот буржуи придумали патрон — из того-же гладкоствола до 1км обещают.
PORTA=value
завернуть в макрос, который под каждую платформу будет правильно реализован?З.ы. да я тот динозавр 25 Голиков пишушиший на АСМ(
В этом году и на arduino попробывал, понравилось, очень удобно без напряга извилин, правда все же свалил на на stm32duino, там уже привычный бардак и мрак :D
Переписать критичный ко времени участок кода на ассемблер (обычно внутренний цикл в тяжёлых вычислениях или небольшой обработчик прерывания) — недолго и ничем не сложнее написания реализации на C. Выигрыш измеряется не в процентах, а в решении задачи. Код не успевает — задача не решена (надо менять платформу и т.д.). Код успевает — задача решена. Решение задачи вполне стоит лишнего часа-двух работы.
Надо писать решение на ассемблере изначальноРечь о том что писать весь код — глупая затея. А если писать только, для улечшения производительности в отдельных местах — это и есть
улучшить ассемблерный выхлоп компилятора.Если выбирать для решения большой задачи асм, то мы лишаем себя всех луществующих сишных либ. Если задача помигать светодиодом то разницы нет, а если нужно много сенсоров + обработка информации + цветной дисплей к этому всему, не думаю что это пару часов.
Я также полагаю, что это очевидно для опытных embedded программистов — ничего общего между написанием (критичного ко времени исполнения фрагмента!) кода на ассемблере и оптимизацией ассемблерного выхода компилятора ЯВУ нет. Компилятор понятия не имеет, какая задача решается, он предлагает просто рабочее решение в рамках формальной логики, и потом оптимизатор его оптимизирует на микроуровне. Но это решение изначально неоптимально. Когда человек делает то же самое на ассемблере, он знает, какая задача решается, где и какие углы можно срезать, и какие параметры в решении ему важнее.
для начинающих дуйня — великолепный инструмент (хотя уже устаревший). если ее начинает не хватать — значит, ее пора выкидывать — это будет быстрее и проще, чем переписывать на ассемблере, и т.п.
путей выкидывания много — от применения вместо «классической на AVR» на STM с той же средой «дуино» (если человек не планирует заниматься разработкой более-менее профессионально или часто), до нормального проектирования нормальных устройств (если он планирует двигаться в сторону профессионализма)
Почему Arduino такая медленная и что с этим можно сделать