книжи как по компиляторам, так и по железу не особо нужны - достаточно родной документации. В линуксе например набираешь в терминале "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/ а уж потом источникам с разными вариантам трактовки.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения