自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 用define 宏定义注释符号?

#define BSC //#define BMC /*#define EMC */D),BSC my single-line commentE),BMC my multi-line comment EMCD)和E)都错误,为什么呢?因为注释先于预处理指令被处理,当这两行被展开成//…或/*…*/时,注释已处理完毕,此时再出现//…或/*…*/自然错误.因此,试图用宏开始或

2015-01-30 21:58:01 1994

原创 优先级问题

归纳如下:初值运算符 :[ ]、()、. 、->单目运算符  :++、--,!,~,&,*,sizeof,强转算数运算符  :+、-,*,/移位运算符 :<<、>>关系运算符 :>=、<=,!=,>、<,==位运算符     :|,&,^逻辑运算符  :&&,||条件运算符  ...

2015-01-30 21:45:33 353

原创 ++符号的贪心方法与左值右值和未定义表达式

编译器将程序分解成符号的方法是,从左到右一个一个字符地读入,如果该字符可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串已不再可能组成一个有意义的符号。这个处理的策略被称为“贪心法” 要看懂下面式子,明白两点:1、左值右值区别。      左值

2015-01-30 21:08:07 433

原创 逗号表达式

int x;int i = 3;x = (++i, i++, i+10);逗号表达式最后值为最后一个式子。所以x=i+10;但是如果改成:x=++i,i++,i+10呢?因为赋值比逗号表达式等级高,所以x=++i

2015-01-30 20:40:40 437

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

字符常量通常有单引号' '表示。字符串常量通常用双引号“ ”表示。例如sizeof('a')=1字节,但是sizeof(“a”)=2,因为系统会默认在a末尾加上\0。问题来了sizeof("a\0a")=3+1=4,可是printf打印却是a。那这个字符串到底是什么?

2015-01-30 20:19:49 797

原创 c符号

反斜杆\是断行,其中断行之后以及下一行都不能有空格出现,否则编译器会将反斜杆后的内容命令语句。//这是一条合法的\单行注释/\   // /\这个符号是 / \的组合/这是一条合法的单行注释cha\r* s="这是一个合法的\\n 字符串";

2015-01-30 20:10:19 361

原创 union关键字

