как получть доступ к структуре из соседнго .ino файла

Hikss
Offline
Зарегистрирован: 09.01.2020

как получить доступ к структуре из соседнего .ino файла?

через extern не получается, только обычные переменные. помогите, пж.

// файл 1
void loop() {
qw.a = 5; // ошибка.
}

 

// файл 2
 struct {
byte a;
}qw;

 

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

? Структура это теперь не обычная переменная? И учебники отменили, разве? Так и будешь на каждый чих в форум лезть?

Hikss
Offline
Зарегистрирован: 09.01.2020

rkit пишет:

? Структура это теперь не обычная переменная? И учебники отменили, разве? Так и будешь на каждый чих в форум лезть?

два дня мучаюсь по книжкам и знакомый не помог.

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

После рецепта Ркита сложно пытаться еще добавить смысла)) Я попробую. У нелюбимого тут Gyverа есть понятная страничка о библиотеках. Там, в принципе, все подробно.. Это самый легкий путь. А так то, да.. учебники...

Hikss
Offline
Зарегистрирован: 09.01.2020

напишите как нужно пж. гувера читал там этого нет

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

Hikss пишет:

два дня мучаюсь

Целых ДВА ДНЯ? Ничего себе! В курсе, что программированию несколько лет учатся?

Hikss
Offline
Зарегистрирован: 09.01.2020

я старый ассемблерщик, помогите пж

 

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Hikss пишет:

напишите как нужно пж. гувера читал там этого нет

Там все есть для начинающих в Си. Если вы не в силах это сразу всосать - не страшно, просто нужно сделать паузу и почитать учебники (хоть страниц 80). А готовых рецептов под все свои хотелки вы не найдете. 

Hikss
Offline
Зарегистрирован: 09.01.2020

Rumata пишет:

Hikss пишет:

напишите как нужно пж. гувера читал там этого нет

Там все есть для начинающих в Си. Если вы не в силах это сразу всосать - не страшно, просто нужно сделать паузу и почитать учебники (хоть страниц 80). А готовых рецептов под все свои хотелки вы не найдете. 

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

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Hikss пишет:

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

Ну, супер! 

Я не специалист, но посмотреть могу)). Скажите, зачем вам нужно сношаться с внешними "библиотеками", если вы не вполне ясно представляете себе, как все это работает? Объявите свою структуру глобально в основном скетче и не трахайте мозг себе и другим, пока не возникнет критическая потребность. 

Hikss
Offline
Зарегистрирован: 09.01.2020

Rumata пишет:

Hikss пишет:

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

Ну, супер! 

Я не специалист, но посмотреть могу)). Скажите, зачем вам нужно сношаться с внешними "библиотеками", если вы не вполне ясно представляете себе, как все это работает? Объявите свою структуру глобально в основном скетче и не трахайте мозг себе и другим, пока не возникнет критическая потребность. 

у меня не стоит задача сношаццо, у меня структурка в соседнем файле f2.ino, как получить к ней доступ из главного файла там где loop ? 

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Hikss пишет:

у меня не стоит задача сношаццо, у меня структурка в соседнем файле f2.ino, как получить к ней доступ из главного файла там где loop ? 

Это прям совсем легко. С ino  не прокатит, но с с и h вполне. Еще проще, как я раньше писал, объяви структуру в основном скетче. На памяти не скажется, ибо инициализация будет в основном скетче все равно

Hikss
Offline
Зарегистрирован: 09.01.2020

Rumata пишет:

Hikss пишет:

у меня не стоит задача сношаццо, у меня структурка в соседнем файле f2.ino, как получить к ней доступ из главного файла там где loop ? 

Это прям совсем легко. С ino  не прокатит, но с с и h вполне. Еще проще, как я раньше писал, объяви структуру в основном скетче. На памяти не скажется, ибо инициализация будет в основном скетче все равно

спасибо за ответ, но это я все знаю, мне нужно именно из другого .ino файла, я думал, что такое возможно.

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Hikss пишет:

спасибо за ответ, но это я все знаю, мне нужно именно из другого .ino файла, я думал, что такое возможно.

Тебе шашечки или ехать? Сделай из ino обычный заголовочный h-файл с объявлением своей структуры и все. 

Hikss
Offline
Зарегистрирован: 09.01.2020

