方法一:

struct spi_ioc_transfer tr;  /* 这种写法一定要赋初值 */
    memset(&tr,0,sizeof(struct spi_ioc_transfer));
    
    tr.tx_buf = (unsigned long)tx;
    tr.rx_buf = (unsigned long)rx;
    tr.len = sizeof(tx);
    tr.delay_usecs = delay;
    tr.speed_hz = speed;
    tr.bits_per_word = bits;

方法二:

struct spi_ioc_transfer tr1 =
    {
        .tx_buf = (unsigned long)tx,
        .rx_buf = (unsigned long)rx,
        .len = sizeof(tx),
        .delay_usecs = delay,
        .speed_hz = speed,
        .bits_per_word = bits,
    };

执行操作//SPI_IOC_MESSAGE(1)的1表示spi_ioc_transfer的数量 
    ret = ioctl(fd, SPI_IOC_MESSAGE(1),&tr);   //ioctl默认操作,传输数据

方法一如果没有添加memset会导致ioctl无效的参数,方法二不会

原因分析:

通过跟踪spi驱动发现,可以调用read和write实现半双工通讯,如果使用ioctl那么就是全双工。然而全双工函数内部会判断变量spi_ioc_transfer的所有值,如果没有赋值初始值,那么编译器会赋值随机值,那么驱动程序会报错无效的参数。

第二种方法赋值在内核驱动中比较常见,编译器会给没有手动赋值的成员变量赋值为0,第一种方法没有赋值编译器会赋值为随机值

在应用层,一般会使用ioctl(fd, SPI_IOC_MESSAGE(2), xfer);来进行读写一起的操作.在声明xfer后,必须初始化为0

结构体赋值还可以采用冒号方式,在定义结构体类型时使用冒号时代表位域的概念

spi ioctl无效参数解决相关推荐

  1. vs2005下,回发或回调参数无效的解决方法

    vs2005下,"回发或回调参数无效"的解决方法 还是前几天发现的问题,原来在vs2003下使用的ajax无刷新联动代码,放到vs2005的项目后就会出现错误 回发或回调参数无效. ...

  2. C++ 读取文件时报错“将一个无效参数传递给了将无效参数视为严重错误的函数”解决方法

    ** C++ 读取文件时报错"将一个无效参数传递给了将无效参数视为严重错误的函数"解决方法 最近在运行工程时需要读取stl网格文件,但是在运行时发现报错如下: 但是之前运行过一个测 ...

  3. 关于ImageMagick出现无效参数(invalid parameter)的解决方法

    关于ImageMagick出现无效参数(invalid parameter)的解决方法 参考文章: (1)关于ImageMagick出现无效参数(invalid parameter)的解决方法 (2) ...

  4. 手写logback_springboot logback调整mybatis日志级别无效的解决

    springboot logback调整mybatis日志级别无效的解决 现象 在日志配置文件 logback-spring.xml 中,无论怎么修改级别,mybatis 的 sql 日志都会打印出来 ...

  5. vue 执行函数this_在vue中使用回调函数,this调用无效的解决

    let self = this //使用新变量替换this,以免this无效 //updatestudentinfotoserver是一个将本身部分数据异步上传的接口,接收三个参数,其中第一个是数据, ...

  6. ioctl 函数 参数 详解

    2019独角兽企业重金招聘Python工程师标准>>> ioctl 函数 参数 详解 2009-04-24 11:55 ioctl函数 本函数影响由fd参数引用的一个打开的文件. # ...

  7. ajax异步获取右侧html,Ajax异步获取html数据中包含js方法无效的解决方法

    Ajax异步获取html数据中包含js方法无效的解决方法 页面上使用js写了一个获取后台数据的方法 function data() { var tab = $("#dic") $. ...

  8. 【C++】VS中读写操作(fclose.cpp)引发中断——将一个无效参数传递给了将无效参数视为严重错误的函数

    [C++]VS中读写操作(fclose.cpp)引发中断--将一个无效参数传递给了将无效参数视为严重错误的函数 遇到的问题 跑数据测试程序时,突然跳出报错中断信息,显示触发断点,错误如下图所示. 但是 ...

  9. 0x0FF0ED76 (ucrtbased.dll) (Project5.exe 中)处有未经处理的异常: 将一个无效参数传递给了将无效参数视为严重错误的函数。 出现了

    void drop(int a)//一个删除deque容器中元素的函数{deque<int>::iterator it;it = kn.begin();kn.erase(it+a);cou ...

最新文章

  1. 无需标注数据集,自监督注意力机制就能搞定目标跟踪
  2. Java程序 实验小全
  3. Y项目逸事之中国人设计的全球模板
  4. Git Gui for Windows的建库、克隆(clone)、上传(push)、下载(pull)、合并(转)
  5. Xamarin XAML语言教程构建ControlTemplate控件模板 (四)
  6. ORACLE 数据迁移
  7. 实现 通过数据库里一个字段值相等 则把 他合为一条数据
  8. using 关键字有两个主要用途
  9. EOS开发dApp前需要了解的五件事
  10. R语言中文社区10篇最火的文章 | 2017大盘点
  11. 一连三问 !!! 什么是内存对齐?内存对齐的原因是什么?内存对齐的好处是什么?
  12. python写数据到hive_Python数据篇之Pyhive
  13. 计算机专业数字逻辑,大学计算机专业数字逻辑课程试卷及答案(4份)
  14. 软件工程的完整生命周期
  15. 【大数据】一图了解大数据发展历程
  16. Intel无线网卡linux,Deepin 15.8/Ubuntu 18.04用intel无线网卡9260ac速度跑不满的解决
  17. 【论文翻译】The Quantum Internet: Networking Challenges in Distributed Quantum Computing
  18. computer-06 其它
  19. ARFoundation入门1.0 什么是AR
  20. Kony 如何获取Android context

热门文章

  1. 人体工程学游戏椅行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  2. 2.4 FrozenLake使用cross-entropy方法
  3. IntelliJ Idea SpringBoot 数据库增删改查实例
  4. 章丘谋定大葱功能性-农业大健康·万祥军:不当村官当会长
  5. 三层架构学习的困难_浅谈C/S和B/S架构的工作原理及优缺点
  6. 天津高一计算机会考,09天津高中计算机会考复习.doc
  7. [win10] airpods2 蓝牙连接时卡顿、断连、无声
  8. python输入两个列表a和b、利用内置函数zip()_2nd Python基础语法
  9. 1)编写Animal接口,接口中声明run()方法; 2)定义Bird类和Fish类实现Animal接口; 3)编写Bird类和Fish类的测试程序,并调用其中的run()方法
  10. 阿里云javaweb开发环境搭建(一)(jdk+Tomcat)