Странные (или идиотские) вопросы на форуме по Ардуино
- Войдите на сайт для отправки комментариев
Все местные меня, так сказать, знают. Я далеко не профессионал и часто задаю вопросы, над которыми можно только посмеяться профессионалам.
Собственно говоря писал пост, подумал что тема довольна обширная - поэтому она звучит так.
А мой вопрос (а сегодня ж пятница ещё, как стимул))) вот такой :
Как так получается, что умные, грамотные люди тратят своё время на написание (в основной массе) на отлично работающие библиотеки под разное железо на платформе ардуино, но я за несколько часов поисков так и не смог найти подобного под «чистый си» (как бы там оно не называлось правильно)? Скорее я имею ввиду другие IDE, например MPLAB X IDE (или какие другие). Хотел «портировать» библиотеку, упёрся в отсутствие millis() как такового.
ЗЫ: Наверное тема больше поржать, но конструктивное если кто что может сказать идут в большой ПЛЮС!!
Есть везде и библиотеки и millis() если нет, то пишется в пять строчек.
Есть везде и библиотеки и millis() если нет, то пишется в пять строчек.
Если Вы, как постоянный участник форума, человек не голословный, хотелось бы увидеть функцию millis() в пять строк (как заявлено выше) для pic-контроллеров, например, PIC16F876A.
Есть везде и библиотеки и millis() если нет, то пишется в пять строчек.
Если Вы, как постоянный участник форума, человек не голословный, хотелось бы увидеть функцию millis() в пять строк (как заявлено выше) для pic-контроллеров, например, PIC16F876A.
Бум, если найду свой код таймера скину, но он на ассемблере был...
Жалко, я ассемблер «не вкурил». Но вкидывай, будет повод по «втыкать». Там реально 5 строчек?)
А чем таймер в пике отличается от таймера авр кроме названия функции вызова прерывания? Программируешь таймер на ту же частоту что и у ардуины, берёшь кусок из ядра от миллис, даже переписывать почти ничего не придётся. 5 строк это всего лишь абстракция того что код действительно получится коротким. Программируется таймер в мплабе и без ассемблера. Вот кусок из программы настройки первого таймера.
Название регистров и значения.
Жалко, я ассемблер «не вкурил». Но вкидывай, будет повод по «втыкать». Там реально 5 строчек?)
я занимался пиками 20 лет назад, надо искать код, то что таймер там есть - однозначно, так как использовал его в детекторе нуля
ЗЫ На пиках шикарный набор команд, а вот на AVR я не запал, видимо всему своё время
PS а зачем ПИК? (два шага назад)
Как так получается, что умные, грамотные люди тратят своё время на написание (в основной массе) на отлично работающие библиотеки под разное железо на платформе ардуино, но я за несколько часов поисков так и не смог найти подобного под «чистый си» (как бы там оно не называлось правильно)? Скорее я имею ввиду другие IDE, например MPLAB X IDE (или какие другие). Хотел «портировать» библиотеку, упёрся в отсутствие millis() как такового.
Ну, во-первых, millis: с millis, как было указано выше, все просто, поэтому пример совершенно не показательный.
Теперь по существу.
Мы имеем два факта:
1. Концепция Arduino существенно снизила уровень вхождения в программирование микроконтроллеров, т.е. поэтому чего-то массового кроме Arduino просто не существует.
2. В Arduino используется C++, и это принципиально. Именно это используется во всех "библиотеках"*. Другими словами, перенос того, что написано для Arduino, на C практически не возможен.
* слово "библиотеки" заключено в кавычки, т.к. то, что в Arduino называется библиотеками, больше нигде за библиотеки не считается.
хотелось бы увидеть функцию millis() в пять строк (как заявлено выше) для pic-контроллеров, например, PIC16F876A.
На какую тактовую частоту?
PS а зачем ПИК? (два шага назад)
Потому что лежат без дела (когда-то подогнали), ничего из «готовых решений» мне не надо, а как «затычки» в своих - почему бы и нет?!
Ну, во-первых, millis: с millis, как было указано выше, все просто, поэтому пример совершенно не показательный.
Я это криво, может быть, но решил минут за 15 с чаем.
Теперь по существу.
Мы имеем два факта:
1. Концепция Arduino существенно снизила уровень вхождения в программирование микроконтроллеров, т.е. поэтому чего-то массового кроме Arduino просто не существует.
2. В Arduino используется C++, и это принципиально. Именно это используется во всех "библиотеках"*. Другими словами, перенос того, что написано для Arduino, на C практически не возможен.
* слово "библиотеки" заключено в кавычки, т.к. то, что в Arduino называется библиотеками, больше нигде за библиотеки не считается.
Ответ меня удовлетворил на 55%, потому что я не совсем уверен, что каждый программист на платформе отличной от ардуино пишет свои библиотеки для дисплеев, датчиков и тп (хотя этот факт и не исключаю).
хотелось бы увидеть функцию millis() в пять строк (как заявлено выше) для pic-контроллеров, например, PIC16F876A.
На какую тактовую частоту?
А это должно иметь смысл? На какую тактовую частоту ты опираешься используя millis() в ардуино проектах?
ЗЫ: Я прекрасно понимаю, что за неимением другого - «пятницей» стал я, и я не против. Но чуть-чуть понимания. Пожалуйста.]
А это должно иметь смысл? На какую тактовую частоту ты опираешься используя millis() в ардуино проектах?
Не правильно поставлен вопрос. Миллис в ардуино опирается на 4 микросекунды. На это значение и надо настраивать таймер ПИКа в зависимости от тактовой частоты для воспроизведения функции миллис из ардуино.
Ответ меня удовлетворил на 55%, потому что я не совсем уверен, что каждый программист на платформе отличной от ардуино пишет свои библиотеки для дисплеев, датчиков и тп (хотя этот факт и не исключаю).
Миллис в ардуино опирается на 4 микросекунды.
А это должно иметь смысл? На какую тактовую частоту ты опираешься используя millis() в ардуино проектах?
Ты задаёшь тактовую частоту, когда выбираешь плату, для которой пишешь программу. Идёт подсчет тактов, от которого и вычисляется millis(). Камень не знает времени.
В сети для пиков есть подпрограммы для управления дисплеями и датчиками, библиотеками их не называют. Вот для дисплея например первая попавшаяся https://microcontrollerslab.com/lcd-interfacing-pic16f877a-microcontroller/
Вообще-то на 1024 микросекунды. И то не "в ардуино", а "в AVR".
Конечно же ты как всегда прав - в ардуино на АВР чипах. А вот 1024 микросекунды на что опираются? Как отсчитываются?
Вообще-то на 1024 микросекунды. И то не "в ардуино", а "в AVR".
Конечно же ты как всегда прав - в АВР. А вот 1024 микросекунды на что опираются? Как отсчитываются?
Это да. А в STM просто вызывается HALовский SysTick().
Ладоть, теперь по даташиту PIC16F62x тебе более всего подходит таймер TMR1
Это да. А в STM просто вызывается HALовский SysTick().
Короче, играясь с T1CON (адрес 10h) Вы получаете потребное Вам.
Дак давайте уж x86 с NTP, чего тянуть ))
А что под х86 есть ардуиновское ядро? Не знал. Где скачать?
А что под х86 есть ардуиновское ядро? Не знал. Где скачать?
Какое небо голубое....
Симуляторы там всякие, как минимум ))
Это да. А в STM просто вызывается HALовский SysTick().
эээм если я ничего не перепутал(от обилия информации в мозгу информация имеет склонность к мешанине) SysTick он ARMовский , то есть любой производитель железа MK по стандарту должен реализовать этот таймер что бы гарантированно был таймер для нужд RTOSей , а STMовский "Tick" можно реализовать как на SysTick'е так и на любом другом таймере.
Это да. А в STM просто вызывается HALовский SysTick().
эээм если я ничего не перепутал(от обилия информации в мозгу информация имеет склонность к мешанине) SysTick он ARMовский , то есть любой производитель железа MK по стандарту должен реализовать этот таймер что бы гарантированно был таймер для нужд RTOSей , а STMовский "Tick" можно реализовать как на SysTick'е так и на любом другом таймере.
Прелесть ARMовского в том что он может быть аппаратным, в смысле совсем аппаратным, без дополнительных функций кроме счета, как на пользовательских таймерах. А так да, на любом таймере.
А надо бы было, когда впервые столкнулся с "библиотеками" для ардуино был неприятно удивлён...
Отлично помню тот момент, когда сказал себе что с ассемблером всё, это когда скомпилированный код до байта совпал
с кодом, что писал на ассемблере...буквально команда в команду...регистр в регистр... )))
Тютелька в тютельку. Ужос.
Я давно подозревал, кто пишет библиотеки - не настоящий библиотекарь :)
Я давно подозревал, кто пишет библиотеки - не настоящий библиотекарь :)
Скорее скомпрометировано слово библиотека. По ощущениям это набор книжек. А ардуиновцы книжку из библиотеки обозвали словом библиотека. Вот и приходится путаться.
И это ужас ужасный. Как-то хотел написать пост о том, как в IDE использовать настоящие библиотеки и не стал - будет непонятно и постоянно будет вызывать путаницу.
Возможно я ошибаюсь, но библиотеками в Ардуино IDE называют и объекты и подпрограммы, да и просто функции. Главное, что они не прописаны в теле основной программы.
Как-то так.
Тютелька в тютельку. Ужос.
нет, это разработчики компиляторов достигли совершенства )))
Конечно, от людей зависит. От культуры в т.ч., что бы вы не говорили. Разбирал nRF24 в своё время. Это какой то кошмар! Что бы не сказать, ППЦ! При том что глюк на глюке!(
И это ужас ужасный. Как-то хотел написать пост о том, как в IDE использовать настоящие библиотеки и не стал - будет непонятно и постоянно будет вызывать путаницу.
Ну почему же! Всегда интересно услышать мнение грамотных людей.)
Тютелька в тютельку. Ужос.
нет, это разработчики компиляторов достигли совершенства )))
Не достигли совершенства, а скатились до уровня прокладок между табуретом и клавиатурой.
#define или const ?
Евгений Петрович выражал мнение, что использование const упрощает работу компилятору/оптимизатору. Я использую и то и другое, и как бы разницы вообще не заметил (несколько раз «менял местами», hex-файл получается один и тот же).
А как же все таки лучше в 2022-2023 ?
const не только компилятору полезен, но и человеку. Чтоб ему мозг больной не свело при отлове багов.
#define или const ?
Евгений Петрович выражал мнение, что использование const упрощает работу компилятору/оптимизатору. Я использую и то и другое, и как бы разницы вообще не заметил (несколько раз «менял местами», hex-файл получается один и тот же).
А как же все таки лучше в 2022-2023 ?
Ну, поймите Вы. Когда Вы описываете константу (const или constexpr) Вы в явном виде сообщаете и компилятору и читателю программы её тип. От точного знания типа переменных всем легче. А когда Вы пишете define, Вы оставляете подбор типа на усмотрение компилятора. Вы и решайте как себя вести: "я глава и мужчина я" или "пусть за меня мамка всё решает".
То, что Вы не встречали разницы - Вам просто повезло. Могу привести примеры, где из-за неочевидных преобразований типов такая разница появляется и очень даже влияет на результат. Если бы типы были записаны явно, такого бы не было.
Я уже не говорю про идиотские ошибки, связанные с define, какая, например, была у Великого, когда он написал в define арифметическое выражение без скобок и оно начинало "сливаться" с другими из-за порядка действий.
скобок много не бывает )))
Братцы давно не заходил на форум, а сейчас не могу создавать новые темы.
Сколько прейдеся ждать?
Новые темы можно создать только на новом форуме !