18 i2c控制器之应用程序的调用

通常情况下,i2c设备驱动里应是通过调用已驱动好的i2c控制器来实现i2c设备的操作的。但i2c控制器驱动里也直接提供应用程序调用的接口,可用于实现应用程序直接读写操作的设备。
//注意这种方法只适用于仅需读写操作的简单设备. 如eeprom, dht12这些设备.


使用这种方法前,除i2c控制器需要驱动好外,内核里也需要选上:

make menuconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
    Device Drivers  ---> 
        I2C support  --->
            <*>   I2C device interface

正常情况下/dev/目录下应出现i2c-x 设备文件,用于应用程序调用相应的控制器使用.


应用程序的调用方法参考: 内核源码目录 Documentation/i2c/dev-interface
// smbus相关的操作方法需要控制器驱动的支持,并不是所有的方案都可以使用。
通用的方法可以是:

1.  打开要操作的控制器设备文件, 如需操作第0个i2c控制器:
    int fd = open("/dev/i2c-0", O_RDWR);
    if (fd < 0)
    {
        perror("open i2c controller");
        return 1;
    }

2. 使用ioctl(fd, I2C_RDWR, struct i2c_rdwr_ioctl_data *dat)来读/写设备
   struct i2c_rdwr_ioctl_data {
       struct i2c_msg *msgs;   //struct i2c_msg表示一条i2c的操作消息,每个i2c_msg都会有一个start信号
        __u32 nmsgs; //消息的个数            
   };
   //一定要注意:  ioctl(fd, I2C_RDWR, ...)调用一次才会在结束操作前发出仅仅一个停止信号,不管struct i2c_msg的消息有多少条(需要根据设备的传输时序里的开始信号及停止信号确定消息的个数和ioctl的调用次数)

   struct i2c_msg {
    __u16 addr; /* 设备地址,不包含读写位          */
    __u16 flags; // 0表示写, I2C_M_RD表示读
    __u16 len;      /* 数据长度(不包括地址)               */
    __u8 *buf;      /* 数据缓冲区的长度     */
 };


dht12的i2c工作方式原理参考: http://blog.csdn.net/jklinux/article/details/74199964

这里写图片描述
根据里面的时序要求可得知,ioctl(fd, I2C_RDWR, ..)需要调用一次(有一个停止信号),共需发出两条消息(有两个开始信号,而且这两个信号间没有停止信号)

dht12接到板上的第0个i2c控制器接口后的测试代码:

/* app.c */

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/i2c.h>
#include <linux/i2c-dev.h>

#define DHT12_ADDR  0x5c

