Подключение библиотеки
- Войдите на сайт для отправки комментариев
Сб, 10/11/2018 - 21:13
Пытаюсь подключить библиотеку, выдает такую ошибку:
Arduino: 1.8.2 (Windows 10), Плата:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
C:\Users\Andrey\AppData\Local\Temp\ccpTb2VV.ltrans0.ltrans.o: In function `main':
ccpTb2VV.ltrans0.o:(.text.startup+0x15e): undefined reference to `get_str(char*)'
collect2.exe: error: ld returned 1 exit status
exit status 1
Ошибка компиляции для платы Arduino/Genuino Mega or Mega 2560.
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
Код программы:
#define SIZE 64 #include <string.h> #include "my_serial.h" char my_str_byte[ SIZE ]; void setup() { pinMode( 50, INPUT ); pinMode( LED_BUILTIN, OUTPUT ); } void loop(){ get_str( my_str_byte ); if ( !strcmp( my_str_byte, "hello" )) digitalWrite( LED_BUILTIN, HIGH ); if ( !strcmp( my_str_byte, "buy" )) digitalWrite( LED_BUILTIN, LOW ); }
Код my_serial.h
#ifndef MY_SERIAL #define MY_SERIAL #include "Arduino.h" void send_byte( char _byte ); void send_str( char *str_byte ); char get_byte(); void get_str( char *str_byte ); #endif
Код my_serial.c
#include "my_serial.h" char get_byte() { int i; char _byte = 0; while ( digitalRead( 50 ) ); delayMicroseconds( 150 ); for ( i = 0; i < 8; i++) { _byte |= digitalRead(50) << i; delayMicroseconds( 100 ); } while (!digitalRead( 50 )); return _byte; } void get_str( char *str_byte ) { int i; for ( i = 0; ; i++ ) { str_byte[ i ] = get_byte(); if ( str_byte[ i ] == '\n' ) break; } str_byte[ i ] = 0; } void send_byte( char _byte ) { int i; digitalWrite( 51, LOW ); delayMicroseconds( 100 ); for ( i = 0; i < 8; i++) { digitalWrite( 51, (_byte >> i) & 1); delayMicroseconds( 100 ); } digitalWrite( 51, HIGH ); delayMicroseconds( 100 ); } void send_str( char *str_byte ) { int i; for ( i = 0; !(!str_byte[ i ]); i++ ) { send_byte ( str_byte[ i ] ); delay( 100 ); } }
У Вас файл "my_serial.c" на С, а вызываете его из С++
Вам надо
1. либо переименовать my_serial.c в my_serial.cpp и писать на одном языке.
2. либо в файле my_serial.h явно указать, что эти функции на С (там типа extern "C" ... )