libsoc-file-debug: устройство или ресурс занят - PullRequest
2 голосов
/ 26 сентября 2019

Я новичок в программировании на C и мне нужна помощь для моего кода.

На самом деле у меня есть этот код для встроенной платы SAMA5D27.

Я пытаюсь использовать этот код (который былразработан для другой платы) для управления светодиодом с именем «красный», определенным в GPIO «PA10», с кнопкой «USER», определенной в GPIO «PA29», существующей на моей плате.

Это код:

#include <stdio.h>
#include <stdlib.h>

#include "libsoc_gpio.h"
#include "libsoc_debug.h"
#include "libsoc_board.h"

unsigned int GPIO_LED;
unsigned int GPIO_BUTTON;

int last_touch;
int led_state = 0;
int running = 1;

/* This bit of code below makes this example work on all */
/* 96Boards, Though you could just call this in main */
__attribute__((constructor)) static void _init()
{
  board_config *config = libsoc_board_init();
  GPIO_BUTTON = libsoc_board_gpio_id(config, "PA29");
  GPIO_LED = libsoc_board_gpio_id(config, "PA10");
 libsoc_board_free(config);
}
/* End of 96Boards special code */

int main()
{
  gpio *gpio_led,*gpio_button;
  int touch;

  libsoc_set_debug(0);
  gpio_led = libsoc_gpio_request(GPIO_LED,LS_SHARED);
  gpio_button = libsoc_gpio_request(GPIO_BUTTON,LS_SHARED);

  if((gpio_led == NULL) || (gpio_button == NULL))
  {
    return(-1);
  }
  libsoc_gpio_set_direction(gpio_led,OUTPUT);
  libsoc_gpio_set_direction(gpio_button,INPUT);

  if((libsoc_gpio_get_direction(gpio_led) != OUTPUT)
  || (libsoc_gpio_get_direction(gpio_button) != INPUT))
  {
    return(-1);
  }
  while(running)
  {
    touch = libsoc_gpio_get_level(gpio_button);
    if(touch == 1 && last_touch == 0){
      led_state = led_state==1?0:1;
      libsoc_gpio_set_level(gpio_led,led_state);
      usleep(100000);
    }
    last_touch = touch;
    usleep(1);
  }  
  if(gpio_led || gpio_button)
  {
    printf("apply gpio resource fail!\n");
    libsoc_gpio_free(gpio_led);
    libsoc_gpio_free(gpio_button);
  }
  return EXIT_SUCCES

Я скомпилировал код на своем ПК и ошибок нет.Но когда я выполняю его на своей плате, он показывает мне следующее сообщение:

libsoc-file-debug: устройство или ресурс занят

libsoc-file-debug: устройство или ресурс занят

Поиск в сети Я обнаружил, что GPIO, который я хочу использовать, уже используется в моей плате.Я думаю, что, возможно, есть способ принудительно освободить эти GPIO с помощью программы на C, чтобы мой код мог включаться правильно.

Может кто-нибудь помочь мне, пожалуйста?Спасибо!

...