Грешка в сегментирането на RaspberryPi при използване на bcm функции

Така че имам тази функция (код по-долу) в c, която проверява данни от моята база данни. Ако тези данни са равни на 255, искам да имам светодиод, който да свети на един от моите GPIO щифтове (12) на raspberry pi.

Първо опитах кода БЕЗ bcm функции, всичко работи добре. Сега, когато имам включен bcm2835 и промених своя Makefile (компилирането работи добре), получавам тази грешка „Грешка на сегментиране“.

Знам, че това означава, че програмата ми използва памет, която не трябва да използва, но нямам представа какво причинява това в bcm редовете.

Ето функцията:

void check_pasid(char k[]){

MYSQL *conn;
MYSQL_RES * result;
MYSQL_ROW row;



   char *server = "server";
   char *user = "myusername";
   char *password = "mypassword";
   char *database = "dbname";
   char query1[100];

   // Make the connection to the Mysql-database.
   conn = mysql_init(NULL);

   if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) {
      fprintf(stderr, "%s\n", mysql_error(conn));
      exit(1);   

   }

sprintf(query1,"SELECT COUNT(*) FROM passcan WHERE UserID = \"%s\";",k);


int result1 = mysql_query(conn, query1);
result = mysql_store_result(conn);
row = mysql_fetch_row(result);

int compare = 1;
compare = strcmp(row[0], "1");

if(compare == 0){
    printf("Led is turning on");
    // Turn it on
    bcm2835_gpio_write(PIN12, HIGH); 
    delay(5000);
    // Turn it off
    bcm2835_gpio_write(PIN12, LOW);
}
else{
    printf("Led is not turning on");
}

}

Надявам се някой да има информация за мен.


person moffelnijdam    schedule 14.01.2014    source източник
comment
Надявам се, че низът в k е по-малък от около 50 знака или ще имате препълване на буфера.   -  person Some programmer dude    schedule 14.01.2014
comment
@JoachimPileborg е така   -  person moffelnijdam    schedule 14.01.2014


Отговори (1)


Правилно използване на BCM2835
Тук вероятно може да работи по-добре:

#include <bcm2835.h>
// Led on RPi Plug P1 pin 11 (which is GPIO pin 17)
#define PIN RPI_GPIO_P1_11
uint8_t status = LOW;
int SetLed()
{
    // Inizialize the library
    if (!bcm2835_init())
        return 1;
    // Set the pin to be an output
    bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);
    // Set the Led:
    bcm2835_gpio_write(PIN, status);
    status=!status;
    /*
    I fetched a flip-flop variable, problably does not work without integer variable, so replace the up line with
    if (status == HIGH)
       status = LOW;
    else
       status = HIGH;
    */
    //Clean-up and return success.
    bcm2835_close();
    return 0;
}

Не съм експерт, кодът може да е грешен, но важната част е функцията bcm2835_init(),bcm2835_gpio_fsel() и bcm2835_close() това трябва да се извика почти веднъж!

person Delayer    schedule 15.01.2014