Странные (или идиотские) вопросы на форуме по Ардуино

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Все местные меня, так сказать, знают. Я далеко не профессионал и часто задаю вопросы, над которыми можно только посмеяться профессионалам.

Собственно говоря писал пост, подумал что тема довольна обширная - поэтому она звучит так.

А мой вопрос (а сегодня ж пятница ещё, как стимул))) вот такой :

Как так получается, что умные, грамотные люди тратят своё время на написание (в основной массе) на отлично работающие библиотеки под разное железо на платформе ардуино, но я за несколько часов поисков так и не смог найти подобного под «чистый си» (как бы там оно не называлось правильно)? Скорее я имею ввиду другие IDE, например MPLAB X IDE (или какие другие). Хотел «портировать» библиотеку, упёрся в отсутствие millis() как такового. 

ЗЫ: Наверное тема больше поржать, но конструктивное если кто что может сказать идут в большой ПЛЮС!!

rkit
Offline
Зарегистрирован: 23.11.2016

Есть везде и библиотеки и millis() если нет, то пишется в пять строчек.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

rkit пишет:

Есть везде и библиотеки и millis() если нет, то пишется в пять строчек.

Если Вы, как постоянный участник форума, человек не голословный, хотелось бы увидеть функцию millis() в пять строк (как заявлено выше) для pic-контроллеров, например, PIC16F876A. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

BOOM пишет:

rkit пишет:

Есть везде и библиотеки и millis() если нет, то пишется в пять строчек.

Если Вы, как постоянный участник форума, человек не голословный, хотелось бы увидеть функцию millis() в пять строк (как заявлено выше) для pic-контроллеров, например, PIC16F876A. 


Бум, если найду свой код таймера скину, но он на ассемблере был...

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Жалко, я ассемблер «не вкурил». Но вкидывай, будет повод по «втыкать». Там реально 5 строчек?)

nik182
Offline
Зарегистрирован: 04.05.2015

А чем таймер в пике отличается от таймера авр кроме названия функции вызова прерывания? Программируешь таймер на ту же частоту что и у ардуины, берёшь кусок из ядра от миллис, даже переписывать почти ничего не придётся. 5 строк это всего лишь абстракция того что код действительно получится коротким. Программируется таймер в мплабе и без ассемблера. Вот кусок из программы настройки первого таймера.

 T1CON = 0b10000;
 TMR1H = 0;
 TMR1L = 0;

   Название регистров и значения. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

BOOM пишет:

Жалко, я ассемблер «не вкурил». Но вкидывай, будет повод по «втыкать». Там реально 5 строчек?)

я занимался пиками 20 лет назад, надо искать код, то что таймер там есть - однозначно, так как использовал его в детекторе нуля
ЗЫ На пиках шикарный набор команд, а вот на AVR я не запал, видимо всему своё время

PS а зачем ПИК? (два шага назад)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

BOOM пишет:

Как так получается, что умные, грамотные люди тратят своё время на написание (в основной массе) на отлично работающие библиотеки под разное железо на платформе ардуино, но я за несколько часов поисков так и не смог найти подобного под «чистый си» (как бы там оно не называлось правильно)? Скорее я имею ввиду другие IDE, например MPLAB X IDE (или какие другие). Хотел «портировать» библиотеку, упёрся в отсутствие millis() как такового. 

Как все запущено...

Ну, во-первых, millis: с millis, как было указано выше, все просто, поэтому пример совершенно не показательный.

Теперь по существу.

Мы имеем два факта:

1. Концепция Arduino существенно снизила уровень вхождения в программирование микроконтроллеров, т.е. поэтому чего-то массового кроме Arduino просто не существует.

2. В Arduino используется C++, и это принципиально. Именно это используется во всех "библиотеках"*. Другими словами, перенос того, что написано для Arduino, на C практически не возможен.

* слово "библиотеки" заключено в кавычки, т.к. то, что в Arduino называется библиотеками, больше нигде за библиотеки не считается.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

BOOM пишет:

 хотелось бы увидеть функцию millis() в пять строк (как заявлено выше) для pic-контроллеров, например, PIC16F876A. 

На какую тактовую частоту?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

ua6em пишет:

PS а зачем ПИК? (два шага назад)

Потому что лежат без дела (когда-то подогнали), ничего из «готовых решений» мне не надо, а как «затычки» в своих - почему бы и нет?! 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