так и буду делать ((

просто казалось что так проще могло быть. подкупают эти ардуиновские вкладки, а оказалось,что они не полноценные.

спасибо, что уделили время!

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Hikss пишет:

так и буду делать ((

просто казалось что так проще могло быть. подкупают эти ардуиновские вкладки, а оказалось,что они не полноценные.

спасибо, что уделили время!

Ардуиновские вкладки задуманы разрабами для работы с ОДНИМ скетчем. К сожалению, к ООП не имеет отношения. Sad but true ))

Hikss
Offline
Зарегистрирован: 09.01.2020

но функции то работают, думал и со структурками прокатит ))

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Hikss пишет:

но функции то работают, думал и со структурками прокатит ))

Ээээ. не нужно путать разные странички ОДНОГО скетча в ИДЕ, и подключаемые источники #include. 

А так то, исходник посмотреть бы))

Hikss
Offline
Зарегистрирован: 09.01.2020

я к тому что функции не нужно объявлять в ино

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Hikss пишет:

я к тому что функции не нужно объявлять в ино

Дык, без проблем. Объяви их в своих .h и подключи в скетч. По третьему разу пошли уже с этой темой

Hikss
Offline
Зарегистрирован: 09.01.2020

да, так и буду делать, спасибо, с ино файликами не прокнуло. это я и хотел понять.

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

Hikss пишет:

но функции то работают, думал и со структурками прокатит ))

прокатит, только файл, где структурка, должен быть назван так, чтобы по-алфавиту идти раньше файла основного скечча.

Hikss
Offline
Зарегистрирован: 09.01.2020

DetSimen пишет:

Hikss пишет:

но функции то работают, думал и со структурками прокатит ))

прокатит, только файл, где структурка, должен быть назван так, чтобы по-алфавиту идти раньше файла основного скечча.

проверил - не прокатило. это рофл?

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

Дык приведи пример обоих файлов. У меня все прокатывает, у тебя - нет. Значит что-то ты не верно делаешь. )

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

Обманул я )) Ненароком. Сейчас открыл тот проект где много вкладок - они реализованы через .cpp и .h файлы (то есть библиотеки)....

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

DetSimen пишет:

прокатит, только файл, где структурка, должен быть назван так, чтобы по-алфавиту идти раньше файла основного скечча.


Не прокатит, потому что основной скетч первый. А остальные уже по ранжиру.

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

Hikss, структуру описывай в хедере, а используй в любом ino, предварительно включив хедер инклюдом.

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

Hikss пишет:

я старый ассемблерщик, помогите пж

И что, старые ассеблерщики не могут два файла линкером связать?

Похоже , Вы ещё 19 языков знаете, только С++ в их число не входит. Угадал?

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

Hikss пишет:

два дня мучаюсь по книжкам и знакомый не помог.

Если для Вас "два дня по книжкам" - это много, бросайте это дело. Ардуино - не для Вас.

b707
Offline
Зарегистрирован: 26.05.2017

Hikss пишет:

просто казалось что так проще могло быть. подкупают эти ардуиновские вкладки, а оказалось,что они не полноценные.

Какие вкладки? В редакторе Ардуино ИДЕ? если положить файлы .cpp и  .h в папку скетча, они так же будут видны во вкладках.

А делать несколько .ino в одном проекте - это говнокод в гайверовском стиле. Если Вы только учитесь - сразу учитесь писать правильно, через страндартные для Си заголовочные файлы.

Hikss
Offline
Зарегистрирован: 09.01.2020

Всем спасибо за помощь!

Буду делать с и срр файлики.

b707
Offline
Зарегистрирован: 26.05.2017

Hikss пишет:

Буду делать с и срр файлики.

не .c и .cpp, а .h и .cpp

Hikss
Offline
Зарегистрирован: 09.01.2020

я понял ))

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

ТС! Вот это вот читал?

================================

The Arduino development software performs a few transformations to your sketch before passing it to the avr-gcc compiler:

  • All .ino and .pde files in the sketch folder (shown in the Arduino IDE as tabs with no extension) are concatenated together, starting with the file that matches the folder name followed by the others in alphabetical order. The .cpp filename extension is then added to the resulting file.
  • If not already present, #include <Arduino.h>is added to the sketch. This header file (found in the core folder for the currently selected board) includes all the definitions needed for the standard Arduino core.
  • Prototypes are generated for all function definitions in .ino/.pde files that don't already have prototypes. In some rare cases, prototype generation may fail for some functions. To work around this, you can provide your own prototypes for these functions.
  • #linedirectives are added to make warning or error messages reflect the original sketch layout.

