2014-01-14 150 views
0

所以我有在C此功能(下面的代碼),從我的數據庫檢查數據。如果這個數據等於255,我想在我的一個GPIO引腳(12)上點亮樹莓派上的LED。分段故障

我第一次嘗試的代碼而不億立方米的功能,它的工作一切正常。現在我已經包含了bcm2835,並且改變了我的Makefile(編譯工作正常),我得到了這個「Segmentation fault」錯誤。

我知道這意味着我的程序正在使用它不應該使用的內存,但我不知道在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"); 
} 

} 

我希望有人給我一些信息。

+0

我希望在'k'字符串少於約50個字符,或者你將有一個緩衝區溢出。 –

+0

@JoachimPileborg它是 – moffelnijdam

回答

0

正確的使用BCM2835的
這裏的problably可以更好地工作:

#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()