andriano пишет:

Ну, во-первых, millis: с millis, как было указано выше, все просто, поэтому пример совершенно не показательный.

Я это криво, может быть, но решил минут за 15 с чаем.

andriano пишет:

Теперь по существу.

Мы имеем два факта:

1. Концепция Arduino существенно снизила уровень вхождения в программирование микроконтроллеров, т.е. поэтому чего-то массового кроме Arduino просто не существует.

2. В Arduino используется C++, и это принципиально. Именно это используется во всех "библиотеках"*. Другими словами, перенос того, что написано для Arduino, на C практически не возможен.

* слово "библиотеки" заключено в кавычки, т.к. то, что в Arduino называется библиотеками, больше нигде за библиотеки не считается.

Ответ меня удовлетворил на 55%, потому что я не совсем уверен, что каждый программист на платформе отличной от ардуино пишет свои библиотеки для дисплеев, датчиков и тп (хотя этот факт и не исключаю).

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

mykaida пишет:

BOOM пишет:

 хотелось бы увидеть функцию millis() в пять строк (как заявлено выше) для pic-контроллеров, например, PIC16F876A. 

На какую тактовую частоту?

А это должно иметь смысл? На какую тактовую частоту ты опираешься используя millis() в ардуино проектах?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

ЗЫ: Я прекрасно понимаю, что за неимением другого - «пятницей» стал я, и я не против. Но чуть-чуть понимания. Пожалуйста.]

nik182
Offline
Зарегистрирован: 04.05.2015

BOOM пишет:

А это должно иметь смысл? На какую тактовую частоту ты опираешься используя millis() в ардуино проектах?

Не правильно поставлен вопрос. Миллис в ардуино опирается на 4 микросекунды. На это значение и надо настраивать таймер ПИКа в зависимости от тактовой частоты для воспроизведения функции миллис из ардуино.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

BOOM пишет:

Ответ меня удовлетворил на 55%, потому что я не совсем уверен, что каждый программист на платформе отличной от ардуино пишет свои библиотеки для дисплеев, датчиков и тп (хотя этот факт и не исключаю).

Формально Вы на 100% правы, т.к. то, что пишет "каждый программист" на "платформе отличной от ардуино" библиотеками никто не называет. Ну а написать модуль для работы с конкретным дисплеем или датчиком, используя дэйташит, совсем не сложно.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

nik182 пишет:

Миллис в ардуино опирается на 4 микросекунды.

Вообще-то на 1024 микросекунды. И то не "в ардуино", а "в AVR".

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

BOOM пишет:

А это должно иметь смысл? На какую тактовую частоту ты опираешься используя millis() в ардуино проектах?

Ты задаёшь тактовую частоту, когда выбираешь плату, для которой пишешь программу. Идёт подсчет тактов, от которого и вычисляется millis(). Камень не знает времени.

nik182
Offline
Зарегистрирован: 04.05.2015

В сети для пиков есть подпрограммы для управления дисплеями и датчиками, библиотеками их не называют. Вот для дисплея например первая попавшаяся https://microcontrollerslab.com/lcd-interfacing-pic16f877a-microcontroller/

nik182
Offline
Зарегистрирован: 04.05.2015

andriano пишет:

Вообще-то на 1024 микросекунды. И то не "в ардуино", а "в AVR".

Конечно же ты как всегда прав - в ардуино на АВР чипах. А вот 1024 микросекунды на что опираются? Как отсчитываются?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

nik182 пишет:

andriano пишет:

Вообще-то на 1024 микросекунды. И то не "в ардуино", а "в AVR".

Конечно же ты как всегда прав - в АВР. А вот 1024 микросекунды на что опираются? Как отсчитываются?

Ну ты же знаешь ответ: сначала тактовую 16 МГц предделитель делит  на 64, а потом таймер - еще на 256. По прерыванию таймера с частотой 977 Гц вызывается прерывание, которое один раз из 42 делает приращение переменной на 2, а в остальных случаях - на 1.

nik182
Offline
Зарегистрирован: 04.05.2015

Это да. А в STM просто вызывается HALовский SysTick().

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Ладоть, теперь по даташиту PIC16F62x тебе более всего подходит таймер TMR1