No pre-processing is done to files in a sketch with any extension other than .ino or .pde. Additionally, .h files in the sketch are not automatically #included from the main sketch file. Further, if you want to call functions defined in a .c file from a .cpp file (like one generated from your sketch), you'll need to wrap its declarations in an extern "C" {}block that is defined only inside of C++ files.

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

Hikss пишет:

я понял ))


Ужос! Я же объяснил в #26 как делать если хочешь без cpp.

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

wdrakula пишет:

ТС! Вот это вот читал?

То-есть DetSimen был прав?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

ua6em пишет:

wdrakula пишет:

ТС! Вот это вот читал?

То-есть DetSimen был прав?

нет.

FUCKING_ARDUINO_WIKI пишет:

the file that matches the folder name followed by the others in alphabetical order

файл с именем папки - первый, остальные .ino - за ним в алфавитном порядке.

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

wdrakula пишет:

нет.

файл с именем папки - первый, остальные .ino - за ним в алфавитном порядке.

въехал, даже если он начнётся с a.ino структура окажется не описана так как будет за loop(){}

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

А кто не даёт описать структуру в заголовочном файле и включать его везде, где нужно?

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

Вот и я о том же ж.

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Идеи пошли по кругу. Так сказать, заLOOPилась тема)) 

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

Это даже не идеи - это жИзнь.

Hikss
Offline
Зарегистрирован: 09.01.2020

задача была получить доступ к структуре из соседнего  ино файла.

друге варианты мне известны, еще раз спасибо.

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

Ну вы подумайте здравомысляще. Первым идёт главный ино. Если в нём будет описана структура, то доступ из ЛЮБОГО соседнего ино будет получен. Иначе, если структура будет описана в другом ино, то доступ к ней будет получен из текущего (естественно) и  нижестоящих (по алфавиту) ино. Ага?

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

Обсуждаете - обсуждаете... А вот нахера это надо - непонятно.

Может у ТС осеннее обострение? Он же не объяснил внятно, почему нормальные методы его не устраивают.

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

А мне вот интересно, почему объявление функций в «доп. ино» все же «прокатывает»? Сегодня ради интереса сделал так и прокатило. )

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

BOOM пишет:

А мне вот интересно, почему объявление функций в «доп. ино» все же «прокатывает»? Сегодня ради интереса сделал так и прокатило. )

А почему не должно было прокатить? Вы же пишете функции в самом низу скетча и они нормально вызываются из Луп и Сетап. А вот с объявлением типов - ой. Вообще - программу из набора нескольких ino-файлов можно грубо рассматривать как ОДИН файл, разрезанный по какой-то причине. Все, что работает в одном "куске", будет работать и в нарезке, составленной в правильной последовательности. Компилятор смотрит их подряд. 

А ТСу бы перестать маяться фигней и юзать проверенное электроникой #include <myData.h> 

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

Я никогда функции не писал раньше в самом низу. Точнее писал, но перед loop() объявлял их. Оказывается не обязательно объявлять.

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

BOOM пишет:

Я никогда функции не писал раньше в самом низу. Точнее писал, но перед loop() объявлял их. Оказывается не обязательно объявлять.

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

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

BOOM пишет:

А мне вот интересно, почему объявление функций в «доп. ино» все же «прокатывает»? Сегодня ради интереса сделал так и прокатило. )


Так в том то вся и фишка Ардуино - не нужно указывать прототипы, их создаёт сама IDE перед компиляцией.
А вот переменные/структуры и пр. нужно объявлять ДО их использования.

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

mykaida пишет:

Обсуждаете - обсуждаете... А вот нахера это надо - непонятно.


Нафига надо? Да очень просто. Пишешь несколько отдельных модулей и ни о чём не думаешь. Никаких  тебе инклюдов, никаких прототипов... Всей совместной сборкой занимается IDE. Ну ведь удобно же! Для начинающих. Гайвер так и пишет. И правильно. Ну, если есть такая удобная фича, почему ей не пользоваться? Ну да, несовместимость с другими IDE, но нам то это зачем? Мы ведь не профи, так, на раз пописать.)