使用bcm函数时,RaspberryPi上的分段错误

时间:2014-01-14 15:49:53

标签: c raspberry-pi gpio

所以我在c中有这个函数(下面的代码)来检查我的数据库中的数据。如果这个数据等于255,我希望在覆盆子pi上的一个GPIO引脚(12)上点亮一个LED。

我首先尝试了代码WITHOUT 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");
}

}

我希望有人能为我提供一些信息。

1 个答案:

答案 0 :(得分:0)

正确使用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()几乎必须被调用一次!