Библиотеки для ардуино
- Войдите на сайт для отправки комментариев
Чт, 07/01/2021 - 16:16
Собрался с силами и решил написать библиотеку (для личного пользования, что бы никого кодом не пугать) для ардуино.
Создал папку в ней файл БИБЛИОТЕКА.h, где указал используемые функции, библиотека.cpp где описал функции подробно. Беда в том, что функции используют три глобальные переменные.
Подскажите, как можно обьявить глобальную переменную в файлах библиотеки, что бы она была видна всем функциям?
#pragma once #include <Arduino.h> //Вот эти глобальные переменные используются в функциях, но IDE их не видит: extern byte dataPin; //Передача данных extern byte clockPin; //Синхронизация передачи данных extern byte strobePin; //Chip select,выбор микросхемы, разрешение/запрет записи данных void function1(byte dataPin1, byte clockPin1, byte strobePin1); void function2(byte cmd); void function3(byte data);
Всё уже объявлено - строки 5,6,7. Только в неймспейс заверни, а то конфликт имен может быть.
Всё уже объявлено - строки 5,6,7. Только в неймспейс заверни, а то конфликт имен может быть.
В том то и беда, вот ошибки:
ну и далее по функциям...
Так может ты определишь переменные теперь?
byte
dataPin = 5;
И т.д. В файле исходников, а не заголовочном.
Добавил пространство имен
Если просто подключить библиотеку, компиляцию проходит, но при попытке вызвать функцию...
1. НАХРЕНА этим переменным быть extern? Разве они должны быть доступны извне? Они ведь используются ТОЛЬКО в библиотеке, так наюха им extern?
2. если уж используете extern, то где то ещё эта переменная должна быть определена без этого слова.
3. если переменные нужны только внутри библиотеки, то им НЕХРЕН делать в файле объявлений от слова совсем. Они объявляются в начале файла .cpp со словом static.
4. пространство имён Вам не нужно от слова "нахрен". Но уж если решили использовать, то либо функции (их тела) должны быть в том же пространстве имён, где и переменные, либо имена переменных нужно предварять префиксом пространства имён.
1. НАХРЕНА этим переменным быть extern? Разве они должны быть доступны извне? Они ведь используются ТОЛЬКО в библиотеке, так наюха им extern?
2. если уж используете extern, то где то ещё эта переменная должна быть определена без этого слова.
3. если переменные нужны только внутри библиотеки, то им НЕХРЕН делать в файле объявлений от слова совсем. Они объявляются в начале файла .cpp со словом static.
4. пространство имён Вам не нужно от слова "нахрен". Но уж если решили использовать, то либо функции (их тела) должны быть в том же пространстве имён, где и переменные, либо имена переменных нужно предварять префиксом пространства имён.
Огромное спасибо, помогло, все скомпилировалось и запустилось после правок
4. пространство имён Вам не нужно от слова "нахрен".
А потом в какой-то левой библиотеке случайно окажется переменная с таким же именем, и начнутся ох какие пляски.
А потом в какой-то левой библиотеке случайно окажется переменная с таким же именем, и начнутся ох какие пляски.
Если сделать так, как я сказал? Объявить только в .cpp файле со словом static? Где же она может оказаться, если такая переменная видна только в своём файле и нигде больше? Ни в каком другом файле её не видно, и там можно смело объявлять другую с таким же именем - она и будет другой. Так что ничего не начнётся.
Я вообще, специально писал "этюды для начинающих", а админ их в начале раздела "Программирование" прикрепил. Там и про это есть. Вы бы почитали, такие-то простые вещи надо бы знать.
Всё содержимое библиотеки никогда не объявляется со словом static. В этом нет смысла. Поэтому говорить, что нейспейсы НАФИГ НЕ НУЖНЫ - нельзя.
Вы решили поспорить? Ну, хорошо, спорьте, только без меня.