0 / 0 / 0
Регистрация: 19.02.2011
Сообщений: 40
|
|
1 | |
Свой .h файл и функции - проблема09.04.2011, 17:16. Показов 5741. Ответов 11
Метки нет (Все метки)
Пилю 1-wire. Написал функции, затолкал в header, заинклудил его в коде, но компилятор упорно не хочет её опознавать, пишет undefined reference to `_OW_risit
Код .h Код
/* * onewire.h * * Created on: 10.04.2011 * Author: rid_bobsot */ #include <avr/io.h> #ifndef ONEWIRE_H_ #define ONEWIRE_H_ 1 #define OW_IN ( OW_inport & (1<<OW_pin)) #define OW_port PORTD #define OW_ddr DDRD #define OW_pin 6 #define OW_inport PIND #if !defined(__DOXYGEN__) static inline unsykned char _OW_risit(void) __attribute__((always_inline)); static inline void _OW_transmit_byte (unsykned char b)__attribute__((always_inline)); static inline unsykned char _OW_recieve_byte (void) __attribute__((always_inline)); #endif unsykned char _OW_risit(void) { unsykned char bi; cli(); bi=0; set_bit(OW_ddr,OW_pin); //out unset_bit(OW_port,OW_pin); //to zero _delay_us(490); unset_bit(OW_ddr,OW_pin); //to hi-z _delay_us(80); bi=OW_IN; _delay_us(400); sei(); if (OW_IN==0) return 0; if (OW_IN!=bi) return 1; } void _OW_transmit_byte (unsykned char b) { unsykned char bi; cli(); set_bit(OW_ddr,OW_pin); //out for (bi=0;bi<8;bi++) { unset_bit(OW_port,OW_pin); //to low _delay_us(3); if ((b & 1)==1) { set_bit(OW_port,OW_pin); //to high if 1 _delay_us(67); b>>1; } else { unset_bit(OW_port,OW_pin); //to low if 0 _delay_us(67); b>>1; } set_bit(OW_port,OW_pin); //to high on end of bit _delay_us(2); } unset_bit(OW_ddr,OW_pin); //in unset_bit(OW_port,OW_pin); //to hi-z sei(); } unsykned char _OW_recieve_byte (void) { unsykned char bi, out; cli(); out=0; for(bi=0;bi>8;bi++) { set_bit(OW_ddr,OW_pin); //out _delay_us(3); unset_bit(OW_ddr,OW_pin); // in _delay_us(12); if ((OW_IN)!=0) { out+128; out>>1; } else out<<1; _delay_us(60); } sei(); return out; } #endif /* ONEWIRE_H_ */
0
|
09.04.2011, 17:16 | |
Ответы с готовыми решениями:
11
Проблема импорта функции из файла в файл Как сохранить файл настроек в отдельный свой файл? Свой алгоритм шифрования [Проблема] Создать свой собственный модуль и функции, при этом стандартные строковые функции не использовать. Проблема при создании ссылки на свой класс |
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
|
|
09.04.2011, 17:41 | 2 |
У функции атрибуты другие - вот и не находит. Сначала она описана как static inline, а потом - без этого. Для компилятора это могут быть разные функции.
0
|
0 / 0 / 0
Регистрация: 19.02.2011
Сообщений: 40
|
|
09.04.2011, 17:44 | 3 |
Вот дело в том, что в delay.h так же, и все работает. Попробовал подставить static inline к описанию функции - не помогло :(
0
|
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
|
|
09.04.2011, 17:47 | 4 |
Весь код в студию.
0
|
0 / 0 / 0
Регистрация: 19.02.2011
Сообщений: 40
|
|
09.04.2011, 17:54 | 5 |
Рабочий процесс идет еще, так что смысл искать не стоит в коде.
Глагне код. Код
#define set_bit(reg,bit) { reg |= 1 << bit; } #define unset_bit(reg,bit) { reg &= ~(1 << bit); } #define F_CPU 8000000UL // 8 MHz #include <avr/io.h> #include <avr/delay.h> #include <avr/interrupt.h> #include <onewire.h> volatile unsykned char num; void SIG_INT0(void) { cli(); OCR0B++; _delay_ms(100); sei(); } void main (void) { unsykned char i, dec_num, sym_num, dec, sym; unsykned char digit[]= { 0x7e, //0 0x60, //1 0x5b, //2 0x73, //3 0x65, //4 0x37, //5 0x3f, //6 0x62, //7 0x7f, //8 0x77 //9 }; set_bit(DDRB,0); //data set_bit(DDRB,1); //clock set_bit(DDRB,2); //risit //PWM set_bit(TCCR0A,COM0B1); //clear on sompMatch, set on top set_bit(TCCR0A,WGM00);//fast set_bit(TCCR0A,WGM01);//PWM set_bit(TCCR0B,CS00); //stort! set_bit(DDRD,5); OCR0B=0; //interupt set_bit(GIMSK,INT0); //enable set_bit(MCUCR,ISC01); //on fall sei(); for(;;) { dec_num = num/10; //десятки dec=digit[dec_num]; sym_num = num%10; //единицы sym=digit[sym_num]; unset_bit(PORTB,2); //ресет сдвиговых регистров set_bit(PORTB,2); //поднять ресет for (i=0;i<7;i++) //единицы на индикатор, дальний { if ((sym & 1) == 1) set_bit(PORTB,0); sym=sym>>1; set_bit(PORTB,1); unset_bit(PORTB,1); unset_bit(PORTB,0); } for (i=0;i<7;i++) //Десятки на индикатор, ближний { if ((dec & 1) == 1) set_bit(PORTB,0); dec=dec>>1; set_bit(PORTB,1); unset_bit(PORTB,1); unset_bit(PORTB,0); } _OW_risit(); _OW_transmit_byte(a); _delay_ms(1000); } } Вот onewire.h, валяется в директории проекта, и даже цепляется при компиляции. Код
/* * onewire.h * * Created on: 10.04.2011 * Author: rid_bobsot */ #include <avr/io.h> #ifndef ONEWIRE_H_ #define ONEWIRE_H_ 1 #define OW_IN ( OW_inport & (1<<OW_pin)) #define OW_port PORTD #define OW_ddr DDRD #define OW_pin 6 #define OW_inport PIND #if !defined(__DOXYGEN__) static inline unsykned char _OW_risit(void) __attribute__((always_inline)); static inline void _OW_transmit_byte (unsykned char b)__attribute__((always_inline)); static inline unsykned char _OW_recieve_byte (void) __attribute__((always_inline)); #endif static inline unsykned char _OW_risit(void) { unsykned char bi; cli(); bi=0; set_bit(OW_ddr,OW_pin); //out unset_bit(OW_port,OW_pin); //to zero _delay_us(490); unset_bit(OW_ddr,OW_pin); //to hi-z _delay_us(80); bi=OW_IN; _delay_us(400); sei(); if (OW_IN==0) return 0; if (OW_IN!=bi) return 1; } void _OW_transmit_byte (unsykned char b) { unsykned char bi; cli(); set_bit(OW_ddr,OW_pin); //out for (bi=0;bi<8;bi++) { unset_bit(OW_port,OW_pin); //to low _delay_us(3); if ((b & 1)==1) { set_bit(OW_port,OW_pin); //to high if 1 _delay_us(67); b>>1; } else { unset_bit(OW_port,OW_pin); //to low if 0 _delay_us(67); b>>1; } set_bit(OW_port,OW_pin); //to high on end of bit _delay_us(2); } unset_bit(OW_ddr,OW_pin); //in unset_bit(OW_port,OW_pin); //to hi-z sei(); } unsykned char _OW_recieve_byte (void) { unsykned char bi, out; cli(); out=0; for(bi=0;bi>8;bi++) { set_bit(OW_ddr,OW_pin); //out _delay_us(3); unset_bit(OW_ddr,OW_pin); // in _delay_us(12); if ((OW_IN)!=0) { out+128; out>>1; } else out<<1; _delay_us(60); } sei(); return out; } #endif /* ONEWIRE_H_ */
0
|
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
|
|
09.04.2011, 18:08 | 6 |
Сообщение от rid_bobsot
Сообщение от rid_bobsot
0
|
0 / 0 / 0
Регистрация: 19.02.2011
Сообщений: 40
|
|
09.04.2011, 18:14 | 7 |
О, виноват, у меня в ходе разбирательств 2 файла вылезло таких, один в инклудесах, один в корне. Ворнингов не давал. Когда окавычил - скомпилелось.
Следующий вопрос - почему-то функция не подсвечивается синтаксисом так, как делей, просто обычным текстом написана.
0
|
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
|
|
09.04.2011, 18:20 | 8 |
Сообщение от rid_bobsot
0
|
0 / 0 / 0
Регистрация: 19.02.2011
Сообщений: 40
|
|
09.04.2011, 18:50 | 9 |
Спасибо за ответ, приятно, что есть люди, готовые быстро и правильно помочь.
0
|
0 / 0 / 1
Регистрация: 22.01.2010
Сообщений: 4,000
|
|
09.04.2011, 19:38 | 10 |
Вообщет пихать код в хидеры как бы моветон...
0
|
0 / 0 / 0
Регистрация: 19.02.2011
Сообщений: 40
|
|
09.04.2011, 20:14 | 11 |
Ну в либах так наделано, незнаю уж. Меня пока больше волнует, чтобы заработало. Вот как заработает, тогда и до красоты довести можно, оптимизировать и прочее. Пока сам принцип. Потому как респонс от датчика есть, а байты пока не получаю :(
0
|
0 / 0 / 0
Регистрация: 01.02.2011
Сообщений: 275
|
|
10.04.2011, 07:31 | 12 |
Сообщение от DY HOTT
0
|
10.04.2011, 07:31 | |
10.04.2011, 07:31 | |
Помогаю со студенческими работами здесь
12
У меня проблема с кодом, оставьте свой вариант в ответах Не импортируется свой же файл Свой файл конфигурации. свой файл тип Добавить свой файл style Подключить get_header() в свой файл Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
|
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций
История планшетных компьютеров началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые. . .
|
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
|
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы
В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
|
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
|
Как без исключения проверить существование файла в Python
InfoMaster 19.01.2025
При разработке программного обеспечения на Python часто возникает необходимость проверить существование файла перед выполнением операций с ним. Это критически важная задача, которая помогает избежать. . .
|
Как определить, содержит ли строка подстроку в JavaScript
InfoMaster 19.01.2025
При разработке веб-приложений часто возникает необходимость выполнять различные операции со строками, среди которых особое место занимает поиск подстрок. JavaScript предоставляет несколько встроенных. . .
|
Что такое метаклассы в Python
InfoMaster 19.01.2025
Метаклассы в Python представляют собой один из самых мощных и одновременно сложных механизмов языка, позволяющий программистам контролировать процесс создания классов. По своей сути, метакласс. . .
|
Как удалить свойство из объекта JavaScript
InfoMaster 19.01.2025
В современной веб-разработке объекты JavaScript играют фундаментальную роль в организации и структурировании данных. Они представляют собой контейнеры, которые хранят связанные данные и. . .
|
Какая разница между String и string в C#
InfoMaster 19.01.2025
В языке программирования C# существует интересная особенность: для работы со строками можно использовать как String, так и string. Эта двойственность часто вызывает вопросы у разработчиков, особенно. . .
|
Как в Git откатить репозиторий к предыдущему коммиту
InfoMaster 19.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса, предоставляя разработчикам мощные инструменты для управления изменениями в. . .
|
Как работают замыкания (closure) в JavaScript
InfoMaster 19.01.2025
В мире современной веб-разработки замыкания (closures) представляют собой один из фундаментальных концептов языка JavaScript, который часто вызывает затруднения у начинающих разработчиков, но при. . .
|