pourquoi ne ioctl retour “mauvaise adresse”

J'utilise le code ci-dessous pour les données de sortie à partir de SPI port de incorporée conseil d'administration (olimex imx233-micro -- ce n'est pas un conseil, une question spécifique). Lorsque j'exécute le code ioctl retour "mauvaise adresse". Je suis modifiant le code de la http://twilight.ponies.cz/spi-test.c qui fonctionne très bien. Quelqu'un pourrait-il me dire ce que je fais mal?

root@ubuntu:/home# gcc test.c -o test
test.c:20: warning: conflicting types for msg_send
test.c:16: note: previous implicit declaration of msg_send was here
root@ubuntu:/home# ./test
errno:Bad address - cannot send SPI message
root@ubuntu:/home# uname -a
Linux ubuntu 3.7.1 #2 Sun Mar 17 03:49:39 CET 2013 armv5tejl GNU/Linux

Code:

//test.c
#include <stdint.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <getopt.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/types.h>
#include <linux/spi/spidev.h>
#include <errno.h>

static uint16_t delay;

int main(int argc,char *argv[]){
     msg_send(254); //the message that I want to send decimal "254"
     return 0;
}

void msg_send(int msg){
    int fd;
    int ret = 0;
    fd = open("/dev/spidev32766.1", O_RDWR); //ls /dev outputs spidev32766.1
    if(fd < 0){
        fprintf(stderr, "errno:%s - FD could be not opened\n ", strerror(errno));  
        exit(1);
        }

    struct spi_ioc_transfer tr = {
        .len = 1,
        .delay_usecs = delay,
        .speed_hz = 500000, //500 kHz
        .bits_per_word = 8,
        .tx_buf = msg,
        .rx_buf = 0, //half duplex
    };

    ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
    if (ret <1 ){
        fprintf(stderr, "errno:%s - cannot send SPI message\n ", strerror(errno));
    }
    close(fd);
}

Merci!

Vous savez que le déplacement de vos msg_send() fonction au-dessus de la main() permettra de se débarrasser de ce droit d'alerte?
Merci Mike, j'ai été négligent. les mises en garde s'en va mais bad address erreur reste
.tx_buf=msg -- que pensez-vous devrait se produire ici?
n.m., J'ai pensé qu'il passera le message(254) que je veux envoyer à l'émetteur de la mémoire tampon, puis il sera envoyé par ioctl, est-il où je fais erreur?

OriginalL'auteur sven | 2013-04-02