gpt4 book ai didi

c - 从管道读取 SPI

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:12 27 4
gpt4 key购买 nike

我正在 microblaze 上使用 ulinux。

我对 SPI 有一些疑问。我的代码有效,我看到管道已读出。但是我如何检查数据 (rdata) printf 不起作用。

这是我的代码

//slavetool

int main(int argc, char **argv)
{

uint8_t rdata[1500];
int ctrl = 0;
int fd;
int pipenr = 9;
int n;
char device[15];
fd_set socks;

//open codec
sprintf(device,"/dev/spi/pipe%d", pipenr);
fd = open(device, O_RDWR);
if(fd < 0)
{
printf("Failed to open pipe %s\n", device);
return 0;
} else
{
printf("openend %s\n", device);
}
printf("fd = %i\n", fd);

printf("Initialisation complete!\n");


while(1)
{
printf("try to set!\n");

FD_ZERO(&socks);
FD_SET(fd, &socks);

printf("fd_set set!\n");

n = select(fd + 1, &socks, NULL, NULL, NULL);

//printf("Select is %i!\n", n);

if(FD_ISSET(fd, &socks))
{
ctrl = read(fd, &rdata, 1500);
printf("entered data: %s", rdata); //DOESN'T WORK
printf("ctrl: %i", ctrl); //DOESN'T WORK
printf("Check1\n"); // WORK

if(ctrl<0)
{
perror("read");
printf("Ende ctrl ist %i!\n",ctrl);
FD_ZERO(&socks);
close(fd);
return -1;
}

printf("Check2\n");



} else {printf("FD_ISSET not set");}


}

close(fd);


return 0;
}

终端:

# ./spiread
openend /dev/spi/pipe9
fd = 3
Initialisation complete!
try to set!
fd_set set!
Select is 1!
Wait:
Check1
Check2

*编辑感谢您的快速回答。不要工作!跳过那个 print()。**编辑哦,它有效!谢谢 Alter Mann。不能投票 -.-

最佳答案

uint8_t rdata[1500];
...
ctrl = read(fd, &rdata, 1500);
printf("entered data: %s", rdata); //DOESN'T WORK

我建议将其更改为:

char rdata[1500];
...
ctrl = read(fd, rdata, sizeof(rdata) - 1);
if (ctrl == -1) {
perror("read");
exit(EXIT_FALURE);
}
rdata[ctrl] = '\0'; // read() doesn't add a trailing 0
printf("entered data: %s", rdata);

请注意 recv更喜欢在现代系统上阅读

关于c - 从管道读取 SPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21427213/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com