По роду деятельности я сейчас программист-ембеддер (по голому железу). До этого много лет был программистом сетевых сервисов. А перед этим пилил десктопный софт на Делфях. Но никогда, ни в одной из этих областей не видел такого количества идиотии, олигофрении, и кретинизма, как в высерах ардуинщиков.
Каждая первая поделка на гитхабе если и работает, то не благодаря стараниям ардуинщика, а вопреки им.
Чтобы не быть голословным. Классика! Ардуинщик обнуляет биты в регистре:
TCCRn |= (0<<CS02)|(0<<CS01)|(0<<CS00);
Второй показательный пример, ардуинщик пишет обертку над чужой либой:
int Serial::available(void)
{
return (unsigned int)(UART_RX_BUFFER_SIZE + UART_RxHead - UART_RxTail) % UART_RX_BUFFER_SIZE;
}
int Serial::read(void)
{
UART_Receive_Byte(); // возвращает uint8_t
}
Затянуть на восьмибитный кристалл FPU-рантайм безо всякой надобности? Да проще простого!
float Voltage=ADC/1024*1.1/DIVIDER;
...
if(Voltage < 10.5) {
...
}
// больше Voltage нигде не упоминается
Тут вообще непонятно, о чем в этот момент думал очередной дятел:
USICR = (2<<USIWM0);
Про такие мелочи, как запись в регистры битовых констант без сдвига, битовых констант от других регистров, магических хексов вместо битовых констант, и говорить нечего, это просто повально.
Короче, в очередной раз после попытки найти готовую реализацию несложной фигни, пришлось грустно делать все самому. Нашел на гитхабе четыре варианта, все ведут себя по-разному, в итоге ни один нормально не работает. Ошибки — тупейшие. Стиль кодинга такой, что проще выбросить, чем пытаться исправить. И уж тем более нельзя тянуть такое в нормальный проект.
И вся эта пакость расползается по интернету, торчит на каждой ардуинопомойке, копипастится из проекта в проект. Жуть.
Ардуинщиков — в биореактор.