The Timer1 module is a 16-bit timer/counter consisting
of two 8-bit registers (TMR1H and TMR1L) which are
readable and writable. The TMR1 register pair
(TMR1H:TMR1L) increments from 0000h to FFFFh
and rolls over to 0000h. The Timer1 Interrupt, if
enabled, is generated on overflow of the TMR1 register
pair which latches the interrupt flag bit TMR1IF
(PIR1<0>). This interrupt can be enabled/disabled by
setting/clearing the Timer1 interrupt enable bit TMR1IE
(PIE1<0>).
Timer1 can operate in one of two modes:
• As a timer
• As a counter
The Operating mode is determined by the clock select
bit, TMR1CS (T1CON<1>).
In Timer mode, the TMR1 register pair value
increments every instruction cycle. In Counter mode, it
increments on every rising edge of the external clock
input.
Timer1 can be enabled/disabled by setting/clearing
control bit TMR1ON (T1CON<0>).
Timer1 also has an internal “Reset input”. This Reset
can be generated by the CCP module (Section 9.0
“Capture/Compare/PWM (CCP) Module”).
Register 7-1 shows the Timer1 control register.
For the PIC16F627A/628A/648A, when the Timer1
oscillator is enabled (T1OSCEN is set), the RB7/
T1OSI/PGD and RB6/T1OSO/T1CKI/PGC pins
become inputs. That is, the TRISB<7:6> value is
ignored.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

nik182 пишет:

Это да. А в STM просто вызывается HALовский SysTick().

Ну так в AVR нет отдельного таймера специально под систему времени.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Короче, играясь с T1CON (адрес 10h)  Вы получаете потребное Вам.

sadman41
Offline
Зарегистрирован: 19.10.2016

Дак давайте уж x86 с NTP, чего тянуть ))

nik182
Offline
Зарегистрирован: 04.05.2015

sadman41 пишет:
Дак давайте уж x86 с NTP, чего тянуть ))

А что под х86 есть ардуиновское ядро? Не знал. Где скачать?

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

nik182 пишет:

А что под х86 есть ардуиновское ядро? Не знал. Где скачать?

Какое небо голубое....

sadman41
Offline
Зарегистрирован: 19.10.2016

Симуляторы там всякие, как минимум ))

mixail844
Offline
Зарегистрирован: 30.04.2012

nik182 пишет:

Это да. А в STM просто вызывается HALовский SysTick().

эээм если я ничего не перепутал(от обилия информации в мозгу информация имеет склонность к мешанине) SysTick он ARMовский , то есть любой производитель железа MK по стандарту должен реализовать этот таймер что бы гарантированно был таймер для нужд RTOSей , а STMовский "Tick" можно реализовать как на SysTick'е так и на любом другом таймере.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

andriano пишет:
то, что в Arduino называется библиотеками, больше нигде за библиотеки не считается.
И это ужас ужасный. Как-то хотел написать пост о том, как в IDE использовать настоящие библиотеки и не стал - будет непонятно и постоянно будет вызывать путаницу.

nik182
Offline
Зарегистрирован: 04.05.2015

mixail844 пишет:

nik182 пишет:

Это да. А в STM просто вызывается HALовский SysTick().

эээм если я ничего не перепутал(от обилия информации в мозгу информация имеет склонность к мешанине) SysTick он ARMовский , то есть любой производитель железа MK по стандарту должен реализовать этот таймер что бы гарантированно был таймер для нужд RTOSей , а STMовский "Tick" можно реализовать как на SysTick'е так и на любом другом таймере.

Прелесть ARMовского в том что он может быть аппаратным, в смысле совсем аппаратным, без дополнительных функций кроме счета, как на пользовательских таймерах. А так да, на любом таймере.  

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

andriano пишет:
то, что в Arduino называется библиотеками, больше нигде за библиотеки не считается.
И это ужас ужасный. Как-то хотел написать пост о том, как в IDE использовать настоящие библиотеки и не стал - будет непонятно и постоянно будет вызывать путаницу.


А надо бы было, когда впервые столкнулся с "библиотеками" для ардуино был неприятно удивлён...
Отлично помню тот момент, когда сказал себе что с ассемблером всё, это когда скомпилированный код до байта совпал
с кодом, что писал на ассемблере...буквально команда в команду...регистр в регистр... )))

Green
Offline
Зарегистрирован: 01.10.2015

Тютелька в тютельку. Ужос.

lilik
Offline
Зарегистрирован: 19.10.2017

