Некоторые пояснения.
В связи с кривостью платформы данного сайта, не позволяющей удобно редактировать свои статьи, я решил написать это объявление- дополнение отдельно.
В связи с тем, что библиотека bcm2835 периодически обновляется, то в неё вносятся изменения, которые могут повлиять на работоспособность ранее написанных примеров.
Так, на сегодняшний день доступна библиотека версии 1.16.
Если вы установили себе библиотеку более новой версии, чем 1.8 (установка которой описана в первой статье "GPIO для чайников"), то у вас может возникнуть проблема с компиляцией написанных программ.
Например при компиляции может вылезти сообщение:
/usr/local/lib/libbcm2835.a(bcm2835.o): In function `bcm2835_delayMicroseconds':
/home/pi/bcm2835-1.15/src/bcm2835.c:350: undefined reference to `clock_gettime'
/home/pi/bcm2835-1.15/src/bcm2835.c:360: undefined reference to `clock_gettime'
collect2: ld returned 1 exit status
Чтобы обойти эту проблемму, достаточно при компиляции добавить опцию -l rt
Т.е., если раньше мы компилировали нашу программу button командой:
gcc -o button button.c -l bcm2835
то теперь нужно писать так:
gcc -o button button.c -lbcm2835 -lrt
Просто автор библиотеки в более новых версиях модифицировал функцию bcm2835_delayMicroseconds, которая теперь учитывает скорость выполнения команд процессором и ей требуется обращение к real-time функциям.
Если вы владелец Raspberry PI Version2:
Для ревизии платы Raspberry PI v2 необходимо изменять определения портов GPIO.
Например, если мы для ревизии v1 писали определение для порта Р1_03 так:
#define PIN RPI_GPIO_P1_03
то для ревизии v2 эта строка должна выглядеть вот так:
#define PIN RPI_V2_GPIO_P1_03
Т.е. для определения любых портов ревизии v2 нужно добавлять в запись "_V2" между "RPI" и "_GPIO"
В прочем, это необходимо только тогда, когда вы используете в своих проектах порты с номерами: Р1-03, Р1-05 и Р1-13.
Для других портов это не имеет никакого значения, какое определение вы используете, т.к. остальные порты GPIO совпадают в обеих ревизиях.
Зато в ревизии v2 вывели дополнительно 4 новых порта на разъём Р5. Этих портов нет в ревизии v1 вобще. Обладатели же ревизии v2 могут использовать эти порты абсолютно так же, как и прочие. Номера этих портов: Р5-03, Р5-04, Р5-05 и Р5-06.
Соответственно псевдонимами этих портов будут:
RPI_V2_GPIO_P5_03
RPI_V2_GPIO_P5_04
RPI_V2_GPIO_P5_05
RPI_V2_GPIO_P5_06
Комментариев: 9
ASA8
04.01.2013 в 13:49 ответДописали бы сразу про платы второй версии
RomanNV5
11.01.2013 в 14:36 ответfixed
vladimirov99510
15.01.2013 в 09:42 ответПример с кнопкой и диодом - супер! Одно лишь плохо - ЦИКЛ опроса кнопки! По-хорошему кнопку надо вешать на прерывание. По даташиту на BCM2835 там вроде насколько я понял с irq49 по irq52 зарезервировано под GPIO pin 0-4. А пример с захватом и обработкой прерывания на линукс - будет вообще потрясен. Там тем более не так уж и сложно это.
RomanNV5
18.01.2013 в 19:11 ответКак решить вопрос с циклом опроса кнопки, я рассказал в продолжении к 5-й части. А с прерыванием в RPI просто так не поработаешь как в МК, тут к нему доступ можно получить только через ядро системы.
Polder12
24.01.2013 в 09:48 ответКак узнать ревизию Rpi ?
RomanNV5
24.01.2013 в 10:33 ответвведите в терминале cat /proc/cpuinfo и смотрите hardware revision code если код будет 2, или 3, то это ревизия 1 если код будет 4,5, или 6, то это ревизия 2
Vitorrio10
29.05.2013 в 00:32 ответПро ревизии хорошо было бы написать уже в первой части. Также у меня ревизия 7 написано - к какой в итоге относить?
deerh11
12.02.2013 в 20:37 ответДобрый вечер! Помогите разобраться, пожалуйста: после компиляции gcc -o GPIO-test GPIO-test.c -lrt -lbcm2835 пишет ошибку: undefined reference to 'bcm2835_delay' collect2: error: ld returbed 1 exit status Я новичок, проверка показала, что ревизия платы = 1
messad_el
25.04.2014 в 13:43 ответУ меня прхожий вопрос, только я в принципе понял в каком направлении думать и тут вроде описан способ как пофиксить но для консоли, а я ленивый qtcreator'щик как мне быть. у меня вообще программа другая, но проблема та же.