Попросили запрограммировать контроллер

корнеев
Offline
Зарегистрирован: 12.09.2019

Попросили залить в Pro mini. Вот часть программы. С ардуино знаком поверхностно, предпочитаю ассемблер. И возникло несколько вопросов.

1 Как вообще работает этот блок программы?

2 Как программа поймёт, что используется не тинька 85?

3 Самый важный для меня: какие выводы будут задействованы в Pro mini?
 

asam
Offline
Зарегистрирован: 12.12.2018

Это вообще не программа, а директива для С/С++ препроцессора. Она ничего не делает, а только используется дальше в программе.

Нужен весь текст программы что бы можно было продуктивно обсуждать.

b707
Онлайн
Зарегистрирован: 26.05.2017

корнеев пишет:

С ардуино знаком поверхностно, предпочитаю ассемблер. И возникло несколько вопросов.

это не "ардуино", это просто С

 

Цитата:
1 Как вообще работает этот блок программы?

не вполне понятно, о чем вопрос. попробую ответить так - если это МК Аттини85 - в компиляцию будут вставлены первые шесть строчек, если не Аттини - те строчки, что в блоке else

Цитата:
2 Как программа поймёт, что используется не тинька 85?

где-то в начале программы или во включенном файле должен быть определен макрос __AVR__Attiny_85__. Если макроса нет - значит не Аттини

Цитата:
3 Самый важный для меня: какие выводы будут задействованы в Pro mini?
 

перечисленные после else

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

корнеев пишет:

 

предпочитаю ассемблер. 

Перед вами, граждане, типичный случай так-называемого вранья на 20-ти языках.

корнеев,

запомни, человек знающий AVR-ассемблер не мог бы не понять этого куска. #if'ы там точно такие же, а вместо #define там .def и не догадаться об этом невозможно.

Что тебе ещё непонятно, знаток ассемблера?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ворота пишет:

а вместо #define там .def 

Не всегда.  В некоторых вместо .def  -  .equ

ну и всякие db, dw и dq

:)

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

Ассемблер тоже можно знать поверхностно(. Например только мнемонику команд, без директив и пр.

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

DetSimen пишет:

Ворота пишет:

а вместо #define там .def 

Не всегда.  В некоторых вместо .def  -  .equ

ну и всякие db, dw и dq

:)

в пиках точно equ

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ua6em пишет:

в пиках точно equ

дак а я знаю. :) 

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

DetSimen пишет:

ua6em пишет:

в пиках точно equ

дак а я знаю. :) 

ты удивишься, но я тоже, правда написал всего одну маленькую программку управление приводом вязальной машины

корнеев
Offline
Зарегистрирован: 12.09.2019

Цитата:
это не "ардуино", это просто С

Кусок был выдран из скетча, поэтому я так и назвал его.

Цитата:
...если это МК Аттини85 - в компиляцию будут вставлены первые шесть строчек, если не Аттини - те строчки, что в блоке else

Это понятно, получается что для тиньки 85

 #define CLKpin 4    это порт В4
  #define SIpin 2     это порт  В2
  #define AOpin 3     это порт В3  
  #define ledPin 0     это порт В0
 #define outPin 1     это порт В1
а  тут #define buttonPin 0  // 0 PB5=A0 опечатка, и должно быть #define buttonPin 5  // 0 PB5=A0
 
Цитата:
3 Самый важный для меня: какие выводы будут задействованы в Pro mini?

Цитата:
перечисленные после else

И это, понятно, что "после else", какие именно?!
Рассуждая логически, прихожу к выводу, что для pro mini

 #define CLKpin 3     это порт  D3
  #define SIpin 2      это порт   D2
  #define AOpin 0      это порт  C0  
  #define ledPin 5     это порт   D5
  #define outPin 6     это порт  D6  
  #define buttonPin 1   это порт  C1
 
но, КАК????
 

 

b707
Онлайн
Зарегистрирован: 26.05.2017

корнеев пишет:

Рассуждая логически, прихожу к выводу, что для pro mini

 #define CLKpin 3     это порт  D3
  #define SIpin 2      это порт   D2
  #define AOpin 0      это порт  C0  
  #define ledPin 5     это порт   D5
  #define outPin 6     это порт  D6  
  #define buttonPin 1   это порт  C1
 
но, КАК????
Что "как"? цифра после названия макроса - это номер пина ардуино. Какой пин какому порту МК соответвует - смотрите на распиновке своей ардуино мини
sadman41
Offline
Зарегистрирован: 19.10.2016