union中的所有成员起始地址都一样共用一存储空间,union占用内存大小=成员占用内存最大值利用union可以测试系统的大小端int checkSystem( ){union check{int i;char ch;} c;c.i = 1;return (c.ch ==1);//如果返回1,小端。否则是大端}

2015-01-29 22:48:59 370

原创 const关键字

const修饰指针const int *p; :const ×p->p可变但p指向的对象不能变int const *p; :const *p-》p可变但p指向的对象不能变int *const p;  :const p-》p不能变,但p指向的对象可变const int *const p;:const  *constp-》指针p和p指向的对象都不可变以上四个有什么区别呢?在判别

2015-01-29 22:33:44 416

原创 hub_config

static int hub_configure(struct usb_hub *hub, struct usb_endpoint_descriptor *endpoint){ struct usb_hcd *hcd; struct usb_device *hdev = hub->hdev; struct device *hub_dev = hub->intfdev; u16 hubs

2015-01-29 10:37:08 1038

原创 hub_probe被调用

刚才在hub_thread睡眠了,但是由于有roothub的存在,hub_probe在初始化控制器的时候被调用。static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id){ struct usb_host_interface *desc; struct usb_endpoint_desc

2015-01-29 09:04:06 1375

原创 sign、unsigned关键字

定义sign char a变量,则最高位代表符号位。0代表正,1代表负。正数范围:0 000 0000-0 111 1111,即0-(2^(8-1)-1=127) 负数范围:1 000 0000-1 111 1111.在计算机中负数都用补码来表示,补码=非符号位取反+1。因此上述的负数范围中的值不等于实际中的值,例如1 000 0000 不等于-0。补码1 111 1111加1之前

2015-01-29 00:16:00 1298

原创 c语言命名

一般来说习惯上用n,m,i,j,k 等表示int 类型的变量;c,ch 等表示字符类型变量;a 等表示数组;p 等表示指针。当然这仅仅是一般习惯,除了i,j,k 等可以用来表示循环变量外,别的字符变量名尽量不要使例:char cVariable;boolean bVariable;int iVariable;float fVariable;void

2015-01-28 23:03:09 355

原创 c语言关键字

C 语言标准定义的32 个关键字 1、auto 声明自动变量,缺省时编译器一般默认为auto2、int 声明整型变量3、double 声明双精度变量:双精度浮点型4、long 声明长整型变量5、char 声明字符型变量6、float 声明浮点型变量:单精度浮点型  6.1 float的有效位通常有6位,指的是小数点后面有6位数,四舍五入。         6.2 通常不将float与一个具体值进行...

2015-01-28 20:22:13 545

原创 linux那些事之hub--初始

1、roothub通常被集成在了主控制器。初始化driver/core/usb.c中static int __init usb_init(void){ 。。。 retval = usb_hub_init(); if (retval) goto hub_init_failed; 。。。 return retval;}int usb_hub_init(void){

2015-01-28 16:00:22 749

转载 linux设备驱动之s3c2410 UART移植

对于串口驱动的移植准备自己分析一下源代码的,但是发现自己好多地方都只知道一 些皮毛,不明白其中的道理,所以我上网搜的时候发现有好多人写了很多很好的文章了,下面我转载的这篇就非常不错,一个困恼我好久的问题是驱动代码中只是注 册了platform驱动,而platform设备注册在哪里?这个问题困恼我好久,源代码中一直没找到,下面文章就解决了这个问题。当然文章中详细了讲 述了很多细节的知识。原文

2015-01-13 17:35:19 648

转载 s3c6410的UART设备驱动(5)

上一篇中说到了这个函数,源码如下:static int s3c6400_serial_probe(struct platform_device *dev){ dbg("s3c6400_serial_probe: dev=%p\n", dev); return s3c24xx_serial_probe(dev, &s3c6400_uart_inf);}现在接着往下

2015-01-13 17:30:02 333

转载 s3c6410的UART设备驱动(4)

上两篇说了在模块初始化是调用uart_register_driver和uart_add_port注册UART驱动并添加端口,在模块卸载时调用uart_unregister_driver和uart_remove_one_port以注销UART驱动并移除端口,主要讲述的是这些函数的具体代码,但没说这些函数在何处被调用,这一篇讲述这些函数的调用。1、在Samsung.c (linux2.6.28

2015-01-13 17:29:01 410

转载 s3c6410的UART设备驱动(3)

上一篇说到了第二部分,但没说完,这一篇接着说第二部分,如下这部分:在模块初始化是调用uart_register_driver和uart_add_one_port注册UART驱动并添加端口,在模块卸载时调用uart_unregister_driver和uart_remove_one_port以注销UART驱动并移除端口。1、先来看uart_add_one_port函数,源码如下:

2015-01-13 13:48:50 347

转载 s3c6410的UART设备驱动(2)

上一篇说到了第一部分,这一篇说第二部分,如下这部分:在模块初始化是调用uart_register_driver和uart_add_port注册UART驱动并添加端口,在模块卸载时调用uart_unregister_driver和uart_remove_one_port以注销UART驱动并移除端口。1、先说uart_register_driver函数这个函数在samsun

2015-01-13 11:32:21 404

转载 s3c6410的UART设备驱动(1)

转自:http://blog.csdn.net/tianxiawuzhei/article/details/75584511、这段话摘于《设备驱动开发详解》在使用串口核心层这个通用串口tty驱动层的接口后,一个串口驱动要完成的主要工作:(1)、定义uart_driver、uart_ops、uart_port等结构体的实例并在适当的地方根据具体硬件和驱动的

2015-01-13 11:09:19 448

转载 linux设备驱动之8250串口驱动

转自:http://blog.csdn.net/flymachine/article/details/6956002一:前言 前一段时间自己实践了一下8250芯片串口驱动的编写。今天就在此基础上分析一下linux kernel自带的串口驱动。毕竟只有对比专业的驱动代码才能更好的进步,同以往一样,基于linix kernel2.6.25.相应驱动代码位于:linux-2.6.25/dri

2015-01-13 11:04:51 613

转载 串口驱动分析之读写数据流

转自:数据读取数据流: 读数据流分为两段,第一段为用户空间从环形缓冲read_buf中获取数据;第二段为硬件设备获取数据写到环形缓冲read_buf中。一: (1) tty_io.cstatic ssize_t tty_read(struct file *file, char __user *buf, size_t count,loff_t *ppo

2015-01-08 14:21:36 1409

原创 Linux 内核等待队列解析

在阅读Tun驱动时看到,有一些类似 add_wait_queue 的函数,这些函数正是执行等待队列的相关操作,要说等待队列还得从内核进程调度说起,内核调度系统内进程,分配时间片,但是有些进程如从网卡中读数据,在网卡有数据到达之前进程处于阻塞状态,如果此时给相应进程分配时间片做调度,无疑是浪费系统资源,所以系统内每个进程都有自己的状态标志 task->state,这些状态定义于文件 include/

2015-01-07 19:45:03 426

转载 USB-serial驱动分析(usb转串口)

转自:http://blog.csdn.net/istone107/article/details/8123482 在linux 内核中,有一个叫 usbserial 的模块可用作 usb modem 的驱动并能良好的工作, 所以详细的分析下 usbserial 模块的源码(2.6.31)。对于那些仅仅是用 USB 来通信, 在上层可看作 tty 设备, 不属于任何 USB 设备类型,

2015-01-05 17:33:46 19690

原创 PID&VID

usb设备里的VID=Vendor ID,PID=Product ID。VID是厂商编号,PID是厂商内部产品编号。在USB设备枚举阶段主要是靠这两个ID来识别设备的。

2015-01-05 15:59:08 2234

转载 USB转串口分析

转自:http://blog.csdn.net/txxm520/article/details/8934706最近要做一个关于LTE的项目,模块厂家提供的驱动里面有usb转串口驱动,usb网卡驱动,项目还没立项所以比较空,闲的蛋疼把usb转串口驱动研究了一遍,本文尽量用画图把事情说明白,献给各位纠结的童鞋。首先说一下linux的风格,个人理解1. linux大小结构体其

2015-01-05 15:46:48 876

空空如也

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

TA关注的人

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