自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(153)
  • 问答 (1)
  • 收藏
  • 关注

转载 vfork与fork

fork()与vfock()都是创建一个进程,那他们有什么区别呢?总结有以下三点区别:1. fork ():子进程拷贝父进程的数据段,代码段 vfork( ):子进程与父进程共享数据段2. fork ()父子进程的执行次序不确定 vfork 保证子进程先运行,在调用exec 或exit 之前与父进程数据是共享的,在它调用exec 或exit 之后父进程...

2020-03-22 11:19:01 184

原创 kobject与kset

参考:http://blog.chinaunix.net/uid-25695950-id-4475182.html https://blog.csdn.net/lizuobin2/article/details/51511336kobject、kset、ktype是设备模型中的基本机构。kobject基本结构体,kset是某相同kobject集合,ktype是类型。ko...

2020-02-22 22:41:01 676

原创 linux块设备驱动简介和实例

1、块设备是linux3大设备之一。其驱动模型主要针对磁盘,Flash等存储类设备。2、块设备为什么要缓存? 针对带磁头设备,需读取扇区,分布可能随机。需优化读取顺序,减小磁头机械运转次数。 针对不带磁头设备,暂时先扇区(或者块)读取到ram中缓存,只修改ram中相应位置数据,在写回到块设备,减小擦写次数。3、框架read()系统调用最终会调用一个适当的VF...

2020-02-22 11:18:19 664

原创 网络驱动与DM9000

网卡驱动在linux系统中的位置:重要数据结构和函数:/* 网卡设备*/struct net_device{ /* * This is the first field of the "visible" part of this structure * (i.e. as seen by users in the "Space.c" file). It is the...

2020-02-21 13:34:49 172

原创 ARM I/O内存

访问外部设备都是读写器寄存器,若寄存器可以当做内存一部分(统一编址)称为IO内存,比如ARM,POWERPC等外设寄存器看成独立空间的称为IO端口,比如x86操作步骤:1、申请2、映射3、访问4、释放具体操作操作步骤如下:1、申请——request_mem_region申请后在系统相当于对已有资源做了个标记,即本资源已经申请占用,若相同资源再申请时内核会报错。...

2020-02-19 17:00:40 677

原创 linux中断下半部处理

1、软中断注册软中断 如:open_softirq(MY_SOFTIRQ, my_softirq_action)在中断处理程序中触发软中断 如:raise_softirq(MY_SOFTIRQ)2、tasklet初始化一个tasklet: 方法1: DECLARE_TASKLET(name, func, data);定义名字为name的tasklet,默认为enab...

2020-02-19 14:21:29 168

转载 pragma pack与__attribute__区别

一、pragma pack(n):告诉编译器结构体或类内部的成员变量相对于第一个变量的地址的偏移量的对齐方式,缺省情况下,编译器按照自然边界对齐,当变量所需的自然对齐边界比n大 时,按照n对齐。二、__attribute__((aligned(m))):告诉编译器一个结构体或者类或者联合或者一个类型的变量(对象)分配地址空间时的地址对齐方式。也就是说,如 果将__attribute__((...

2019-08-04 20:21:36 719

转载 linux下的stdin,stdout和stderr理解

在linux中经常会看到stdin,stdout和stderr,这3个可以称为终端(Terminal)的标准输入(standard input),标准输出( standard out)和标准错误输出(standard error)。通过man stdin查看手册,可以看到它们都是在stdio.h中定义的。 当linux开始执行程序的时候,程序默认会打开这3个文件流,这样就可以对终端进行输入输出操作...

2018-06-05 17:49:35 30023 1

原创 字符串在内存中的拷贝以及内存重叠

在strcpy函数中需要注意导入的形参dst,src不能有内存重叠。(尤其注意dst不能处在src字符串的内存中间,否则拷贝的时候会替换到src原有的结束字符,最终导致src字符串无结束字符,一直拷贝下去导致程序崩溃)char *my_strcpy(char *dst,char *src){ char *_src = NULL; char *_dst = NULL; in...

2018-05-31 09:25:30 616

原创 递归写法转成迭代

一个常见的递归算法例子://斐波那契long Fib(int n){ if (n == 0) return 0; if (n == 1) return 1; if (n > 1) return Fib(n-1) + Fib(n-2);}1、例如求Fib(10) 中间值Fib(3)会被求值21次。但是其实只需求一次即可,剩余的20次求职 属于资源的浪费。2、...

2018-05-30 09:08:44 1848

原创 可变参数列表 应用简介

可变参数列表即函数参数可以是不固定的,例如常规函数 type func(type A,type B,type C);定义了三个参数,因此调用的时候也必须导入三个参数。可变参数列表type func(type A , ......);type A为固定参数,......省略号为可变参数列表,可长可端。常见的printf函数声明为int printf(const char *fmt, ...) 介绍可...

2018-05-28 17:49:48 210

原创 求两变量在规定值范围循环增长的距离值

假设变量 ticks_now、tick_old<=0x00ffffff,且在0-0x00ffffff循环,求tick_now、tick_old过了多少间隔static uint32_t ticks_diff_get(uint32_t ticks_now, uint32_t ticks_old){    return ((ticks_now - ticks_old)  & 0x00ff...

2018-05-08 11:12:17 171

原创 字符串常量与字符数组

字符数组的初始化:char a[6] = "hello1";//char b[6] = {'h','e','l','l','o','2',0};char c[] = "hello3";//c字符:h,e,l,l,o,3,\0char d[] ={'h','e','l','l','o','4','\0'};//d字符:h,e,l,l,o,4,\0 strcpy(a,b); //以\0为结束字...

2018-04-08 17:24:29 174

原创 指针数组与二级指针

二级指针:指向指针的指针指针数组:元素是指针的数组int lookup_keyword(char *desire_word,char **keytable,int size) //char *keytable[],因为keytable[]可写成指针形式 故= char **keytable{ char **kwp = NULL; for(kwp=keytable;kwp<k...

2018-04-04 17:10:37 476

原创 变量名与数组名

1、变量名 --代表对应的内存地址,但在代码中表示的是内存中的值int a = 10; //开辟一内存空间名字为a,里面存放10a++;         //a 存放 10&a 取的是a内存首地址2、数组名 --具有数组属性 + 隐式转换后的指针常量的性质数组属性:类型:int a[10],a的类型为int [10]sizeof(a) = 10*sizeof(int) = 40;&...

2018-03-16 14:42:29 3614

原创 C整型升级和寻常算术转换以及数据类型转换

一、在算术表达式中存在整型升级和寻常算术转化问题(unsigned)char,(unsigned)short --> ( unsigned )int -->float -->double -->long doublefloat、double、long double为浮点型数据。当没有浮点型数据参与计算时,统一转为(unsigned)int例如:char a=1,b=1,c;...

2018-02-27 17:20:18 353

转载 ++ --在C与C++中左值区别

转自:http://blog.csdn.net/julysee/article/details/43760205今天网上看到一个华为的面试题目:写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值int a = 4;(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);答案是C是错误的,而A B D是...

2018-02-24 18:12:02 203

原创 指针常量与常量指针( const修饰 )

①const int p; ②const int* p; ③int const* p; ④int * const p;⑤const int * const p;⑥int const * const p;第一种是常量整数,没什么好说的。后面五种是指针,有一个简便的办法记忆。从右往左读,遇到p就替换成“p is a ”遇到 * 就替换成“point to”。比如说②,读作:p is a point t...

2018-02-24 15:53:49 228

原创 无类型名的结构体

1、无类型名的结构体变量在声明结构体时就得定义。2、不同时刻声明的结构体变量,即使成员列表一致,在编译器看来也是不一致的数据类型例如:struct{ int x;}a;struct{ int x;}b; b = a;//报 incompatible type error且无类型名结构体使用限制:1、他不能作为参数传递给一个函数,因为编译器无法对他进行类型检查;2、也不能使被调用的...

2018-02-24 14:06:29 2019 1

原创 位段以及位段内存对齐

位段(bit-field)是以位为单位来定义结构体(或联合体)中的成员变量所占的空间。含有位段的结构体(联合体)称为位段结构。采用位段结构既能够节省空间,又方便于操作。位段结构中位段的定义格式为:         类型 <成员名>:<二进制位数>struct bytedata{ unsigned a:2; /*位段a,占2位*/ unsigned:6; /...

2018-02-23 16:15:22 753 1

原创 两头文件相互包含,且内容相互引用问题

//HEAD1.H#ifndef __HEAD_1_H__#define __HEAD_1_H__ //防止多次包含,重复定义#include "head2.h"#define VAR_MACRO 1 //define a macro, which used in head2.hbool func(ClassA* CA); //ClassA is...

2018-02-23 10:58:34 1662

原创 标号语句 与 变量定义

标号语句有:goto、case ,用 vc 6.0  goto 和case里头定义变量都提示错误,vc 在函数执行语句开始后就不能再定义或声明变量了。(dev c++未测试)以下是官方解释:见 http://en.cppreference.com/w/c/languageExplanationThe goto statement causes an unconditional jump (tran...

2018-02-22 16:58:44 1057

原创 两异号数相除和余数

表达式: q=a/b,r=a%b;规则如下:1、a = q*b + r;2、a改变符号,则q也改变符号3、r与a同号例如:q = 3/(-2) = -1,r = 3%(-2) = 1。-1*(-2) + 1 =3 同时满足以上1,3条件改变3的符号,又有,q = (-3)/(-2) =1,r = (-3)%(-2) = -1 同时满足以上3条件

2018-02-07 17:10:34 1573

转载 多个文件使用同一全局变量(未初始化) 以及局部变量重复定义

如果是多个文件中同一变量,是由C语言编译器中的linker解决的。首先,要编译的文件中的符号(函数名,全局变量名)分为weak和strong类型。weak symbol:未初始化的全局变量strong symbol:函数名,初始化的全局变量linker解决按3条规则解决此问题1,多个相同名称的strong symbol是不被允许的2,一个strong symbol和多个weak symbol相同,...

2018-01-06 09:29:05 1823

转载 浮点数的大小比较为什么不能用等号?

1、不是所有的数都可以用浮点数精确表示,如3.333 二进制表示1*2^1+1*2^0+0*2^(-1)+1*2^(-2)...。内存中存储的仅是真实值得近似值。有精度误差2、浮点数精度不同#include #include using namespace std;int main(){ float a = (float)0.1; float b = (flo

2018-01-03 01:45:31 1537

原创 浮点型的打印和有效值位数问题

/*1、float double默认都输出到小数点后6位(但可格式化输出)2、float 有效位6,超过6位的不保证显示正确(有可能正确有可能错误),double有效位15,超过15位不保证显示正确3、输出值比实际短,打印值最后一不确定4、输出指定%f,%lf没什么影响*/#include #include void main(){ f

2018-01-03 01:13:11 2807

原创 c语言变量存储的本质

1、给定的值若是带(-符号),需将负数转为补码形式。若给定的数无符号表示(即无+-号,即为补码)     负数补码方法:除符号位外其余位取反(反码),再加1(反码+1)。      (char) -1 二进制存储格式,变换如下:1000,0001->反码:1111,1110->补码:1111,1111 = 0xff      所以char a = -1;和char a = 0xff

2017-12-31 01:08:58 282

原创 转义字符

1、C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了2、常见的转移字符表转义字符意义ASCII码值(十进制)\a响铃(BEL)007\b

2017-12-27 23:41:54 464

转载 浮点数的存储

1、先看一例题:#include   void main(void){    int num=9; /* num是整型变量,设为9 */    float* pFloat=# /* pFloat表示num的内存地址,但是设为浮点数 */    printf("num的值为:%d\n",num); /* 显示num的整型值 */    printf("*pFloat的值为:%

2017-09-02 11:46:34 355

原创 ubuntu 14.04 gedit中文乱码

在中文支持配置还不完整的Ubuntu 14.04中,使用gedit打开带有中文字符的文件有时会出现乱码的情况,这是由于gedit对字符编码匹配不正确导致的,解决方法如下:    在终端中输入如下命令,    gsettings set org.gnome.gedit.preferences.encodings auto-detected "['GB18030', 'GB2312', '

2017-01-09 11:08:27 293

原创 Linux输入子系统

Linux输入子系统(Input Subsystem) Linux 的输入子系统不仅支持鼠标、键盘等常规输入设备,而且还支持蜂鸣器、触摸屏等设备。本章将对 Linux 输入子系统进行详细的分析。一 前言 输入子系统又叫 input 子系统。其构建非常灵活,只需要调用一些简单的函数,就可以将一个输入设备

2016-12-28 12:50:13 308

转载 c程序在Android下执行

Android编译环境本身比较复杂,且不像普通的编译环境:只有顶层目录下才有Makefile文件,而其他的每个component都使用统一标准Android.mk. Android.mk文件本身是比较简单的,不过它并不是我们熟悉的Makefile,而是经过了Android自身编译系统的很多处理,因此要真正理清楚其中的联系还比较复杂,不过这种方式的好处在于,编写一个新的Android.mk来给And

2016-12-21 17:54:38 374

原创 ubuntu 中文改英文

由于有时候为了省事将Ubuntu安装成中文版,而在终端中中文会显示乱码,因此需要将默认语言改为英文。用vi(或nano等文本编辑器)打开 /etc/default/locale 文件将原来的配置内容修改为LANG=”en_US.UTF-8″LANGUAGE=”en_US:en”再在终端下运行:locale-gen -en_US:en注销或重启后,即可恢复为英文的语言

2016-08-31 09:48:05 364

转载 C语言操作符优先级

C语言操作符优先级优先级运算符含    义要求运算对象的个数结合方向1()[]->.圆括号下标运算符指向结构体成员运算符结构体成员运算符 初等运算自左至右2!逻辑非运算符1(单

2016-08-12 16:20:07 254

转载 c库函数——字符串函数

Code:char   stpcpy(char*dest,const char *src)       将字符串src复制到destchar   strcat(char*dest,const char *src)       将字符串src添加到dest末尾char   strchr(constchar *s,int c)       检索并返回字符c在字符串s中第一次

2016-05-27 15:30:16 281

转载 C语言中内存分配

在任何程序设计环境及语言中,内存管理都十分重要。在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的。因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题。第1节主要介绍内存管理基本概念,重点介绍C程序中内存的分配,以及C语言编译后的可执行程序的存储结构和运行结构,同时还介绍了堆空间和栈空间的用途及区别。第2节主要介绍C语言中内存分配及释放函数、函数的功能,以及如何调用这些

2016-05-23 15:38:00 333

原创 linux内核可变参数分析

typedef char * va_list;/* * Storage alignment properties */#define _AUPBND (sizeof (acpi_native_int) - 1) //acpi_native_int 为4字节(32位)(根据机子字数而定)#define _ADNBND (sizeof (acpi_native_int) - 1)

2016-04-12 14:52:02 414

转载 Android Uevent 分析,从kernel到framework

Uevent是内核通知android有状态变化的一种方法,比如USB线插入、拔出,电池电量变化等等。其本质是内核发送(可以通过socket)一个字符串,应用层(android)接收并解释该字符串,获取相应信息。一、Kernel侧:UEVENT的发起在Kernel端,主要是通过函数int kobject_uevent_env(struct kobject *kobj, enum kobj

2016-04-12 14:41:45 388

转载 module_init的内核调用顺序

转自:http://blog.chinaunix.net/uid-27664726-id-4243961.html现在以module_init为例分析initcall在内核中的调用顺序在头文件init.h中,有如下定义:#define module_init(x)     __initcall(x);#define __initcall(fn) device_i

2016-04-11 18:00:46 349

转载 Android4.4的zygote进程

Android4.4的zygote进程侯亮1背景 前些天为了在科室做培训,我基于Android 4.4重新整理了一份关于zygote的文档。从技术的角度看,这几年zygote并没有出现什么大的变化,所以如果有人以前研究过zygote,应该不会对本文写的内容感到陌生。2zygote进程的描述 在Android中,zygote是整个系统创建新进程的核心装置。从字

2016-02-24 17:37:54 663

空空如也

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

TA关注的人

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