后备查阅 adb查询android版本:adb shell getprop ro.build.version.releaseadb查询android api版本:adb shell getprop ro.build.version.sdk
USB URB的status及其代表的意义 USB URB的status及其代表的意义平时在处理客户问题时,经常需要分析出现问题时抓取的usbmon log,这个log中有一个字段非常重要:URB Status word,这个字段就是struct urb结构体中的status成员变量。通过这个status的值,可以分析出模块端和HOST端usb的一些状态,有利于定位到问题点。Linux内核中对该成员变量的注释如下:表明该...
数据结构优秀博文整理 本文记录下学习数据结构过程中在网络上看到的比较好的Blog,方便以后复习查阅,在此感谢这些博主~^o^~链表篇Linux内核链表——看这一篇文章就够了 作者:Yang_Guang...
《C语言进阶剖析》课程目录 《C语言进阶剖析》课程目录第1课 - 基本数据类型第2课 - 有符号数与无符号数第3课 - 浮点数的秘密第4课 - 类型转换第5课 - 变量属性第6课 - 分支语句第7课 - 循环语句第8课 - goto和void分析第9课 - const 和 volatile分析第10课 - struct和union分析第...
第22课 - 条件编译使用分析 第22课 - 条件编译使用分析这节课我们介绍如何使用C语言中的条件编译。市面上的电子产品一般有低配版、中配版、高配版,那相应的软件也要开发三个版本吗?显然不是这样的,我们一般在同一套代码中使用条件编译区分不同的版本。1.基本概念(1)c 程序的编译一般经过如下四个过程 条件编译是在预处理阶段由预处理器完成的,预处理器根据条件编译指令选择使用哪些代...
Linux系统编程之标准I/O 1、标准I/O介绍2、标准I/O的常用函数2.1 文件的打开和关闭// 文件的打开// 返回值:成功返回FILE *类型的指针,失败返回NULLFILE *fopen(const char *path, const char *mode);参数mode:mode description r ① 以只读的方式打开文件 ② 若文件不存...
详解usbmon抓取的log各字段的含义 详解 usbmon 抓取的 log 各字段的含义在上篇文章中,我们已经介绍了如何在 linux 下使用 usbmon 抓取 usb 总线上数据的方法。(https://www.cnblogs.com/shiwenjie/p/8467057.html)数据抓取到了,但是放眼一看,密密麻麻的全是数字,它们代表什么含义呢?本文将为你揭晓答案。1. 预备知识 在解读 usbmon 抓取的...
第7课 - 线性表的顺序存储结构 第7课 - 线性表的顺序存储结构1. 顺序存储定义 线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。 根据上面的定义,在 C 语言中可以用一维数组来实现顺序存储结构:#define MAXSIZE xx /* xx为存储空间初始分配量 */typedef int ElemType; /* El...
第5课 - 线性表的本质 第5课 - 线性表的本质数据结构是为了解决生活中的实际问题而存在的,那生活中与线性表相对应的例子有什么呢?幼儿园中就有一个例子,在老师安排小朋友活动时,会将小朋友组织成下面的站队形式,这个就是线性表。 1. 线性表的定义 (1)线性表是0个或多个数据元素的集合 (2)线性表中的数据元素之间是有顺序的,这一点非常重要 (3)线性表中的数据元素的个...
第31课 - 老生常谈的两个宏 第31课 - Linux老生常谈的两个宏1. Linux 内核中常用的两个宏定义1.1 offsetof 宏在 include/linux/stddef.h 头文件中定义TYPE 是结构体类型、MEMBER 是结构体中一个成员的成员名作用:offsetof 宏返回的是 MEMBER 成员相对于整个结构体变量的首地址的偏移量,类型是 size_t(unsigned ...
第0课 - 搭建开发环境之安装QT 第0课 - 搭建开发环境之安装Qt1. 课程学习的原材料 — Visual Studio 2010 — Qt SDK 4.7.4 — Qt Creator 2.4.12. Visual Studio 2010 (1)用于学习 Windows 上 GUI 程序设计的原理 (2)体会使用 C/C++ 编写 GUI 窗口应用程序 (3)展现 ...
第5课 - 主引导程序的扩展(下) 1. 在 FAT12 根目录中查找目标文件 在前面课程的学习中,我们知道主引导程序有一个 512 字节的限制,如何突破这种限制呢?我们想到的办法是:再写一个程序(LOADER)放到存储介质中,在主引导程序中将该程序加载到内存中,并将控制权转交给该程序(jump)。 那如何找到存储介质中的程序(LOADER)呢?答案就是需要借助一个文件系统(FAT12),将该程序放到软盘中(软盘的...
第4课 - 主引导程序的扩展(上) 1. 主引导程序的限制 在前面的课程中讲到,主引导程序的代码量不能超过 512 字节!! 那这 512 个字节存储的主引导程序可以完成操作系统的功能吗?答案显然是否定的。 因此主引导程序最大只能是 512 字节就成为了一种限制,那如何突破这种限制呢?2. 突破限制的思路 主引导程序完成以下功能: (1)主引导程序首先完成最基本的初始化工作 (2...
第3课 - 调试环境的搭建 在上节课中,我们编写的主引导程序代码量很小,实现的功能也很简单,就是在屏幕上打印一串字符 "Hello, DTOS"。可是当主引导程序代码量变得很大,功能很复杂的时候,我们编写的主引导程序代码就有可能出现 bug ,那么我们如何调试主引导程序的代码呢?1. Bochs(另一款优秀的虚拟机软件) bochs官网:http://bochs.sourceforge.net/ (1)...
第2课 - Hello, DTOS! 1. 主引导程序 主引导程序是软件还是固件?如果是软件,那么由谁开发?如何开发? (1)上一节说到了固件和软件的区别。由于主引导程序没有在出厂前固化到硬件中,因此它是软件,由开发操作系统的程序员开发,隶属于操作系统代码的一部分 (2)从物理意义上看,主引导程序是存储在主引导区(MBR)中的一段有效代码 (3)从功能上看,主引导程序是启动操作系统内核的桥梁,由汇编程序写...
第1课 - 进阶操作系统 1. 什么是操作系统? (1)Windows、UNIX、Linux、Mac OS、Android、IOS ... (2)操作系统是直接运行于硬件之上的计算机程序(操作系统的本质) (3)操作系统用于管理和控制计算机的硬件和软件资源 (从用户的角度) (4)操作系统为用户软件的开发提供必要的服务和接口 (从程序员的角度) ......2. 现代计算...
使用 usbmon 抓取 usb 总线上的数据 使用 usbmon 抓取 usb 总线上的数据usbmon即 usb monitor,是 linux 内置的 usb 抓包工具。usbmon 本质是一个内核模块,在我的 ubuntu14.0 4中,模块的位置:/lib/modules/4.4.0-31-generic/kernel/drivers/usb/mon/usbmon.ko。1、检测内核是否支持 debugfs 文件系...
第19课 - 路径搜索的综合示例 第19课 - 路径搜索的综合示例1. 需求分析 (1)工程项目中不希望源码文件夹在编译时被改动(只读文件夹) (2)在编译时自动创建文件夹(build)用于存放编译结果 (3)编译过程中能够自动搜索需要的文件 (4)makefile 易于扩展,能够复用于相同类型的项目 (5)支持调试版本的编译选项2. 项目类型分析 3. 工具原料 (...
第18课 - make 中的路径搜索(下) 第18课 - make 中的路径搜索(下)1. 问题一 当 VPATH 和 vpath 同时出现,make 会如何处理? 工程项目的目录结构如下图所示,src1 和 src2 中都包含了 func.c 文件,如果在 makefile 中使用 VPATH 指定了 src1 ,使用 vpath 指定了 src2,当VPATH 和 vpath 同时存在时,make 会做出怎样...
第17课 - make 中的路径搜索(上) 第17课 - make 中的路径搜索(上)1. 问题 在以往的 make 学习中,我们使用到的 .c 文件和 .h 文件都与 makefile 处在同一个路径。在实际的工程项目中,所有的源文件和头文件都放在同一个文件夹中吗? 答案毋庸置疑是否定的,在实际的工程项目中,源文件和头文件的数量可能是成千上万的,必须采用一定的目录结构进行管理,一般按照模块的功能进行分类管理。...
第15课 - make的隐式规则(上) 第15课 - make的隐式规则(上)1. 问题 如果把同一个目标的命令拆分的写到不同地方,会发生什么? 执行make all 这个实验表明了:如果同一个目标的命令拆分的写到不同地方,那么 make 会覆盖之前的目标对应的命令,使用最新出现的目标对应的命令。 makefile 中出现同名目标时 — 依赖:所有的...
第11课 - 自动生成依赖关系(上) 第11课 - 自动生成依赖关系(上)1. 值得思考的问题 (1)目标文件(.o)是否只依赖于源文件(.c)? (2)编译器如何编译源文件和头文件? 2. 编译行为带来的缺陷 (1)预处理器将头文件中的代码直接插入源文件 (2)编译器只通过预处理后的源文件产生目标文件 综合上面两点,规则中以源文件为依赖,命令可能无法执行。3. 下面的 mak...
第6课 - 开发中的辅助工具 第6课 - 开发中的辅助工具1. 什么是软件开发环境? (1)构建环境:代码编写、程序编译、版本控制(可选) 初级程序开发者往往把软件开发等同于 代码编写 + 程序编译,这是狭隘且错误的;个人开发只要及时备份即可,团队开发需要版本控制的协助。 (2)调试环境:在开发软件时,不可能一次编写成功,肯定会出现bug,这就需要调试工具。在软件开发中,调试工具是用于...
第32课 - 初探C++ 标准库 第32课 - 初探C++ 标准库1. 有趣的重载 操作符 << 的原生意义是按位左移,例: 1 << 2 ; 其意义是将整数 1 按位左移 2 位,即: 0000 0001 -> 0000 0100 重载左移操作符,将变量或常量左移到一个对象中! 1 #include <stdio.h> 2 ...
第30课 - 操作符重载的概念 第30课 - 操作符重载的概念1. 需要解决的问题 下面的复数解决方案是否可行? 不可行,+ 操作符只提供对C++ 基本数据类型的运算,不支持类的相加运算。 1 #include <stdio.h> 2 3 class Complex 4 { 5 int a; 6 int b; 7 public:...
第28课 - 友元的尴尬能力 第28课 - 友元的尴尬能力1. 什么是友元? (1)友元是C++ 中的一种关系 (2)友元关系发生在函数与类之间或者类与类之间 (3)友元关系是单向的,不能传递2. 友元的用法 (1)在类中以 friend 关键字声明友元 (2)类的友元可以是其它类或者具体函数 (3)友元不是类的一部分 (4)友元不受类中访问级别的限制 (5)友...
第27课 - 二阶构造模式 第27课 - 二阶构造模式1. 关于构造函数 (1)类的构造函数用于对象的初始化 (2)构造函数与类同名并且没有返回值 (3)构造函数在对象定义时自动被调用2. 关于构造函数的一些疑问? (1)如何判断构造函数的执行结果? ==> 在类中添加一个标志(bool),放在构造函数的末尾(判断函数体是否全部执行),通过功能成员函数判断标志状态...
第26课 - 类的静态成员函数 第26课 - 类的静态成员函数续上一篇博客:类的静态成员变量......1. 未完成的需求 (1)统计在程序运行期间某个类的对象数目 √ 已完成 (2)保证程序的安全性(不能使用全局变量) √ 已完成 (3)随时可以获取当前对象的数目 × 未完成 1 #include ...
第25课 - 类的静态成员变量 第25课 - 类的静态成员变量1. 成员变量的回顾 (1)通过对象名能够访问 public 成员变量 (2)每个对象的成员变量都是专属的,成员变量不能在对象之间共享 这么看,如果多个对象想操作同一个数据,从目前来看只能使用全局变量(每个对象都可以操作全局作用域的全局变量),但是这样存在安全隐患,在现代软件开发中不推荐这种方式。 那么,有没有其它更好的方式呢?下...
GDB调试工具 GDB调试工具 Mascot:射水鱼GDB官网: https://www.gnu.org/software/gdb/ GDB适用的编程语言:Ada / C / C++ / objective-c / Pascal 等。GDB的工作方式: 本地调试和远程调试。目前release的...
第21课 - 对象的构造顺序 第21课 - 对象的构造顺序0. 问题 C++ 中的类可以定义多个对象,那么对象构造的顺序是怎样的?1. 对象的构造顺序1.1 局部对象的构造顺序 当程序执行流到达对象的定义语句时进行构造1.2 堆对象的构造顺序 当程序执行流到达 new 语句时创建对象 使用 new 创建对象将自动触发构造函数的调用1.3 全局对象的构造顺序2. 小...
第20课 - 初始化列表的使用 第20课 - 初始化列表的使用0. 问题 类中是否可以定义 const 成员? 下面的类定义是否合法?如果合法,ci 的值是什么,存储在哪里?1 class Test2 {3 private:4 const int ci;5 public:6 int getCI() { return ci;}7 }; 1 #...
第19课 - 对象的构造(下) 第19课 - 对象的构造(下)1. 特殊的构造函数 (1)无参构造函数 当类中没有定义构造函数时,编译器默认提供一个无参构造函数,并且其函数体为空。 (2)拷贝构造函数 当类中没有定义拷贝构造函数时,编译器默认提供一个拷贝构造函数,简单的进行成员变量的值复制。 1 #include <stdio.h> 2 3 clas...