книжи как по компиляторам, так и по железу не особо нужны - достаточно родной документации. В линуксе например набираешь в терминале "man gcc" и получаешь информацию и не надо даже интернета. Насчет библиотек - прошли те времена, когда не было интернета и когда только появились авр пик и были только примеры от производителя на CD и то ассеблер. Сейчас есть GitHub - крупнейший веб-сервис для хостинга IT-проектов и их совместной разработки. Полно готовых хороших документированых библиотек и производители микроконтроллеров иногда не остают и выкладывают качесвенные сниппеты. Типа FatFs от Чена сейчас врядли кто-то с нуля писать будет. Иногда подсматривал и ардуиновые библиотеки и переделывал на чистый Си. Сейчас, благодаря дискусии - вижу можно задействовать компилятор С++ и напрямую использовать исходники без переделок. Сделал мэйкфайл (на основе скопированного с гитхаба), который автоматом перемалывает все исходники ассемблера Си С++ в папке проекта и с этого всего получается единый elf а из эльфа уже хекс. Да еще этот мэйкфайл может прошивать, форматировать исходник, отправлять прошивку по почте... з.ы. велосипеды изобретать скучно
Воть и хорошо, что имеется альтернативный вариант представления информации - однако по возникающим к оному вопросам придется таки Вам ответы добавлять - я ни линуксом ни мэйкфайлами не пользуюсь - посему ничего ни прокомментировать ни проверить/ответить не смогу (в отличии от того, что сам выкладываю). В принципе вполне нормальный вариант предоставления материала получиться может... Насчет оффлайнового хэлпа... Не всегда полный вариант изготовитель выкладывает - у той же ардуиноIDE часть описания библиотек встроена в оффлайн, а часть уже на сайт посылает. И такое довольно часто встречается ибо чем позднее редакция, тем больший упор на то, что пользователь непрерывно в инете сидит... А это не есть хорошо... Может сегодня и привычно для молодежи - но я предпочитаю "хкардкор" в виде распечатанной книжи/листочков где можно карандашиком и иными "палками-писалками" отметки сделать. Чего подправить, чего добавить по мере необходимости (у каждого по своему)... Да и сидеть за компом не одно и то же, что развалившись (во кресле или на диване или еще где) размышлять (возможно с пивасиком или чем повкуснее)... И ГЛАЗКИ меньше напрягаются...
вот ответ - этот мэйкфайл, он будет работать и в виндовс причем любом, даже древнем, в принципе и даже в дос, если есть компилятор https://gist.github.com/rynr/72734da4b8c7b962aa65 он простой - легко переделывается под другие микроконтроллеры, я теперь, например, могу ардуиновые библиотеки и для пилюльки и пр. стмовых без переделок использовать в обычном проекте з.ы. бывают очень удобные компьютерные кресла и хорошие мониторы , а заметки удобнее (имхо) в файлик и на гитхаб - для будущих поколений - это вам не залитые пивасом и закапаные рыбьим жиром бумажки
тут не дождался, но часики на ардуино таки появились https://www.radiokot.ru/forum/viewtopic ... 3#p3922993 автор не стесняется подключать и не рефересные библиотеки,причем с того тревожного сайта, куда виндовс ХР не ходит:
Просто мне очередные часеи "в стол" плодить ЛЕНЬ. Если уж протестить на сравнение адуринку... более удачным было бы сравнение конструкции подобной тому, что в начале https://radiokot.ru/forum/viewtopic.php?f=62&t=94201 взято для тестов было (ассемблер и AT89S52/AtMega8515)... https://radiokot.ru/forum/viewtopic.php ... 8#p1830978 и там далее.... Программа позволяла добавлять любые желаемые модули - главное, чтоб правила обращения соблюдались, да подключить платку с аппаратным расширением свободных выводов хватило. Но там двустрочник на основе WH 1602 с подобием "окошек" - кноподжойстиком перемещаем курсор по экранным пиктограммам и соответственно "выполнить/пропустить"... и "интерактив" со строчкой подсказки/указанием режима работы... Это ж не семисегментник дополнительной задачей. Да и насчет библиотек... EEPROM.h Wire.h это штатные ардуиньи, для далласа достаточно базовой OneWire (к сожалению без нее не обойтись - протокол весьма жесткий по времени) Обработка кноп, часеев и данных с термодатчика - это уж кому как удобнее...[ У меня от того проекта уже мало чего осталось - воть к примеру набросок схемки:
Да и насчет библиотек... Wire.h это штатные ардуиньи
не всегда, там на тревожном сайте полно форков стандартных библиотек. Да, например тот же Wire.h, есть форк тут: https://github.com/SodaqMoja/Wire
Цитата:
Эта библиотека начиналась как копия стандартной библиотеки Wire, поставляемой с Arduino 1.5.8. Причина создания этой копии была в основном по следующим причинам: нам потребовались некоторые модификации исходный код Arduino не поддерживается отдельно (как обычная библиотека) мы хотим иметь возможность работать с контролем версий (GIT) характеристики оригинального дизайна неясны и нигде не встречаются В Arduino TwoWire есть несколько сомнительных функций.
почему класс TwoWire является производным от Stream? почему исходный код разделен на Wire.cpp и twi.h И теперь, когда мы решили создать нашу собственную «вилку», мы также можем переформатировать код по своему усмотрению.
Насчет I2C как уже говорилось - можно и софтовый использовать. Интерес насчет возможности сделать динамическую индикацию с совмещенной клавиатурой исчерпан проведенными тестами. Куда этот вариант с пользой приткнуть - другое дело. Там где прикладной вариант мог пользу привнести - уже интерес потребителя исчез давно. А в вопросах софтостроения у меня упор на проработку самостоятельного написания прожек на основе предоставляемого изготовителем IDE базового минимума.
было интересно как библиотеки (разные) совместно работают, с этим, видел, бывают у ардуинщиков бывают проблемы. Индикация и клавиатура и даже часы - это в ардуине оказывается очень примитивно (из посл. исходника):
Код:
dt = clock.getDateTime(); // опрос часов disp.displayClock(dt.hour, dt.minute); // показ времени if (butt1.isClick()) ... if (butt2.isHolded()) ...
там еще и вывод °C и фоторезистор для яркости часов и контроль за питанием. И никаких таймеров по совпадению и весь код в loop, как и завещал король Ардуин (король Италии)
Вот потому и надо учиться САМОМУ те библиотеки составлять. Ведь по сути библиотека в ардуино это вариант многофайловика. А каково качество того "внешнего класса" в другом проекте автор обычно оценить не всегда может. Вот и тренируюсь помаленьку. Насчет совместной работы нескольких библиотек - этот вопрос ранее уже попадался. Только в данном случае это уже доступ из одного метода внешнего класса к другому методу внешнего класса. Действительно задача порой весьма пакостная.
если библиотеки работают, зачем их "составлять". А чтоб самому "составлять" надо C++ изучать. А если изучить С++, то и среда ардуино не нужна - можно в любом иде или блокноте, свои, чисто С++ библиотеки и проекты написать и также использовать опыт человечества. Вот например библиотечки готовые человек уже написал для AVR ардуиной не поддерживаемых и готовый мэйкфайл c++17 есть: https://github.com/srfilipek/savr
Цитата:
SAVR разработан как cross-micro C++ library для 8-битного семейства Atmel AVR. Он в основном разработан на Arduino, но модифицирован для кроссплатформенности (кросс-микро) для других AVR, которые у меня есть. Это постоянно растущая коллекция кода. Достигнув значительного размера и обнаружив, что он (по крайней мере, в некоторой степени) полезен для других, которых я знал, я решил, что лучше всего разместить код публично для всех.
з.ы. на тревожном сайте и обучалки есть: *Пишем свою библиотеку для Arduino *Объекты и классы в Arduino и т.д.
oleg110592 Драть только готовое - сапсем думать разучиться можно. Другое дело - разумный минимум. С++ по "стандартным" книгам рассчитан на ПК, а не на МК - это достаточно РАЗНАЯ идеология в отношении аппаратных ресурсов. Посему достаточно часто "трудности перевода"(в смысле того, что на ПК отрабатывается ОС, а на МК - иными приемами). А в отношении конкретной прикладной самоделки таки удобнее самому думать чего и куда впихнуть. главный колбасист Гораздо более полезным было бы выкладывание АЛГОРИТМОВ соответствующего математического минимума. А уж как их реализовать в конкретном проекте и под конкретным компилятором (ессно и набором команд/ресурсов) это задача автора проекта.
Драть только готовое - сапсем думать разучиться можно.
дык в ардуино на это ж главный принцип "не думать" - там готовый бутлоадер, сразу готовая настройка таймера0 для тех же милисов, готовые команды для работы с портами и периферией и т.д.
С++ по "стандартным" книгам рассчитан на ПК, а не на МК - это достаточно РАЗНАЯ идеология в отношении аппаратных ресурсов.
в ардуино вообще то на С++ пишут (из вики):
Цитата:
Язык программирования Arduino называется Arduino C и представляет собой язык C++ с фреймворком Wiring, Он имеет некоторые отличия по части написания кода, который компилируется и собирается с помощью avr-gcc, с особенностями, облегчающими написание работающей программы — имеется набор библиотек, включающий в себя функции и объекты. При компиляции программы IDE создает временный файл с расширением *.cpp.
Некоторое упрощение процесса прошивки в принципе не помеха. Относительно добавленных функций и уменьшения содержимого базового заголовка также упрощает работу. Значительно больше внимания самой программе, чем освоению "нюансов компилятора". Относительно С++ - наконец-то хоть ктой-то мое древнее исходное замечание подтвердил. Я речь не о том, что у адуринки С++ применяется, а о том, что все учебные материалы по С++ сделаны в отношении ПК. Ессно часть вопросов применения имеет отличия. А вот на те вопросы (по мере их возникновения) мне обычно ответы практически ни от кого и не поступали (за редким исключением)... Приходится самому все опытным путем разбирать.
все учебные материалы по С++ сделаны в отношении ПК.
C++ он и в Африке С++. Если глянуть книгу отца-основателя языка, Страуструпа - там речь про сам язык
Цитата:
Книга Б. Страуструпа "Язык программирования С++" дает описание языка, его ключевых понятий и основных приемов программирования на нем. Это завершенное руководство, написанное создателем языка, которое содержит описание всех средств С++, в том числе управление исключительными ситуациями, шаблоны типа (параметризованные типы данных) и множественное наследование.
Применять С++ для микроконтроллеров начали относительно недавно (ардуинщики наверное одни из первых) - там особых отличий от ПК вроде как и нет. Смотрим тот же digitalWrite:
Цитата:
void digitalWrite(uint8_t pin, uint8_t val) { uint8_t bit = digitalPinToBitMask(pin); uint8_t port = digitalPinToPort(pin); volatile uint8_t *out; out = portOutputRegister(port); cli(); if (val == LOW) { *out &= ~bit; } else { *out |= bit; } }
все в рамках обычного С++ и даже обычный Си справится
Может и "в Африке"... Только ВСЕ примеры в литературе описаны относительно систем ввода/вывода полноценного ПК. А в случае с МК имеем весьма жесткие отличия обусловленные самой структурой МК. Первое - все содержимое программы в ПК загружается и отрабатывается в ОЗУ. Для МК и ОЗУ и ПЗУ имеют значение. Второе - подсистема ввода-вывода МК отнюдь не универсальна - индикаторы разных систем отображения и разных интерфейсов по управлению, прямое управление выводами и аппаратными средствами, включая прерывания. Для полноформатных ПК в подавляющем большинстве случаев это решается средствами ОС. Да и конфигурация в ПК практически ОДНООБРАЗНА отличия парируются за счет средств БИОС и дополнительных драйверов о коих пишущий прожку под ЯВУ может совершенно не беспокоится - оные УЖЕ работают "по умолчанию". Вот та разница и представляет дополнительные трудности. Второе (проистекает частично из первого) - жесткое разграничение прав доступа в рамках классов. Не совсем удачное планирование распределения задач/доступа к ресурсам/данным и при росте проекта под МК возникают "затыки" приводящие к необходимости переписывать ВСЕ заново. Собственно - это обычные вопросы изучения/освоения. Воть даже в ассемблере и то попалась нештатная ситуация по порядку размещения и применения данных - у С++ таких точек гораздо больше.
примеры в литературе описаны относительно систем ввода/вывода полноценного ПК.
В С++, как и в С, нет встроенных в язык средств ввода-вывода. В С для этих целей используется библиотека stdio.h. В С++ разработана новая библиотека ввода-вывода iostream, использующая концепцию объектно-ориентированного программирования Никто не мешает iostream на АВР, тем более что уже сделано: Форматный вывод для МК на Си++ http://we.easyelectronics.ru/Soft/forma ... na-si.html еще часики на ардуино https://habr.com/ru/post/527818/
Эти часики с электромагнитной индикацией я уже видел. Неплохо для украшения какой выставки... Со stdio.h в принципе особо ничего нового - функционал типовой обработки ввода-вывода для того, чтоб не морочиться с самодельной упаковкой. Однако это минимальный примитив - для того же матричного индикатора уже придется промежуточный драйверок сделать - с учетом соответствующей документации. Причем в каждом конкретном случае средства индикации и ввода данных так же потребуют "прокладки" составленной с учетом их документации и требований проекта (не говоря уже о прочихСБИС, применяемых в проекте). Ессно оные будут использовать часть stdio.h, но также не обойдутся и без конкретно дописанной части согласно технических особенностей конкретных устройств. А в случае работы с ПК - подобное уже "интегрировано по умолчанию" и соответственно примеры часто довольно сложно воспринимать, ежли ранее не изучался Си в приложении к ПК. Относительно iostream - собственно пока не могу себе представление о "потоке" построить... Как абстракция обобщенного ввода-вывода понятно... Но это не то, чтобы "ключ" к восприятию получить. Т.е. что оный в примитиве представляет... как тот "поток" пощупать... Вроде как работа через кольцевой буфер... Вобщем пока восприятия нету... (ибо всюду "...это вы уже знаете...")... Придется ждать когда "ключик" попадется. И уж ёжли копаться - то предпочтение в первую очередь http://www.cplusplus.com/reference/ а уж потом источникам с разными вариантам трактовки.
Сейчас этот форум просматривают: Google [Bot] и гости: 56
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения