自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Roger's Blogs

砥砺前行

  • 博客(14)
  • 资源 (1)
  • 收藏
  • 关注

原创 Linux驱动之驱动的基本概念

硬件是计算机系统的底层基础,代码最终会转化为硬件上的组合逻辑与时序逻辑;应用软件调用接口完成具体的任务. 软件工程师在使用接口函数时不应该考虑接口具体是怎么实现的.驱动与底层硬件直接打交道, 按照硬件设备的具体工作方式. 读写设备的寄存器, 完成设备的轮询, 中断处理, DMA通信, 进行物理内存向虚拟内存的映射实现各种接口函数, 充当了硬件与应用软件中间的桥梁.驱动工程师负责编写驱动程序...

2018-04-24 22:09:52 1373

原创 C语言之预处理器

预处理器在源代码编译前对其进行一些文本性质的操作, 主要任务包括删除注释, 插入被 #include 指令包含的文件的内容, 定义和替换由 #define 指令定义的符号以及确定代码的部分内容是否应该根据一些条件编译指令进行编译.#define指令 #define 指令主要有两种用法: 定义常量: #define name stuff 当源代码中出现 name 符号时都会被原封不动的替...

2018-04-21 21:16:37 2559 1

原创 C语言之指向函数的指针

这里介绍了关于指向一维数组的指针, 相关内容可以参考该文. 本文将简要介绍指向函数的指针.如何声明一个指向函数的指针?void print(int num); // 声明函数void (*funptr)(int) = print; // 声明指向函数的指针, 该函数接受一个int参数, 返回void, 并用print函数的地址初始化函数指针类型的通用形式: 返回类型 (...

2018-04-20 19:17:19 10127 7

原创 C语言之指向一维数组的指针

int array[5] = {1, 2, 3, 4, 5}; // 定义数组int *intptr = array; // 定义指向数组元素的指针int (*arrayptr)[5] = &array; // 定义指向数组的指针上述三条语句分别定义了数组, 指向数组元素的指针和指向数组的指针. 内存情况如图示: 对于指向数组元素的指针很好理解, 但是怎样理解 指向数组的指针...

2018-04-17 11:41:53 57594 6

原创 如何自定义对象字节对齐方式?

C语言中, 每个完整的对象都具有字节对齐要求. 比如基本数据类型一般参照类型本身大小字节对齐, char类型对象按1字节对齐, short类型按2字节对齐等. C11中提供了 查看 和 自定义 对象字节对齐方式的方法. 关于字节对齐见这里查看对象字节对齐方式: _Alignof 操作符用法: _Alignof(typename) 返回size_of类型的typename类型对象的对齐方式...

2018-04-16 16:13:31 714

原创 字节对齐

一般计算机架构中都会有地址总线和数据总线, 地址总线一般决定了机器可访问内存的大小, 比如8086PC有20条地址总线, 可访问的内存为2的20次方共1048576个字节(1MB); 数据总线则决定了机器单次读写可处理数据的大小, 8086CPU有16条数据总线, 每次可传送给CPU的数据大小最多为16位(2Byte).通常我们所说的 “计算机是64位的” “32位的系统” 等指的是机器的数据...

2018-04-16 13:17:48 439

原创 C语言之联合与变体记录

结构体是将一个对象(内存空间)解释为C语言中多种类型的综合. 联合 是将一个对象(内存空间)在不同时候解释为C语言中不同的类型.// 联合union { float f; int i;} fi;当使用 fi.f 时, fi所占内存中的内容将被解释为一个float数; 当使用 fi.i 时, fi所占内存中的内容将被解释为一个int类型. 注意: 如果联合的各个成员具...

2018-04-14 15:32:43 1042

原创 C语言之位段

结构体可以用来实现 位段, 在C语言中多数情况下按照一个字节的整数倍为单位处理数据, 也就是必须是以 8位 为单位处理数据, 比如一个char为8位, 一个int可能为32位. 位段使我们可以按 “任意” 位处理数据, 比如7位, 6位等. 位段的声明如下:// 位段声明// [类型] [标识符] : [位宽表达式]struct CHAR { int32_t ch ...

2018-04-14 14:11:24 2475

原创 C语言之结构的自引用与互引用

自引用 在一个结构内部包含一个类型为该结构本身的成员称为结构的自引用. 比如:// 结构的自引用struct self_ref { int a; struct self_ref b; char c;};这种类型的结构自引用是 非法 的, 成员b中又会包含一个self_ref结构, 如此递归下去永无止尽. 下面这种声明却是合法的:// 另一种自引用...

2018-04-14 13:32:35 1421

原创 C语言之数组名

我们知道数组名实际上是一个指针. 问题的关键是数组名指向的内容是什么.对于一维数组来说, 数组名是指向数组第一个元素的内存空间的指针常量. 比如: int array[10]; 数组名array代表的就是array[0]的地址. array+1 代表的是array[1]的地址, 也就是说 array的步进间隔为一个int变量所占的内存空间.对于二维数组来说, 数组名是指向数组第一维元素的...

2018-04-14 11:47:21 802 1

原创 C语言之复杂结构体的访问

任意一个可以在结构外部声明的变量都可以作为结构的成员. 包括数组, 指针, 其他结构等. 对于结构成员的访问可以使用 点操作符(.) 和 箭头操作符(->) 完成. 本文举例介绍复杂结构体成员的访问. 结构体声明如下:// 创建新的结构类型Tagtypedef struct{ int num; short date[3];} Tag;// 创建新的结构类型Ms...

2018-04-13 23:43:22 2104 3

原创 C语言之数组下标引用与间接引用

数组元素的访问方式有下标引用和间接访问两种. 除了优先级之外, 下标引用和间接访问完全相同. arrayname[subscript] = *(arrayname + (subscript)) 例如:int arrayname[10];int *arrayptr = arrayname + 2;arrayptr = arrayname+2 = &arrayname[2]...

2018-04-13 21:47:24 3787

原创 C语言之指针表达式

本文主要以一个例子分析一些复杂的指针表达式. 首先定义变量如下:char ch = 'a';char &ptr_ch = &ch;char **pptr_ch = &ptr_ch;假设设备有64KB的内存, 地址标号为 0x0000~0xFFFF, 再假设执行上述代码后内存分配情况如下图: 表达式 作为右值 作为左值 ch...

2018-04-13 20:45:37 963

原创 C语言之安全的动态内存分配

动态内存分配最常见的错误就是忘记检查所请求的内存是否分配成功. 可以利用 宏 实现安全的动态内存分配.// alloc.h#include <stdlib.h>#define malloc 不要直接使用malloc // 直接使用malloc将无法编译#define MALLOC(num, type) (type *)alloc((num) * sizeof(type))...

2018-04-04 22:26:52 345

C_Primer_Plus_编程练习答案

C_Primer_Plus_编程练习答案.

2015-10-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除