ЕвгенийП пишет:

andriano пишет:
то, что в Arduino называется библиотеками, больше нигде за библиотеки не считается.
И это ужас ужасный. Как-то хотел написать пост о том, как в IDE использовать настоящие библиотеки и не стал - будет непонятно и постоянно будет вызывать путаницу.

Я давно подозревал, кто пишет библиотеки - не настоящий библиотекарь :)

nik182
Offline
Зарегистрирован: 04.05.2015

lilik пишет:

ЕвгенийП пишет:

andriano пишет:
то, что в Arduino называется библиотеками, больше нигде за библиотеки не считается.
И это ужас ужасный. Как-то хотел написать пост о том, как в IDE использовать настоящие библиотеки и не стал - будет непонятно и постоянно будет вызывать путаницу.

Я давно подозревал, кто пишет библиотеки - не настоящий библиотекарь :)

Скорее скомпрометировано слово библиотека. По ощущениям это набор книжек. А ардуиновцы книжку из библиотеки обозвали словом библиотека. Вот и приходится путаться.  

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

ЕвгенийП пишет:

И это ужас ужасный. Как-то хотел написать пост о том, как в IDE использовать настоящие библиотеки и не стал - будет непонятно и постоянно будет вызывать путаницу.

Возможно я ошибаюсь, но библиотеками в Ардуино IDE называют и объекты и подпрограммы, да и просто функции. Главное, что они не прописаны в теле основной программы.

Как-то так.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Green пишет:

Тютелька в тютельку. Ужос.

нет, это разработчики компиляторов достигли совершенства )))

Green
Offline
Зарегистрирован: 01.10.2015

Конечно, от людей зависит. От культуры в т.ч., что бы вы не говорили. Разбирал nRF24 в своё время. Это какой то кошмар! Что бы не сказать, ППЦ! При том что глюк на глюке!(

Green
Offline
Зарегистрирован: 01.10.2015

ЕвгенийП пишет:

И это ужас ужасный. Как-то хотел написать пост о том, как в IDE использовать настоящие библиотеки и не стал - будет непонятно и постоянно будет вызывать путаницу.

Ну почему же! Всегда интересно услышать мнение грамотных людей.)

sadman41
Offline
Зарегистрирован: 19.10.2016

ua6em пишет:

Green пишет:

Тютелька в тютельку. Ужос.

нет, это разработчики компиляторов достигли совершенства )))


Не достигли совершенства, а скатились до уровня прокладок между табуретом и клавиатурой.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

#define или const ?
Евгений Петрович выражал мнение, что использование const упрощает работу компилятору/оптимизатору. Я использую и то и другое, и как бы разницы вообще не заметил (несколько раз «менял местами», hex-файл получается один и тот же).

А как же все таки лучше в 2022-2023 ?

sadman41
Offline
Зарегистрирован: 19.10.2016

const не только компилятору полезен, но и человеку. Чтоб ему мозг больной не свело при отлове багов.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

BOOM пишет:

#define или const ?
Евгений Петрович выражал мнение, что использование const упрощает работу компилятору/оптимизатору. Я использую и то и другое, и как бы разницы вообще не заметил (несколько раз «менял местами», hex-файл получается один и тот же).

А как же все таки лучше в 2022-2023 ?

Ну, поймите Вы. Когда Вы описываете константу (const или constexpr) Вы в явном виде сообщаете и компилятору и читателю программы её тип. От точного знания типа переменных всем легче. А когда Вы пишете define, Вы оставляете подбор типа на усмотрение компилятора. Вы и решайте как себя вести: "я глава и мужчина я" или "пусть за меня мамка всё решает".

То, что Вы не встречали разницы - Вам просто повезло. Могу привести примеры, где из-за неочевидных преобразований типов такая разница появляется и очень даже влияет на результат. Если бы типы были записаны явно, такого бы не было.

Я уже не говорю про идиотские ошибки, связанные с define, какая, например, была у Великого, когда он написал в define арифметическое выражение без скобок и оно начинало "сливаться" с другими из-за порядка действий. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

скобок много не бывает )))

Sanyaba
Sanyaba аватар
Offline
Зарегистрирован: 27.07.2015

Братцы давно не заходил на форум, а сейчас не могу создавать новые темы.

Сколько прейдеся  ждать?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Новые темы можно создать только на новом форуме !