Не могу скомпилировать i2c_smbus_write_byte на Raspberry Pi 4 - PullRequest
0 голосов
/ 07 мая 2020

Кто-нибудь пробовал использовать i2c_smbus_write_byte или любую аналогичную функцию на Raspberry Pi 4?

Я не могу его скомпилировать, он не работает при связывании, не находя его. Я использую его, как описано здесь: http://synfare.com/599N105E/hwdocs/rpi/rpii2c.html

Все рекомендуемые заголовки есть, а также -li2 c в Makefile.

Может кто подскажет, в чем может быть проблема? Я понятия не имею на данный момент .

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

На странице, на которую вы ссылаетесь, написано:

В версии Buster, по состоянию на июнь 2019 года, необходимые сведения для использования i2c_smbus_write_byte_data () и братьев и сестер требуют следующих операторов include:

#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/i2c-dev.h>
#include <i2c/smbus.h>

Используя fgrep, вы можете подтвердить, что функция объявлена ​​в /usr/include/i2c/smbus.h:

# cd /usr/include; fgrep -R i2c_smbus_write_byte *
i2c/smbus.h:extern __s32 i2c_smbus_write_byte(int file, __u8 value);
i2c/smbus.h:extern __s32 i2c_smbus_write_byte_data(int file, __u8 command, __u8 value);

Итак, это должно работать:

#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/i2c-dev.h>
#include <i2c/smbus.h>

int main(void) {
  int i2c = open("/dev/i2c-1", O_RDWR);
  i2c_smbus_write_byte(i2c, 1);
  close(i2c);
  return 0;
}

Я проверил, что этот пример успешно компилируется в последней версии Raspbian Buster Lite:

gcc test.c -otest -li2c

Если вы используете g ++ вместо g cc, тогда вы должны заключить директивы include с extern " C ":

extern "C" {
  #include <linux/i2c-dev.h>
  #include <i2c/smbus.h>
}
0 голосов
/ 07 мая 2020

Возможно, стоит проверить, присутствует ли libi2 c -dev в вашей системе.

sudo apt-get install libi2 c -dev

может быть все, что вы нужно.

...