генератор для модуля AD9851 под другой дисплей
- Войдите на сайт для отправки комментариев
Ребята всем привет, пытаюсь перевести скетч генератора для модуля AD9851 под дисплей
https://www.youtube.com/watch?v=oWazLlxFJ1Y
Исправил все функции для вывода на экран, я понимаю что там все сикось-накось будет выводится, но это форматирование текста я исправлю чуть позже, когда удастся запустить скетч. После замены всех функций вывода на экран стали переть ошибки. Сама библиотека рабочая ровно как и библиотека генератора. Но где-то я накосячил и битый час не могу понять почему я дурак. Ткните носом, пожалуйста. На данный момент ругается на
exit status 1
'setincrement' was not declared in this scope
Хотя эта функция описана в скетче.
Исходник в пост не влез, выложил тут http://pastebin.com/6TRHkacF
Перенесите эту функцию выше функции loop.
Если появятся подобные сообщения про другие функции, переносите и их.
Общее правило: функция должна быть объявлена ВЫШЕ первого использования.
Перенесите эту функцию выше функции loop.
Если появятся подобные сообщения про другие функции, переносите и их.
Общее правило: функция должна быть объявлена ВЫШЕ первого использования.
я как бы дико извиняюсь ... объяснял тут тоже одному товарищу, но наткнулся на то, что
прекрасно компилируется и работает. В голове сидит, что если функцию не объявил и ее вызов выше нее - ошибка! Но что то там в консерватории подправили, с какой версии непонятно.
add: IDE 1.8.0, но и в более раних помоему уже работает.
я как бы дико извиняюсь ... объяснял тут тоже одному товарищу, но наткнулся на то, что
add: IDE 1.8.0, но и в более раних помоему уже работает.
Ну, Вы в курсе, что там где работает - это шаловливые ручки разработчиков IDE, которые за нас предобъявления в начало файла собирают (и много чего этим портят).
Это работало до 1.6.5 вкл. Потом перестало (например в 1.6.12 не работает точно). Судя по Вашим словам, в 1.8 заработало снова. Т.е. опять они грязными руками в наш код лезут.
В общем, чтобы не гадать что они там опять натворили и в какой версии, предлагаю писать правильно, тогда работать будет везде :)
работает это, потому что после компилятора проходится линкер, который во все используемые ссылки подставляет правильные адреса, а неиспользуемые выкидывает вместе с кодом. поэтому, в с++ где функцию не обьяви, линкер ее всё равно поймает.
работает это, потому что после компилятора проходится линкер, который во все используемые ссылки подставляет правильные адреса, а неиспользуемые выкидывает вместе с кодом. поэтому, в с++ где функцию не обьяви, линкер ее всё равно поймает.
Какое раздолье для тех, у кого мешанина в голове )))
работает это, потому что после компилятора проходится линкер, который во все используемые ссылки подставляет правильные адреса, а неиспользуемые выкидывает вместе с кодом. поэтому, в с++ где функцию не обьяви, линкер ее всё равно поймает.
Причём тут вообще линкер? Если функция не обявлена, то компилятор сообщает об ошибке и до какого линкера дело вообще не доходит.
В IDE работает просто потому, что их (IDE'шный) препроцессор вставляет предобъвления. Просто посмотрите на файл xxx.ino.cpp созданный той версией IDE, где это работает и всё поймёте.
Сто раз ведь уже обсуждалось. И обсуждалось чем это плохо. Сколько можно-то?
я их IDE, к счастью, не использую. У меня Visual Studio, а там всё по стандартам С++.
я их IDE, к счастью, не использую. У меня Visual Studio, а там всё по стандартам С++.
Ну, а раз так, то у Вас не может работать программа в которой функция не объявлена до использования. Что ж Вы тогда говорите "работает благодаря линкеру" и людей в заблуждение вводите?
Вы путаете. В стандартном С функцию нельзя было использовать до объявления. В С++ такого ограничения нет, а Визуальная Студия, с ее precompiled headers позволяет даже видеть обьявленную где-то там, далеко, функцию в Intellisence.
Вы путаете. В стандартном С функцию нельзя было использовать до объявления. В С++ такого ограничения нет, а Визуальная Студия, с ее precompiled headers позволяет даже видеть обьявленную где-то там, далеко, функцию в Intellisence.
Да, нет, это Вы путаете. Функция в С++ должна быть объявлена до использования (Вам пункт стандарта указать?). А уж прекомпилированы у Вас хеадеры или нет, какая разница. Если функция в них объявлена, то её можно использовать, если нет - хренушки.
Запустите в своей студии вот такой код - узнаете много интересного.
вставил прям в рабочий проект. скомпилировалось, только типы поправил.
кста, функция ChangeStatus() тоже вызывается в setup(), а обьявлена ниже.
мышь стоит над кака() в _tmain();
Не, ну Вы ардуиновским плагином обрабатываете, который заточен под правила IDE специально, чтобы в нём IDE'шные какашки работали. Нет, Вы без ардуиновских штучек, создайте нормальный, обычный С++ проект.
Я спорить не буду, С++ для меня не родной. Возможно, Вы и правы. Не буду тогда обманывать доверчивых форумчан.
Да, почитал. Скорее всего, IDE скрытно вставляет прототип куда-то.
Правильно Вы говорите - вставляет прототип, причём в самое начало файла. И из-за этого начинаются ещё большие глюки. Например, если параметр (или возвращаемое значение) функции имеет тип, определённый в этом же файле, то получаем неопределённый тип параметра, т.к. определение типа оказывается после вставленного прототипа функции. Вот такая беда.