2014-01-14 3 views
0

그래서 데이터베이스에서 데이터를 검사하는이 함수 (아래 코드)를 사용하고 있습니다. 이 데이터가 255라면 저는 나무 딸기 파이에있는 GPIO 핀 (12) 중 하나에 LED가 켜지 길 원합니다.bcm 함수를 사용하는 경우 RaspberryPi의 세그먼트 오류

나는 처음에는 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"); 
} 

} 

나는 누군가가 나에 대한 몇 가지 정보를 가지고 희망 : 여기

는 기능입니다.

+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() 거의 한 번 호출해야합니다!

관련 문제