- 博客(36)
- 资源 (18)
- 收藏
- 关注
转载 常量指针和指针常量
一、可能的组合: (1)const char*p (2)char const*p (3)char *const p (4)const char **p (5)char const**p (6)char *const *p (7)char **const p 当然还有在(5)、
2012-04-19 16:32:37 520
转载 对字符数组,字符指针,字符串常量以及其sizeof的一些总结
对字符数组,字符指针,字符串常量以及其sizeof的一些总结在网上经常看到一些类似字符串或者sizeof等的公司笔试题,鄙人不才,但也作了一些总结,这些总结都是在vc2003下测试得到的结果,如果不对,请指出。1.以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写 "abc",那么编译器帮你存储的是"abc/0"2."abc"是常量吗?答案是有
2012-04-19 16:04:39 658 3
转载 memcopy, memset, strcopy, strncpy用法总结
memcpy原型:extern void *memcpy(void *dest, void *src, unsigned int count);用法:#include功能:由src所指内存区域复制count个字节到dest所指内存区域。说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。可以拿它拷贝任何数据类型的对象。 举例:char a[100],
2012-04-19 15:39:53 609
转载 memcpy和memmove的区别
memcpy和memmove的区别 memcpy()和memmove()都是C语言中的库函数,在头文件string.h中,其原型分别如下: void*memcpy(void*dst, const void *src, size_t count);void *memmove(void*
2012-04-19 14:54:35 614 1
转载 memcpy与memmove的实现
/* memcpy是不管有否区域重叠的,重叠不重叠照样复制, memmove才会避免区域重叠,检测这个区域重叠很简单,如果目标地址在源区域内,那就会发生重叠. 处理重叠也很简单,从源地址的末尾开始反方向复制就OK了。未重叠的情况: 内存布局(little endian): higher address lo
2012-04-19 14:09:58 647
转载 memmove
相关函数: bcopy(), memccpy(),memcpy(), strcpy(), strncpy()表头文件: #include 定义函数: void *memmove(void *dest, const void *src, size_t n);函数说明: memmove()与memcpy()一样都是用来拷贝src所指的内存内容前n个字节到dest所指的地址上。不同的是,
2012-04-19 14:06:16 659
转载 memmove 和memcpy
1.memmove函数原型:void *memmove(void *dest, const void *source, size_t count)返回值说明:返回指向dest的void *指针参数说明:dest,source分别为目标串和源串的首地址。count为要移动的字符的个数函数说明:memmove用于从source拷贝count个字符到dest,如果目标区域和源区域有重叠的
2012-04-19 14:04:33 477
转载 互斥量和信号量的区别
1.互斥量用于线程的互斥,信号量用于线程的同步。这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少
2012-04-19 11:44:02 2175
转载 内核启动参数机制学习笔记
Linux内核在启动的时候需要一些参数,以获得当前硬件的信息或者启动所需资源在内存中的位置等等。这些信息可以通过bootloader传递给内核,比较常见的就是cmdline。以前我在启动内核的时候习惯性的通过uboot传递一个cmdline给内核,没有具体的分析这个过程。最近在分析内核启动过程的时候,重新看了一下内核启动参数的传递过程,彻底解决一下在这方面的疑惑。 一、bo
2012-04-19 10:49:28 4610
转载 USB 学习笔记
刚刚开始接触USB,记录一些基本知识。注:有大量转载别人的内容。1.端点:位于USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据,每一个端点都有惟一的确定地址,有不同的传输特性(如输入端点、输出端点、配置端点、批量传输端点)。2.帧:时间概念,在USB中,一帧就是1MS,它是一个独立的单元,包含了一系列总线动作,USB将1帧分为好几份,每一份中是一个USB的传输动作。
2012-04-19 10:32:30 1062
转载 Linux USB驱动框架分析(六)
说的usb子系统的IO操作,不得不说usb requestblock,简称urb。事实上,可以打一个这样的比喻,usb总线就像一条高速公路,货物、人流之类的可以看成是系统与设备交互的数据,而urb就可以看成是交通工具。在一开始对USB规范细节的介绍,我们就说过USB的endpoint有4种不同类型,于是能在这条高速公路上流动的数据也就有四种。但对车是没有要求的,urb可以运载四种数据,不过你要先告
2012-04-18 14:13:06 900
转载 Linux USB驱动框架分析(五)
接下来的工作是向系统注册一些以后会用的的信息。首先我们来说明一下usb-set_intfdata(),他向内核注册一个data,这个data结构可以是任意的,在这段程序用向内核注册了一个usb_skel结构,就是我们刚刚看到的被初始化的那个,这个data可以在以后用usb_get_intfdata来得到。 usb_set_intfdata(interface, dev);
2012-04-18 14:12:32 640
转载 Linux USB驱动框架分析(四)
probe是usb子系统自动调用的一个函数,有USB设备接到硬件集线器时,usb子系统会根据production ID和vendorID的组合或者设备的class、subclass跟protocol的组合来识别设备调用相应驱动程序的probe(探测)函数,对于skeleton来说,就是skel_probe。系统会传递给探测函数一个usb_interface *跟一个struct usb_devic
2012-04-18 14:11:58 760
转载 Linux USB驱动框架分析(三)
下面我们来分析一下usb-skeleton的源码吧。这个范例程序可以在linux-2.6.17/drivers/usb下找到,其他版本的内核程序源码可能有所不同,但相差不大。大家可以先找到源码看一看,先有个整体印象。 之前已经提到,模块先要向内核注册初始化跟销毁函数:static int __init usb_skel_init(void){ int result;
2012-04-18 14:11:29 579
转载 Linux USB驱动框架分析(二)
好,了解过USB一些规范细节之后,我们现在来看看Linux的驱动框架。事实上,Linux的设备驱动,特别是这种hotplug的USB设备驱动,会被编译成模块,然后在需要时挂在到内核。要写一个Linux的模块并不复杂,以一个helloworld为例:#include #include MODULE_LICENSE(“GPL”); static int hello_init(voi
2012-04-18 14:10:56 593
转载 Linux USB驱动框架分析(一)
Linux USB驱动框架分析(一) 初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结当然不可缺,更何况我决定为嵌入式卖命了。好,言归正传,我说一说这段时间的收获,跟大家分享一下Linux的驱动开发。但这次只先针对Linux的USB子系统作分析,因为周五研讨老板催货。当然,还会顺带提一下其他的驱动程序写法。 事实上,Linux的设备驱动
2012-04-18 14:10:15 615
转载 实战Linux Bluetooth编程(五) Socket与Bluetooth
作者: Sam (甄峰) sam_code@hotmail.com Linux下Bluetooth编程,借用了Socket体制。也就是说,BlueZKernel部分将Bluetooth协议栈以网络协议的形式添加进网络协议栈,这样极大的方便了用户编程。下面Sam就结合Socket概念将LinuxBluetooth做个研究。 1957年10月4日,星期五,苏联发射了人类历史上第一颗人造
2012-04-18 14:09:17 701
转载 实战Linux Bluetooth编程(四) L2CAP层编程
作者:Sam (甄峰) sam_code@hotmail.com(L2CAP协议简介,L2CAP在BlueZ中的实现以及L2CAP编程接口) 一:L2CAP协议简介:Logical Link Control and AdaptationProtocol(L2CAP) 逻辑连接控制和适配协议 (L2CAP)为上层协议提供面向连接和无连接的数据服务,并提供多协议功能和分割重组操
2012-04-18 14:08:42 858
转载 实战Linux Bluetooth编程(三) HCI层编程
作者:Sam (甄峰) sam_code@hotmail.com(HCI协议简介,HCI在BlueZ中的实现以及HCI编程接口) 1. HCI层协议概述:HCI提供一套统一的方法来访问Bluetooth底层。如图所示: Bluetooth编程(三) HCI层编程" title="实战Linux Bluetooth编程(三) HCI层编程"> 从图上可以看出,Host
2012-04-18 14:08:18 1464
转载 实战Linux Bluetooth编程(二) BlueZ简介
作者: Sam(甄峰) sam_code@hotmail.com Linux下Bluetooth协议栈的实现.Linux下开放的蓝牙协议栈主要包括IBM公司的BlueDrekar,Nokia公司的Affix,Axis公司的OpenBT和官方协议栈BlueZ。我们主要面对Bluez来探讨。 BlueZ基础代码均是由MaximKrasnyansky完成的。包括:HCI,L2CAP,R
2012-04-18 14:07:45 686
转载 实战Linux Bluetooth编程(一) 协议栈概述
作者:Sam (甄峰) sam_code@hotmail.com Sam一年前在Linux下写了一个类似Windows下BTW的库--BTX。现在需要添加新功能时发现很多知识点都忘记了。所以决定在这次学习中,把一些bluezAPI记录下来。这几天又想,这样还不够,不如把Linux下的Bluetooth编程基础给记录下来吧。 前言:随着嵌入式系统的飞速发展,很多嵌入式平台上需要
2012-04-18 14:07:11 884
转载 Bluetooth协议栈学习之SDP
作者: Sam (甄峰) sam_code@hotmail.com SDP(service discoveryprotocol:服务发现协议)提供了一个方法,让应用程序检测哪些服务是可用的并探测这些可用服务的特性。服务发现协议(SDP或BluetoothSDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth
2012-04-18 14:06:48 564
转载 Linux Kernel中list解读
作者:Sam (甄峰) sam_code@hotmail.com Sam之前看2.4kernel时,常看到List.也仔细看了一下,但现在长期没有看kernel,没有写程序,已经忘记了很多。今天又看一看并记录下来。 LinuxKernel中,常常需要使用双向链表。在~/include/linux/list.h中,就定义了双向链表和常用的function. 链表头如下:s
2012-04-18 14:06:17 447
转载 Linux下 USB HID device driver研究(三)--probe
作者: Sam(甄峰) sam_code@hotmail.com 1. 解读hiddevice probe程序:static int hid_probe(struct usb_interface*intf, const struct usb_device_id *id){ struct hid_device *hid; char path[64]; int i;
2012-04-18 14:05:38 1465
转载 Linux下 hid quirks的研究
者:Sam (甄峰) sam_code@hotmail.com Sam在读USB HIDdriver时,看到quirks这部分内容。因为之前在看USB部分代码时,常看到类似的内容,但对它的语义理解并不清楚,只是笼统地认为是一个需要修正的东西。现在稍微研究一下。 一:quirks简介:quirks: 怪癖的意思,也就是说它某种特性与通常的USB设备不相同。 Sam之
2012-04-18 14:05:04 1232
转载 USB封包格式
1.起始(SOP)封包 根集线器会在每1 ms时,送出SOF封包。这介于2个SOF封包之间的时间,即称为帧(frame)。SOF封包虽是属于令牌封包的一种,但却具有独自的PID形态名称SOF。通常目标设各都利用SOF封包来辨识帧的起点。这个封包常用于等时传输。也就是在1 ms的帧(高速是125 μS微帧,将1 ms切成8份)开始时,等时传输会利用SOF激活传输并达到同步传输的作用。而在每
2012-04-18 13:31:59 1177
转载 UniversalSerialBus通信资料,USB底层数据结构,USB2.0、USB1.1相关协议 (来自网络)
1、端点:位于USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据,每一个端点都有惟一的确定地址,有不同的传输特性(如输入端点、输出端点、配置端点、批量传输端点)2、帧:时间概念,在USB中,一帧就是1MS,他是个单独的单元,包含了一系列总线动作,USB将1帧分为好几份,每一份中是个USB的传输动作。3、上行、下行:设备到主机为上行,主机到设备为下行下面以一问一答的形式开
2012-04-18 13:30:54 955
转载 Linux USB 鼠标驱动程序解析
SB 总线引出两个重要的链表! 一个 USB 总线引出两个重要的链表,一个为 USB 设备链表,一个为 USB 驱动链表。设备链表包含各种系统中的 USB 设备以及这些设备的所有接口,驱动链表包含 USB 设备驱动程序(usb device driver)和 USB 驱动程序(usb driver)。 USB 设备驱动程序(usb device driver)和 USB 驱动程序(us
2012-04-18 12:48:46 615
原创 USB Protocol Wiki
http://wiki.osdev.org/Universal_Serial_Bushttp://en.wikipedia.org/wiki/Universal_Serial_Bus#Technical_details
2012-04-17 15:47:03 1012
转载 Linux内核USB主设备驱动程序
http://www.shangshuwu.cn/index.php/Linux%E5%86%85%E6%A0%B8USB%E4%B8%BB%E8%AE%BE%E5%A4%87%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F目录[隐藏]1ehci-hcd控制器1.1EHCI构架介绍1.2EHCI驱动程序分析2Mass St
2012-04-17 15:34:24 4463 4
转载 基于V4L2的视频驱动开发(2)
三、 V4L2 API及数据结构V4L2是V4L的升级版本,为linux下视频设备程序提供了一套接口规范。包括一套数据结构和底层V4L2驱动接口。1、常用的结构体在内核目录include/linux/videodev2.h中定义struct v4l2_requestbuffers //申请帧缓冲,对应命令VIDIOC_REQBUFS str
2012-04-13 14:17:21 732
转载 基于V4L2的视频驱动开发(1)
作者:刘洪涛,华清远见嵌入式学院讲师。编写基于V4L2视频驱动主要涉及到以下几个知识点:● 摄像头方面的知识 要了解选用的摄像头的特性,包括访问控制方法、各种参数的配置方法、信号输出类型等。● Camera解码器、控制器 如果摄像头是模拟量输出的,要熟悉解码器的配置。最后数字视频信号进入camera控制器后
2012-04-13 14:16:13 854
转载 V4L2编程
V4L2编程 2010-09-10 16:26:04| 分类:默认分类 | 标签:|字号大中小 订阅 转载:以前做的智能家居的项目用的是Linux2.6.13的核,使用的中星微的摄像头,移植了spcaview进行图像的获取,后来用了2.6.29的核,发现以前移植的spcaview不能用了,后来查了一下,发现2.6.29核采用了UVC的驱动(万能驱动),
2012-04-10 21:36:58 849 1
转载 Linux下视频采集及其显示
说明:1、本文所提及的摄像头不是zc0301p,使用的API不是V4L,显示所使用的上位机不是QT,特此说明。2、UVC只是一个驱动,如果它能成功驱动摄像头,会在/dev目录下出现video(或video0、video1等等)。这样,就可以使用Linux提供(准确说不是Linux提供,具体的百度吧)的一套API,即V4L2来访问摄像头了。“使用”是指我们写的采集数据的程序,而不是指“摄像头
2012-04-09 10:47:52 1575 2
转载 基于嵌入式Linux的视频采集系统---UVC驱动模型介绍
UVC 即 usb video class。USB协议中,除了通用的软硬件电气接口规范等,还包含了各种各样的Class协议,用来为不同的功能定义各自的标准接口和具体的总线上的数据交互格式和内容。这些Class协议的数量非常多,最常见的比如支持U盘功能的Mass Storage Class,以及通用的数据交换协议:CDC class。此外还包括Video、Audio Class, Print Cla
2012-04-09 10:32:14 3667
转载 关于Optical Zoom
光学变焦英文名称为Optical Zoom,数码摄像机依靠光学镜头结构来实现变焦。数码摄像机的光学变焦方式与传统35mm相机差不多,就是通过镜片移动来放大与缩小需要拍摄的景物,光学变焦倍数越大,能拍摄的景物就越远。光学变焦是通过镜头、物体和焦点三方的位置发生变化而产生的。当成像面在水平方向运动的时候,视觉和焦距就会发生变化,更远的景物变得更清晰,让人感觉像物体递进的感觉。 显而易见
2012-04-09 09:00:42 2196
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人