Нужен hello world для записи в Intel Edison gpio на C

Мне нужна простая программа, которая будет писать в gpio. Я нигде не могу найти. Пример в документации mmra не работает. Я выбрал gpio14, потому что пример Sprakfun, который пишет на этот вывод с помощью системных вызовов, работает просто отлично. Но моя программа не работает.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mraa.h>
#include <math.h>
#include <mraa/gpio.h>

int main(int argc, char **argv)
{

mraa_gpio_context gpio;

gpio = mraa_gpio_init(14);  <--- to get gpio14 to toggle change this to 36
mraa_gpio_dir(gpio, MRAA_GPIO_OUT);
int value = 0;
for (;;) {
    if(value == 0)value = 1;
    else value = 0;
    mraa_gpio_write(gpio,value);
    printf("output is %d\n",value);
    sleep(1);
}
mraa_gpio_close(gpio);
return 0;
}

Цикл запускается и выводит результат 1, затем вывод 0. У меня есть осциллограф на штырьке, и он остается низким.

С помощью этого руководства Sparkfun я могу двигаться штифт высокий, поэтому я знаю, что моя настройка правильная. Если кто-то может просто дать мне пример кода, который работает со всеми включениями, это было бы очень полезно.


person Allen Edwards    schedule 22.02.2015    source источник
comment
Какая? У вас есть пример, который работает? Почему нельзя преобразовать одно в другое, построчно, и таким образом выяснить, что идет не так?   -  person Martin James    schedule 22.02.2015
comment
@MartinJames: в этом примере фактически используется доступ sysfs к GPIO только через оболочку. Ему нужен пример, написанный на C   -  person Sam Protsenko    schedule 22.02.2015
comment
Просто поищите в Google таблицу данных и сделайте то, что там написано.   -  person Simon    schedule 22.02.2015
comment
@Simon: техническое описание не имеет ничего общего с этой проблемой. Говорит, что GPIO работает при доступе через sysfs. Значит драйвер GPIO работает нормально. У него проблемы с фреймворком mraa/gpio.h.   -  person Sam Protsenko    schedule 22.02.2015
comment
он, вероятно, не смог настроить gpio, в таблице данных вы найдете, как это сделать. Вот что я бы сделал.   -  person Simon    schedule 22.02.2015
comment
@Allen, если вы можете использовать GPIO через sysfs, это означает, что вы можете просто открыть тот же файл sysfs в своем приложении C и читать/писать в него, как вы это делали из оболочки. Платформа MRAA сделает это за вас: github.com/intel-iot-devkit/mraa/blob/master/src/gpio/ . Таким образом, это может быть какая-то ошибка в этой структуре, вы можете попытаться избавиться от нее и написать свой собственный код, который будет делать то же самое, что и в оболочке (используя учебник). Другой вариант - написать модуль ядра, было бы очень легко сделать то, что вы хотите: см. lwn.net/Articles /532714   -  person Sam Protsenko    schedule 22.02.2015
comment
@Simon: ему удалось настроить и использовать тот же GPIO через sysfs. Теперь он делает это через какой-то фреймворк MRAA в коде на C, и этот фреймворк делает то же самое: открывает файлы sysfs и пишет в них. Его код имеет ту же последовательность, что и через sysfs. Так что либо фреймворк MRAA каким-то образом сломан, либо этот фреймворк требует какого-то дополнительного (или другого) кода. Я думаю, что даташит здесь не поможет, потому что все, что вы можете получить из даташита, уже реализовано в драйвере GPIO (в ядре Linux) для его платформы.   -  person Sam Protsenko    schedule 22.02.2015
comment
Вы запускаете свою программу как обычный пользователь или как root?   -  person Sam Protsenko    schedule 22.02.2015
comment
Я запускаю программу как root. Я также должен сказать, что успешно запускаю программу, использующую i2c и UART.   -  person Allen Edwards    schedule 22.02.2015
comment
Я просмотрел ссылки, и в основном вы инициализируете, устанавливаете направление и устанавливаете значение. Я делаю все это. Кроме того, я использовал в качестве шаблона пример из официальной документации, найденный здесь iotdk. intel.com/docs/master/mraa/gpio_8h.html и изменил направление и заставил его писать вместо чтения. Мне просто нужен кто-то, кто сделал это, чтобы сказать мне, что я упустил.   -  person Allen Edwards    schedule 22.02.2015


Ответы (1)


Оказывается, код, который я разместил, правильный и работает. Проблема в том, что gpio14 имеет mraa 36, ​​поэтому для переключения gpio14 мне нужно изменить число в init на 36. Вот определяющий документ.

кольцо декодера mraa

person Allen Edwards    schedule 22.02.2015