Что "как"? В IDE выбираешь тип МК? Выбираешь. Значит IDE может задефайнить в начале всех исходников макрос __AVR_ATTiny..._

Если препроцессор не находит его, то по остальному исходнику делает замену слова CLKpin на число 3. Затем отдаёт результат компилятору. Всё.

корнеев
Offline
Зарегистрирован: 12.09.2019

sadman41 пишет:

Что "как"? В IDE выбираешь тип МК? Выбираешь. Значит IDE может задефайнить в начале всех исходников макрос __AVR_ATTiny..._

Если препроцессор не находит его, то по остальному исходнику делает замену слова CLKpin на число 3. Затем отдаёт результат компилятору. Всё.


 

Да, но почему

   #define SIpin 2      это порт         D2
  #define AOpin 0      это порт         C0

где определяется порт "це" или "де"?"??
sadman41
Offline
Зарегистрирован: 19.10.2016

корнеев пишет:

Да, но почему

   #define SIpin 2      это порт         D2
  #define AOpin 0      это порт         C0

где определяется порт "це" или "де"?"??

Определяется ядром IDE через такие же дефайны.  Картинка по запросу "Arduino Nano Pinout" покажет соответствия, если не хочется по .h файла лазить.
 

b707
Онлайн
Зарегистрирован: 26.05.2017

корнеев пишет:

 

Да, но почему

   #define SIpin 2      это порт         D2
  #define AOpin 0      это порт         C0

где определяется порт "це" или "де"?"??

а правильно вас назвали "знатоком"....

Мозги включаем, прежде чем следующий вопрос задать, ОК?

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

Зато гонору сколько, обид... Спасибо нужно говорить что хоть кто то просвещает, а не огрызаться.

Jeka_M
Jeka_M аватар
Онлайн
Зарегистрирован: 06.07.2014

корнеев пишет:

где определяется порт "це" или "де"?"??

Соответствие пинов платы ардуино к пинам микроконтроллера определяется в заголовочных файлах pins_arduino.h для каждого варианта платы arduino.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

DetSimen пишет:

Не всегда.  В некоторых вместо .def  -  .equ

ua6em пишет:

в пиках точно equ

Я говорю о совершенно конкретном AVR-овском ассемблере. Да, и даже если взять произвольный ассемблер (тогда ты полностью прав), что это меняет? ТС не врёт? Особенно после его дальнейших вопросов? :)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ворота пишет:

Я говорю о совершенно конкретном AVR-овском ассемблере. Да, и даже если взять произвольный ассемблер (тогда ты полностью прав), что это меняет? ТС не врёт? Особенно после его дальнейших вопросов? :)

я говорил не к тому, врёт он или не врет, я к тому, что он говорил, что предпочитает ассемблер, но не сказал какой именно.  А в не-AVR ассемблере директив .def может и не быть.  Прошу не рассматривать мой пост как персональный наезд на каво-либо. 

Про ТС - моё мнение - обычное невменяшко, особенно после тех его постов, что я вчера удалил. 

 

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

DetSimen пишет:

Про ТС - моё мнение - обычное невменяшко, особенно после тех его постов, что я вчера удалил. 

ты и тут секирой поработал )))
 

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

Green пишет:

Ассемблер тоже можно знать поверхностно(. Например только мнемонику команд, без директив и пр.

Ну, где-то, по гамбургскому счёту, это называется "не знать". Хотя, ТС и не писал, что он что-то знает. Он "предпочитает", а чтобы предпочитать, знать совершенно не обязательно. Можно просто типа "слыхал от пацанов, что это круто, потому и предпочитаю".

Так что никакого "так-называемого вранья", в общем-то, нет.

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

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

Green пишет:

Ассемблер тоже можно знать поверхностно(. Например только мнемонику команд, без директив и пр.

Ну, где-то, по гамбургскому счёту, это называется "не знать". Хотя, ТС и не писал, что он что-то знает. Он "предпочитает", а чтобы предпочитать, знать совершенно не обязательно. Можно просто типа "слыхал от пацанов, что это круто, потому и предпочитаю".

Так что никакого "так-называемого вранья", в общем-то, нет.

я предпочитаю армянский коньяк Арарат 1957 года, так где же его взять? Он и в советское время при цене более 43 рублей за 0.5 был на грани недоступности )))