unsigned char data[5];
int main(void)
{
    int fd;

    fd = open("/dev/i2c-0", O_RDWR);
    if (fd < 0)
    {
        perror("open i2c controller");
        return 1;
    }
///////////////////////////////////////
    // struct i2c_msg表示一条i2c的操作消息,每个i2c_msg都会有一个start信号.
    //  ioctl调用一次才会产生一个停止信号,不管一次发出多少条消息 

    unsigned char reg = 0x00;
    unsigned char datas[5];

    struct i2c_msg msgs[2] = {
        {DHT12_ADDR,        0,             1, &reg},
        {DHT12_ADDR, I2C_M_RD, sizeof(datas), datas},
    };


    struct i2c_rdwr_ioctl_data   rdat = {
        .msgs = msgs,
        .nmsgs = 2,
    };          

    if (ioctl(fd, I2C_RDWR, &rdat) < 0)
    {
        perror("i2c rdwr failed\n");
        return 3;
    }

    int i;
    for (i = 0; i < sizeof(datas); i++)
        printf("%02d ", datas[i]);
    printf("\n");

//////////////////////////////////////

    close(fd);
    return 0;
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
《嵌入式Linux应用程序开发标准教程(第2版)》主要分为3个部分,包括Linux基础、搭建嵌入式Linux环境和嵌入式Linux的应用开发。Linux基础部分从Linux基础、基本操作命令讲起,为Linux初学者能快速入门提供了保证。接着系统地讲解了嵌入式Linux的环境搭建,以及嵌入式Linux的I/O与文件系统的开发、进程控制开发、进程间通信开发、网络应用开发、基于中断的开发、设备驱动程序的开发以及嵌入式图形界面的开发等,并且还安排了丰富的实验内容与课后实践,使读者能够边学边用,更快更好地掌握所学知识。   《嵌入式Linux应用程序开发标准教程(第2版)》可作为高等院校电子类、电气类、控制类等专业高年级本科生、研究生学习嵌入式Linux的教材,也可供希望转入嵌入式领域的科研和工程技术人员参考使用,还可作为嵌入式培训班的教材和参考书。 第1章 Linux快速入门 1.1 嵌入式Linux基础 1.1.1 Linux发展概述 1.1.2 Linux作为嵌入式操作系统的优势 1.1.3 Linux发行版本 1.1.4 如何学习Linux 1.2 Linux安装 1.2.1 基础概念 1.2.2 硬件需求 1.2.3 安装准备 1.3 Linux文件及文件系统 1.3.1 文件类型及文件属性 1.3.2 文件系统类型介绍 1.3.3 Linux目录结构 1.4 实验内容——安装Linux操作系统 1.5 本章小结 1.6 思考与练习 第2章 Linux基础命令 2.1 Linux常用命令 2.1.1 用户系统相关命令 2.1.2 文件相关命令 2.1.3 压缩打包相关命令 2.1.4 文件比较合并相关命令 2.1.5 网络相关命令 2.2 Linux启动过程详解 2.2.1 概述 2.2.2 内核引导阶段 2.2.3 init阶段 2.3 Linux系统服务 2.3.1 独立运行的服务 2.3.2 xinetd设定的服务 2.3.3 系统服务的其他相关命令 2.4 实验内容 2.4.1 在Linux下解压常见软件 2.4.2 定制Linux系统服务 2.5 本章小结 2.6 思考与练习 第3章 Linux下C编程基础 3.1 Linux下C语言编程概述 3.1.1 C语言简单回顾 3.1.2 Linux下C语言编程环境概述 3.2 常用编辑器 3.2.1 进入vi 3.2.2 初探emacs 3.3 gcc编译器 3.3.1 gcc编译流程解析 3.3.2 gcc编译选项分析 3.4 gdb调试器 3.4.1 gdb使用流程 3.4.2 gdb基本命令 3.5 make工程管理器 3.5.1 makefile基本结构 3.5.2 makefile变量 3.5.3 makefile规则 3.5.4 make管理器的使用 3.6 使用autotools 3.6.1 autotools使用流程 3.6.2 使用autotools所生成的makefile 3.7 实验内容 3.7.1 vi使用练习 3.7.2 用gdb调试程序的bug 3.7.3 编写包含多文件的makefile 3.7.4 使用autotools生成包含多文件的makefile 3.8 本章小结 3.9 思考与练习 第4章 嵌入式系统基础 4.1 嵌入式系统概述 4.1.1 嵌入式系统简介 4.1.2 嵌入式系统发展历史 4.1.3 嵌入式系统的特点 4.1.4 嵌入式系统的体系结构 4.1.5 几种主流嵌入式操作系统分析 4.2 ARM处理器硬件开发平台 4.2.1 ARM处理器简介 4.2.2 ARM体系结构简介 4.2.3 ARM9体系结构 4.2.4 S3C2410处理器详解 4.3 嵌入式软件开发流程 4.3.1 嵌入式系统开发概述 4.3.2 嵌入式软件开发概述 4.4 实验内容——使用JTAG烧写NandFlash 4.5 本章小结 4.6 思考与练习 第5章 嵌入式Linux开发环境的搭建 5.1 嵌入式开发环境的搭建 5.1.1 嵌入式交叉编译环境的搭建 5.1.2 超级终端和minicom配置及使用 5.1.3 下载映像到开发板 5.1.4 编译嵌入式Linux内核 5.1.5 Linux内核源码目录结构 5.1.6 制作文件系统 5.2 U-Boot移植 5.2.1 Bootloader介绍 5.2.2 U-Boot概述 5.2.3 U-Boot源码导读 5.2.4 U-Boot移植主要步骤 5.3 实验内容——创建Linux内核和文件系统 5.4 本章小结 5.5 思考与练习 第6章 文件I/O编程 6.1 Linux系统调用及用户编程接口(API) 6.1.1 系统调用 6.1.2 用户编程接口(API) 6.1.3 系统命令 6.2 Linux中文件及文件描述符概述 6.3 底层文件I/O操作 6.3.1 基本文件操作 6.3.2 文件锁 6.3.3 多路复用 6.4 嵌入式Linux串口应用编程 6.4.1 串口概述 6.4.2 串口设置详解 6.4.3 串口使用详解 6.5 标准I/O编程 6.5.1 基本操作 6.5.2 其他操作 6.6 实验内容 6.6.1 文件读写及上锁 6.6.2 多路复用式串口操作 6.7 本章小结 6.8 思考与练习 第7章 进程控制开发 7.1 Linux进程概述 7.1.1 进程的基本概念 7.1.2 Linux下的进程结构 7.1.3 Linux下进程的模式和类型 7.1.4 Linux下的进程管理 7.2 Linux进程控制编程 7.3 Linux守护进程 7.3.1 守护进程概述 7.3.2 编写守护进程 7.3.3 守护进程的出错处理 7.4 实验内容 7.4.1 编写多进程程序 7.4.2 编写守护进程 7.5 本章小结 7.6 思考与练习 第8章 进程间通信 8.1 Linux下进程间通信概述 8.2 管道 8.2.1 管道概述 8.2.2 管道系统调用 8.2.3 标准流管道 8.2.4 FIFO 8.3 信号 8.3.1 信号概述 8.3.2 信号发送与捕捉 8.3.3 信号的处理 8.4 信号量 8.4.1 信号量概述 8.4.2 信号量的应用 8.5 共享内存 8.5.1 共享内存概述 8.5.2 共享内存的应用 8.6 消息队列 8.6.1 消息队列概述 8.6.2 消息队列的应用 8.7 实验内容 8.7.1 管道通信实验 8.7.2 共享内存实验 8.8 本章小结 8.9 思考与练习 第9章 多线程编程 9.1 Linux线程概述 9.1.1 线程概述 9.1.2 线程机制的分类和特性 9.2 Linux线程编程 9.2.1 线程基本编程 9.2.2 线程之间的同步与互斥 9.2.3 线程属性 9.3 实验内容——“生产者消费者”实验 9.4 本章小结 9.5 思考与练习 第10章 嵌入式Linux网络编程 10.1 TCP/IP概述 10.1.1 OSI参考模型及TCP/IP参考模型 10.1.2 TCP/IP协议族 10.1.3 TCP和UDP 10.2 网络基础编程 10.2.1 socket概述 10.2.2 地址及顺序处理 10.2.3 socket基础编程 10.3 网络高级编程 10.4 实验内容——NTP协议实现 10.5 本章小结 10.6 思考与练习 第11章 嵌入式Linux设备驱动开发 11.1 设备驱动概述 11.1.1 设备驱动简介及驱动模块 11.1.2 设备分类 11.1.3 设备号 11.1.4 驱动层次结构 11.1.5 设备驱动程序与外界的接口 11.1.6 设备驱动程序的特点 11.2 字符设备驱动编程 11.3 GPIO驱动程序实例 11.3.1 GPIO工作原理 11.3.2 GPIO驱动程序 11.4 块设备驱动编程 11.5 中断编程 11.6 按键驱动程序实例 11.6.1 按键工作原理 11.6.2 按键驱动程序 11.6.3 按键驱动的测试程序 11.7 实验内容——test驱动 11.8 本章小结 11.9 思考与练习 第12章 Qt图形编程基础 12.1 嵌入式GUI简介 12.1.1 Qt/Embedded 12.1.2 MiniGUI 12.1.3 Microwindows、TinyX等 12.2 Qt/Embedded开发入门 12.2.1 Qt/Embedded介绍 12.2.2 Qt/Embedded信号和插槽机制 12.2.3 搭建Qt/Embedded开发环境 12.2.4 Qt/Embedded窗口部件 12.2.5 Qt/Embedded图形界面编程 12.2.6 Qt/Embedded对话框设计 12.3 实验内容——使用Qt编写“Hello,World”程序 12.4 本章小结
《真实世界的Python仪器监控:数据采集与控制系统自动化》是2013年 出版的图书,作者是休斯。ISBN 978-7-121-18659-2 本书主要帮助读者了解如何通过自行开发应用程序来监视或者控制仪器硬件。本书内容涵盖了从接线到建立接口,直到完成可用软件的整个过程。 本书适合需要进行仪表控制、机器人、数据采集、过程控制等相关工作的读者阅读参考。 目录编辑 第1 章仪器学概论........................................................ 1 数据采集.........................................................................2 控制输出................................................................................4 开环控制 ...............................................................5 闭环控制.........................................................6 顺序控制.............................................8 应用概观.............................................................9 电子测试仪器...........................................................9 实验室仪器..............................................................11 过程控制..........................................................12 小结............................................................................14 第2 章基本电子学...................................................... 15 电荷..............................................................15 电流..................................................................17 基础电路理论..........................................18 电路原理图.......................................................20 直流电路特性.................................................23 欧姆定律...........................................24 电流吸入与电流输出.................................26 再谈电阻 ......................................27 交流电路...............................................28 正弦波.......................................29 电容器.......................................................30 电感器.......................................................................34 其他波形:方波、斜波、三角波和脉冲.............................................37 接口.............................................................38 离散数字I/O.......................................................38 模拟I/O.................................................42 计数器与定时器.......................................46 脉宽调制........................................48 串行I/O.............................................49 并行I/O........................................51 小结.......................................................53 推荐阅读....................................................54 第3 章 Python 编程语言.............................................. 55 安装Python.................................................................56 Python 编程...............................................................57 Python 的命令行 ................................................57 命令行参数和环境.....................................58 Python 中的对象...........................................59 Python 中的数据类型..............................................60 表达式........................................................73 操作符..................................................73 语句........................................................79 字串..........................................................86 程序组织.............................................91 模块导入........................................101 加载并运行Python 程序.................................104 基础输入输出.........................................106 提示和技巧................................110 Python 开发工具................................112 编辑器和IDE...................................................112 调试器....................................115 小结...................................................115 推荐阅读.................................................115 第4 章 C 语言编程.................................................... 117 安装C 语言编程环境 ...................................117 使用C 语言开发软件........................118 一个简单的C 程序........................119 预处理指令....................................122 标准数据类型.....................................126 用户定义类型 ..................................127 操作符................................................127 表达式........................................136 语句.....................................................136 数组和指针..................................143 结构..............................................146 函式..........................................150 标准库...........................................151 编译C 程序...................................152 C 语言综述 ........................................156 C 开发工具............................................156 小结............................................................157 推荐阅读...........................................................157 第5 章 Python 扩展................................................... 159 用C 建立Python 扩展...................................160 Python 的C 扩展API.......................................161 扩展代码的模块组织 .....................................161 Python API 类型和函数.................................163 方法表.................................................163 方法标记......................................164 传递数据..................................................165 使用Python 的C 扩展API............................167 通用离散I/O API..............................................167 通用包装器示例..............................................169 调用扩展...................................................173 Python 的ctypes 外部函数库...............................177 用ctypes 载入外部DLL........................177 ctypes 中的基本数据类型................178 使用ctypes...................................................179 小结................................................................179 推荐阅读...............................................180 第6 章硬件:工具与耗材.......................................... 181 必备工具....................................................181 手工工具..........................................182 数字万用表..............................................184 焊接工具.........................................187 最好能有的工具..................................189 高级工具...................................................190 示波器..........................................190 逻辑分析仪.................................192 测试设备注意事项........................194 耗材................................................194 全新和二手 ..........................................195 小结...............................................196 推荐阅读..................................................196 第7 章物理接口........................................................ 197 连接器.............................................................197 DB 型连接器.........................................198 USB 连接器...........................................201 圆形连接器...............................................202 接线端子................................................203 接线...................................................205 连接器失效.........................................207 串行接口..................................................208 RS-232/EIA-232............................209 RS-485/EIA-485..............................................215 USB............................................................220 Windows 虚拟串口......................................224 GPIB/IEEE-488..............................................226 GPIB/IEEE-488 信号 .....................................226 GPIB 连接............................................228 GPIB 转接USB .............................................229 PC 总线接口设备.............................................230 基于总线接口的优缺点................................230 数据采集卡.............................................232 GPIB 接口卡...........................................232 旧并不代表差............................................................233 小结......................................................234 推荐阅读................................................234 第8 章开始干吧........................................................ 235 项目定义..............................................................236 需求驱动的设计 ..................................236 从需求开始..........................................237 工程目标.............................................238 需求......................................................239 为什么需要需求........................240 良好的需求...................................241 全景....................................................242 需求类型..........................................242 用例......................................................244 可追溯性 .....................................246 需求捕获.....................................248 设计软件....................................................248 软件设计说明.............................................249 SDD 的图景............................................249 伪代码...........................................253 分而治之................................253 处理错误和故障........................255 功能测试.........................................256 为需求而测.................................257 测试用例................................................257 测试错误处理............................................260 回归测试..............................................261 进展追踪................................................261 实施............................................................262 代码风格................................................262 组织你的代码 ..................................264 代码复查.......................................265 单元测试................................................268 连接到硬件...............................................277 软件文档化.........................................278 版本控制..............................................281 缺陷跟踪..........................................281 用户文档 ................................................................282 小结..........................................................283 推荐阅读 ...................................................283 第9 章控制系统概念................................................. 285 基础控制系统理论......................................286 线性控制系统......................................286 非线性控制系统......................................288 顺序控制系统.............................................289 术语和符号.......................................................290 控制系统框图..........................................292 传递函数......................................................293 时间和频率...........................................293 控制系统类型........................................................298 开环控制.........................................................299 闭环控制...............................................299 非线性控制:继电器控制器....................................... 306 顺序控制系统.............................................308 比例、比例积分、比例积分微分控制..........................................................312 混合控制系统...........................................317 用Python 实现控制系统............................................318 线性比例控制器..........................................318 开关式控制器..................................................319 简单PID 控制器.................................................320 小结................................................................................324 推荐阅读.................................................324 第10 章构建并使用仿真器........................................ 327 什么是仿真.........................................328 低保真和高保真................................................................329 模拟错误和故障.......................................................330 使用Python 创建一个仿真器.............................................333 程序包和模块的组织......................................334 数据输入/ 输出仿真器 ......................................334 交流电源控制器仿真............................................349 串行终端仿真器......................................................358 使用终端仿真器脚本.................................................359 显示仿真数据......................................................361 gnuplot ............................................361 使用gnuplot.....................................................363 使用gnuplot 将仿真器数据图表化 ............................................. 366 创建你自己的仿真器................................................369 确认仿真器的必要性........................................369 仿真的范围...........................................370 时间和精力.................................................371 小结...............................................................371 推荐阅读..................................................371 第11 章仪器数据I/O................................................ 373 数据I/O :接口软件......................................373 接口格式与协议......................................................374 Python 接口支持的工具包 ............................................383 Windows 平台上的替代品.........................................389 在Linux 下使用基于总线的硬件I/O 设备.............................. 389 数据I/O :数据采集与写入...................................391 基本数据I/O...........................................391 阻塞和非阻塞调用................................................................398 数据I/O 方法.......................................................399 数据I/O 错误处理...............................................402 处理不一致的数据.................................................407 小结..................................................................411 推荐阅读...........................................................412 第12 章读写数据文件............................................... 413 ASCII 数据文件..................................................414 原始的ASCII 字符集................................414 Python 的ASCII 字符操作方法............................. 416 读写ASCII 平面文件 .......................................418 配置数据...............................................425 AutoConvert。py 模块——自动转换字符串 .................................................. 427 FileUtils。py 模块——ASCII 数据文件I/O 工具 ........................................... 430 二进制数据文件..................................................440 平面二进制数据文件............................................440 用Python 处理二进制数据.............................................. 442 图像数据................................................453 小结 ..................................................................462 推荐阅读............................................................................462 第13 章用户界面 ......................................................465 文本界面...........................................................465 控制台...................................................465 ANSI 显示控制台技术................................478 Python 和curses..........................................494 用不用curse 是个问题吗 .....................................502 图形用户界面.................................................502 图形用户界面的历史和概念..................................... 503 在Python 中使用GUI............................504 TkInter...................................................................508 wxPython .................................................514 小结..........................................................522 推荐阅读........................................................523 第14 章实例............................................................ 525 串行接口........................................................525 简易DMM 数据获取..................................................526 串行接口的离散或模拟数据I/O 设备 ....................................... 531 串行接口及对速度的考虑.........................................................535 USB 实例:LabJack U3.....................................................536 LabJack 连接....................................................537 安装LabJack 设备...........................................538 LabJack 与Python...................................539 小结.............................................................546 推荐阅读...........................................................547 附录A 自由和开源软件资源 ....................................... 549 附录B 仪器资源 ........................................................ 553 索引........................................................................... 557
第1篇 Linux下C语言基础 第1章 Linux简介 1.1 GNU简介 1.2 Linux简介 1.2.1 Linux发展史 1.2.2 Linux发行版 1.2.3 Linux内核版本 1.2.4 Linux与UNIX的关系 1.2.5 Linux在服务器方面的发展 1.2.6 Linux在嵌入式系统方面的发展 1.2.7 Linux在桌面系统方面的发展 1.3 Linux环境下的其他编程语言 1.3.1 C++ 1.3.2 Java 1.3.3 Perl 1.3.4 Python 1.3.5 Ruby 1.3.6 PHP 第2章 控制结构 2.1 goto语句 2.1.1 C语言中的无条件跳转 2.1.2 使用goto语句进行出错处理 2.1.3 出错处理的一般模型 2.2 C语言中的分支结构 2.2.1 分支结构的翻译 2.2.2 使用goto语句实现分支结构 2.3 短路计算 2.3.1 短路计算 2.3.2 &&运算的短路计算 2.3.3 ||运算的短路计算 2.4 C语言中的循环结构 2.4.1 while循环 2.4.2 do…while循环 2.4.3 for循环 2.5 switch语句 2.5.1 switch语句的应用 2.5.2 使用goto语句实现switch语句 2.6 优化控制结构 2.6.1 表达式优化——使用替换程序中的乘除法 2.6.2  表达式优化——常量折叠 2.6.3 表达式优化——使用数学公式 2.6.4 表达式优化——存储问题 2.6.5 分支优化——改变判断顺序 2.6.6 分支优化——使用switch语句 2.6.7 循环优化——一次性计算 第3章 C语言中的函数 3.1 函数的本质 3.2 变量的作用域和生命期 3.2.1 全局变量 3.2.2 局部变量 3.3 变量的初始值 3.3.1 全局变量的初始值 3.3.2 局部变量的初始值 3.4 与函数有关的优化 3.4.1 函数调用与程序优化 3.4.2 变量存储优化 3.5 编写多文件程序——变量的存储类别 3.5.1 存储类别 3.5.2 static变量的作用——改变变量的生命期 3.5.3 static变量的作用——实现封装和模块化设计 3.6 编写多文件的程序——链接的作用 3.6.1 链接多个文件 3.6.2 链接时符号解析规则 3.6.3 链接规则的应用 3.7 可变参数 3.7.1 可变参数的概念 3.7.2 实现一个简单的可变参数的函数 3.7.3 可变参数实例 3.7.4 关于printf函数的疑问——缺少整型参数 3.7.5 关于printf函数的疑问——缺少字符串地址参数 第4章 C语言中的指针与字符串 4.1 sizeof运算符 4.1.1 sizeof运算符的应用——得到内置类型的大小 4.1.2 sizeof运算符的应用——得到复合类型的大小 4.2 指针的应用 4.2.1 指针与别名陷阱 4.2.2 数组的指针 4.2.3 指针的指针 4.2.4 指针与参数传递 4.2.5 指针类型的意义 4.2.6 void*型指针 4.3 函数的指针 4.3.1 C语言中的函数指针 4.3.2 函数指针的应用——回调函数 4.3.3 函数指针数组 4.4 字符串 4.4.1 字符串与字符数组 4.4.2 字符串与指针 4.4.3 限定修饰符const 4.4.4 const关键字修饰指针——在指针定义之前 4.4.5 const关键字修饰指针——在指针定义之中 4.4.6 const关键字修饰指针——在指针定义之前和定义之中 4.4.7 使用const关键字的意义 第5章 C语言的高级技术 第2篇 C语言开发环境 第6章 vi与vim编辑器 第7章 gcc编译器 第8章 makefile 第9章 gdb 第3篇 Linux进程操作 第10章 进程环境 第11章 进程控制 第12章 时间和日历历程 第13章 信号及信号处理 第14章 进程间通信 第15章 线程 第4篇 Linux文件操作 第17章 文件I/O 第18章 文件管理 第19章 目录操作 第20章 特殊文件 第21章 基于流的I/O 第5篇 Linux网络编程 第22章 TCP和UDP协议 第23章 网络编程基础 第24章 网络编程进阶 第25章 网络编程实例——实现文件传输程序 第26章 网络编程实例——简单的Web服务器 第6篇 shell脚本知识 第27章 shell脚本基础 第28章 shell脚本中的控制结构 844
译者序 作者简介 技术审校人员简介 第1章 前言 1.1 本书的内容 1.2 本书的组织方式 1.3 致谢 第1部分 Objective-C语言 第2章 Objective-C程序设计 2.1 编译并运行程序 2.1.1 使用Xcode 2.1.2 使用Terminal 2.2 解释第一个程序 2.3 显示变量的值 2.4 小结 2.5 练习 第3章 类、对象和方法 3.1 到底什么是对象 3.2 实例和方法 3.3 用于处理分数的Objective-C类 3.4 @interface部分 3.4.1 选择名称 3.4.2 实例变量 3.4.3 类和实例方法 3.5 @implementation部分 3.6 Program部分 3.7 实例变量的访问以及数据封装 3.8 小结 3.9 练习 第4章 数据类型和表达式 4.1 数据类型和常量 4.1.1 int类型 4.1.2 float类型 4.1.3 double类型 4.1.4 char类型 4.1.5 限定词:long、long long、short、unsigned及signed 4.1.6 id类型 4.2 算术表达式 4.2.1 运算符的优先级 4.2.2 整数运算和一元负号运算符 4.2.3 模运算符 4.2.4 整型值和浮点值的相互转换 4.2.5 类型转换运算符 4.3 赋值运算符 4.4 计算器类 4.5 位运算符 4.5.1 按位与运算符 4.5.2 按位或运算符 4.5.3 按位异或运算符 4.5.4 一次求反运算符 4.5.5 向左移位运算符 4.5.6 向右移位运算符 4.6 类型:_Bool、_Complex和_Imaginary 4.7 练习 第5章 循环结构 5.1 for语句 5.1.1 键盘输入 5.1.2 嵌套的for循环 5.1.3 for循环的变形 5.2 while语句 5.3 do语句 5.4 break语句 5.5 continue语句 5.6 小结 5.7 练习 第6章 选择结构 6.1 if语句 6.1.1 if-else结构 6.1.2 复合条件测试 6.1.3 嵌套的if语句 6.1.4 else if结构 6.2 switch语句 6.3 Boolean变量 6.4 条件运算符 6.5 练习 第7章 类 7.1 分离接口和实现文件 7.2 合成存取器方法 7.3 使用点运算符访问属性 7.4 具有多个参数的方法 7.4.1 不带参数名的方法 7.4.2 关于分数的操作 7.5 局部变量 7.5.1 方法的参数 7.5.2 static关键字 7.6 self关键字 7.7 在方法中分配和返回对象 7.8 练习.. 第8章 继承 8.1 一切从根类开始 8.2 通过继承扩展—添加新方法 8.2.1 Point类和内存分配 8.2.2 @class指令 8.2.3 具有对象的类 8.3 重载方法 8.3.1 择哪个方法 8.3.2 重载dealloc方法和关键字super 8.4 通过继承扩展:添加新的实例变量 8.5 抽象类 8.6 练习 第9章 多态、动态类型和动态绑定 9.1 多态:相同的名称,不同的类 9.2 动态绑定和id类型 9.3 编译时和运行时检查 9.4 id数据类型与静态类型 9.5 有关类的问题 9.6 使用@try处理异常 9.7 练习 第10章 变量和数据类型 10.1 类的初始化 10.2 作用域回顾 10.2.1 控制实例变量作用域的指令 10.2.2 外部变量 10.2.3 静态变量 10.3 存储类说明符 10.3.1 auto 10.3.2 const 10.3.3 volatile 10.4 枚举数据类型 10.5 typedef语句 10.6 数据类型转换 10.6.1 转换规则 10.6.2 符号扩展 10.7 练习 第11章 分类和协议 11.1 分类 11.2 协议 11.3 合成对象 11.4 练习 第12章 预处理程序 12.1 #define语句 12.1.1 更高级的定义类型 12.1.2 #运算符 12.1.3 ##运算符 12.2 #import语句 12.3 条件编译 12.3.1 #ifdef、#endif、#else和#ifndef语句 12.3.2 #if和#elif预处理程序语句 12.3.3 #undef语句 12.4 练习 第13章 基本的C语言特性 13.1 数组 13.1.1 数组元素的初始化 13.1.2 字符数组 13.1.3 多维数组 13.2 函数 13.2.1 参数和局部变量 13.2.2 函数的返回结果 13.2.3 函数、方法和数组 13.3 结构 13.3.1 结构的初始化 13.3.2 结构数组 13.3.3 结构中的结构 13.3.4 关于结构的补充细节 13.3.5 不要忘记面向对象编程思想 13.4 指针 13.4.1 指针和结构 13.4.2 指针、方法和函数 13.4.3 指针和数组 13.4.4 指针运算 13.4.5 指针和内存地址 13.5 联合 13.6 它们不是对象 13.7 其他语言特性 13.7.1 Compound Literal 13.7.2 goto语句 13.7.3 空语句 13.7.4 逗号运算符 13.7.5 sizeof运算符 13.7.6 命令行参数 13.8 工作原理 事实#1:实例变量存储在结构中 事实#2:对象变量实际上是指针 事实#3:方法是函数,而消息表达式是 函数调用 事实#4:id类型是通用指针类型 13.9 练习 第二部分 Foundation框架 第14章 Foundation框架简介 第15章 数字、字符串和集合 15.1 数字对象 15.2 字符串对象 15.2.1 NSLog函数 15.2.2 可变对象与不可变对象 15.2.3 可变字符串 15.2.4 所有对象到哪里去了 15.3 数组对象 15.4 同步AddressCard方法 15.4.1 快速枚举 15.4.2 数组排序 15.5 词典对象 15.6 集合对象 15.7 练习 第16章 使用文件 16.1 管理文件和目录:NSFileManager 16.1.1 使用NSData类 16.1.2 使用目录 16.1.3 枚举目录中的内容 16.2 使用路径:NSPathUtilities.h 16.2.1 常用的路径处理方法 16.2.2 复制文件和使用NSProcessInfo类 16.3 基本的文件操作:NSFileHandle 16.4 练习 第17章 内存管理 17.1 自动释放池 17.2 引用计数 17.2.1 引用计数和字符串 17.2.2 引用计数与实例变量 17.3 自动释放池示例 17.4 内存管理规则摘要 17.5 垃圾回收 17.6 练习 第18章 复制对象 18.1 copy和mutableCopy方法 18.2 浅复制与深复制 18.3 实现协议 18.4 用赋值方法和取值方法复制对象 18.5 练习 第19章 归档 19.1 使用XML属性列表进行归档 19.2 使用NSKeyedArchiver归档 19.3 编码方法和解码方法 19.4 使用NSData创建自定义档案 19.5 使用归档程序复制对象 19.6 练习 第三部分 Cocoa和iPhone SDK 第20章 Cocoa简介 20.1 框架层 20.2 接触Cocoa 第21章 编写iPhone应用程序 21.1 iPhone SDK 21.2 第一个iPhone应用程序 21.2.1 创建新的iPhone应用程序项目 21.2.2 输入代码 21.2.3 设计界面 21.3 iPhone分数计算器 21.3.1 启动新的Fraction_Calculator项目 21.3.2 定义视图控制器 21.3.3 Fraction类 21.3.4 处理分数的Calculator类 21.3.5 设计UI 21.4 小结 21.5 练习 第四部分 附录 附录A 术语表 附录B Objective-C 2.0语言概览 附录C 地址簿源代码 附录D 资源
I2C控制器驱动程序是用于与I2C设备进行通信的软件模块。它允许应用程序通过I2C总线与外部设备进行数据交换。根据引用和引用的描述,I2C控制器驱动程序可以分为两种模式:用户模式设备驱动和普通设备驱动。 用户模式设备驱动是一种依赖于i2c-dev驱动的驱动程序。它要求应用程序员具备一定的硬件知识,了解I2C设备的时序、地址等信息。使用用户模式设备驱动时,应用程序员需要直接调用I2C控制器来实现设备的读写操作。 普通设备驱动是一种更简单的驱动程序,应用程序员可以像读写文件一样使用它。普通设备驱动隐藏了底层I2C控制器的细节,提供了一组简单的API应用程序使用。应用程序员不需要了解I2C设备的底层细节,只需要调用相应的API来进行数据交换。 下面是一个示例,演示了如何使用普通设备驱动程序进行I2C设备的读写操作: ```c #include <linux/i2c-dev.h> #include <fcntl.h> #include <unistd.h> int main() { int file; char *filename = "/dev/i2c-0"; // I2C设备文件路径 int addr = 0x50; // I2C设备地址 // 打开I2C设备文件 if ((file = open(filename, O_RDWR)) < 0) { printf("Failed to open the bus.\n"); return 1; } // 设置I2C设备地址 if (ioctl(file, I2C_SLAVE, addr) < 0) { printf("Failed to acquire bus access and/or talk to slave.\n"); return 1; } // 向I2C设备写入数据 char buffer[2] = {0x01, 0x02}; if (write(file, buffer, 2) != 2) { printf("Failed to write to the I2C device.\n"); return 1; } // 从I2C设备读取数据 char data[2]; if (read(file, data, 2) != 2) { printf("Failed to read from the I2C device.\n"); return 1; } // 关闭I2C设备文件 close(file); return 0; } ``` 这是一个使用C语言编写的简单示例,演示了如何使用普通设备驱动程序进行I2C设备的读写操作。在示例中,我们首先打开I2C设备文件,然后设置I2C设备地址。接下来,我们向I2C设备写入数据,并从I2C设备读取数据。最后,我们关闭I2C设备文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值