проблема с компиляцией
- Войдите на сайт для отправки комментариев
Пнд, 25/11/2013 - 19:24
Приветствую всех. не думал, что буду регистрироваться тут, но у меня возникла непонятная аномалия. Программировал я значит ардуину про мини, лепил к ней ад9850. среда разработки: Arduino 1.0.5.
в начале ввод частоты по юарту, а потом еще решил добавить энкодер. немного попарился и всё получилось. крутишь - частота меняется. решил немного изменить программу и вдруг начались ошибки компиляции. вернул все взад до того момента когда работало, но оно увы, не компилится.
значит текст моей программы таков:
#include <AD9850.h> #include <rotary.h> #include <stdlib> AD9850 ad(5, 6, 7); // w_clk, fq_ud, d7 Rotary r = Rotary(2, 3); double b = 10460000; void setup() { Serial.begin(9600); ad.setfreq(b); PCICR |= (1 << PCIE2); PCMSK2 |= (1 << PCINT18) | (1 << PCINT19); sei(); } void loop() { if (Serial.available() > 0) //Проверка буфера юарта { char freq[10]; for (int i=0; i<8; i++) { freq[i] = Serial.read(); delay(5); } delay(1); Serial.write(" "); delay(1); Serial.print("Freq: "); Serial.println(b = atof (freq)); Serial.print("Input new freq"); ad.setfreq(b); Serial.flush(); } } //////////////////////////////обработка прерывания на энкодере ISR(PCINT2_vect) { unsigned char result = r.process(); if (result) { ad.setfreq(b); Serial.println(result == DIR_CW ? b++ : b-- ); } } //////////////////////////////
при компиляции внизу красным шрифтом показывает:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ad9850_serial.cpp.o: In function `__static_initialization_and_destruction_0':
C:\Program Files\Arduino/ad9850_serial.ino:5: undefined reference to `Rotary::Rotary(char, char)'
ad9850_serial.cpp.o: In function `__vector_5':
C:\Program Files\Arduino/ad9850_serial.ino:39: undefined reference to `Rotary::process()'
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Значит исходник для энкодера я брал стандартный в примерах AD7C_DDS_VFO/Rotary source/rotary
и как бы оно скомпилировалось и прошилось, и даже работает в железе, но компилиться уже не хочет.
помогите пожалуйста!
Что за файл такой - <stdlib>?
Пятая строка точно Rotary r = Rotary(2, 3);? не Rotary r(2, 3);?
stdlib - это библиотека для
вот этого преобразования(string to boolean); находится в C:\Program Files\Arduino\hardware\tools\avr\avr\include
у меня по крайней мере.
я так понимаю, что ошибка ссылается вот на этот файл:
вот собственно и он. как бы все просто и все работало. То ли вспышка на солнце то ли что, не понимаю.
stdlib - это библиотека для
Я привык - точнее, компиляторы Си меня научили - что библиотека подключается посредством включения заголовочного файла. А они, как правило, имеют расширение ".h"
т.е.
а, ну да, видимо рука дрогнула, так я и писал. хотя странно, что работало без указания полного имени файла. но это как бы ничего не меняет.
прошу прощения - код управления синтезатором я взял отсюда http://www.ad7c.com/projects/ad9850-dds-vfo/
Ну чтож, проблема вроде как решена: запарился с переустановкой программы - не помогло. оказывается необходимо, чтоб рядом с файлом file.h был файл file.cpp. жаль, что не нашел где об этом условии можно почитать - все экспериментальным образом. правда так и не понял почему у меня тогда перестало работать, видимо что-то случайно удалил или переместил. короче кому интересно - программа, приведенная выше работает и энкодер отрабатывает очень четко. библиотека для AD9850 тут https://code.google.com/p/ad9850-arduino/downloads/detail?name=ad9850-arduino-r6.tar.gz&can=2&q=
Расскажите, пожалуйста, как получилось запустить эту плату?
Смотрю на выход осцилографом - пусто. И с микросхемы ничего не идёт, ни синуса, ни меандра.
На ножки микросхемы библиотечные посылки приходят. На основе примера делаю свайп частоты с 100 до 200 Гц - пусто. Куда копать?
barada, неплохое решение с библиотекой для AD9850.
Осталось дисплей прикрутить.
Небольшие разъяснения сделал в скетче , если кто захочет повторить
Копилируется в ID 1.6.8