自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 资源 (11)
  • 收藏
  • 关注

原创 linux驱动文件操作简单介绍

1、设备号主设备号标识设备对应的驱动程序,次设备号由内核使用,用于确定设备文件所指的设备。通过次设备号获得一个指向内核设备的直接指针,也可将此设备号当作设备本地数组的索引。设备编号用dev_t表示(Linux/types.h  32位,其中12位表示主设备号,20位表示次设备号)。由dev_t获得主设备号或次设备号:MAJOR(dev_t dev); MINOR(dev_t d

2016-10-27 19:00:37 735

原创 ioread32函数有关知识

x86体系和ARM体系的寻址方式是有差别的:在x86下,为了能够满足CPU高速地运行,内存与CPU之间通过北桥相连并通过地址方式访问,而外设通过南桥与CPU相连并通过端口访问。在ARM下也实现了类似的操作,通过两条不同的总线(AHBBUS和APBBUS)来连接不同访问速度的外设。但是它与x86不同,无论是内存还是外设,ARM都是通过地址访问。因为这两种访问方式的不同,linux分出了两

2016-10-26 20:29:05 12852 5

原创 class_create()函数

内核中定义了struct class结构体,一个struct class 结构体类型变量对应一个类,内核同时提供了class_create()函数,可以用它来创建一个类,这个类存放于sysfs下面,一旦创建了这个类,再调用device_create()函数在/dev目录下创建相应的设备节点。这样,加载模块的时候,用户空间中的udev会自动响应device_create()函数,去/sysfs下

2016-10-26 19:49:55 3147

原创 struct cdev结构体和cdev_init和cdev_add函数

在Linux内核2.6版本以前,注册一个字符设备的的经典方法是使用register_chrdev,相应的从设备中注销字符设备的方法是unregister_chrdev,而在2.6版本以后,字符设备函数的注册与注销使用的是如下一套方法:#include struct cdev *cdev_alloc(void);//分配一个独立的cdev结构 void cdev_init(struct

2016-10-26 19:14:24 1133

原创 file_operations结构体分析 (设备文件的操作)

linux设备驱动中file_operations结构体分析 struct module *owner第一个 file_operations 成员根本不是一个操作; 它是一个指向拥有这个结构的模块的指针. 这个成员用来在它的操作还在被使用时阻止模块被卸载. 几乎所有时间中, 它被简单初始化为 THIS_MODULE, 一个在 Linux/module.h> 中定义的宏.loff

2016-10-26 17:55:21 326

原创 主设备号与次设备号以及申请

一个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设备号。主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的各设备。例如一个嵌入式系统,有两个LED指示灯,LED灯需要独立的打开或者关闭。那么,可以写一个LED灯的字符设备驱动程序,可以将其主设备号注册成5号设备,次设备号分别为1和2。这里,次设备号就分别表示两个LED灯。1.主设备号和

2016-10-26 17:17:25 947

原创 编写linux驱动程序步骤

一、建立Linux驱动框架(装载、卸载Linux驱动)    Linux内核在使用驱动时首先要装载驱动,在装载过程中进行一些初始化动作(建立设备文件、分配内存等),在驱动程序中需提供相应函数来处理驱动初始化工作,该函数须使用module_init宏指定;Linux系统在退出是需卸载Linux驱动,卸载过程中进行一些退出工作(删除设备文件、释放内存等),在驱动程序中需提供相应函数来处理退出工作,

2016-10-26 15:39:04 880

原创 SPI通讯协议

SPI:高速同步串行口。是一种标准的四线同步双向串行总线。  SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并

2016-10-23 21:13:29 1327

原创 iic通讯协议

IIC总线一般串行数据通讯都有时钟和数据之分,有异步和同步之别.有单线,双线和三线等.I2C肯定是2线的(不算地线).I2C协议确实很科学,比3/4线的SPI要好,当然线多通讯速率相对就快了.I2C的原则是:在SCL=1(高电平)时,SDA千万别忽悠!!!否则,SDA下跳则"判罚"为"起始信号S",SDA上跳则"判罚"为"停止信号P".在SC

2016-10-23 21:11:20 505

原创 C语言笔试题总结

1. 下面这段代码的输出是多少(在32位机上).    char *p;   // 4    char *q[20];   // 80    char *m[20][20];  // 1600    int (*n)[10];   // 4    struct MyStruct{char dda;double dda1;int

2016-10-23 20:33:30 445

原创 C语言笔试题总结3

4.    static有什么用途?(请至少说明两种)1.限制变量的作用域2.设置变量的存储域7.    引用与指针有什么区别?1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。2) 不存在指向空值的引用,但是存在指向空值的指针。8.    描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性9.    全

2016-10-23 20:30:30 3804

原创 c语言笔试题总结2

下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。(1)算法的时间复杂度是指_______。A)执行算法程序所需要的时间B)算法程序的长度C)算法执行过程中所需要的基本运算次数D)算法程序中的指令条数答案:C评析:所谓算法的时间复杂度,是指执行算法所需要的计算工作量。

2016-10-23 20:28:15 959

原创 c语言笔试题总结

1、局部变量能否和全局变量重名?   答:能,局部会屏蔽全局。要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。   2、如何引用一个已经定义过的全局变量?   

2016-10-23 20:24:11 806

原创 嵌入式常见笔试题总结(6)

一、常识理论题 1、 简述嵌入式操作系统有哪些,你用过哪几种,简述其特点、优势及劣势?(5分)     2、 请描述控制及提高嵌入式软件质量有哪些办法,在开发过程中怎么才能保证嵌入式软件的可靠性?(5分)     3、 你认为在嵌入式开发过程中需要哪些过程控制文档?(5分)     4、 用变量a给出下面的定义。(8分) a) 一个整型数(An integer) 

2016-10-22 13:36:32 522

原创 嵌入式常见笔试题总结(5)

1、 如何在C中初始化一个字符数组。这个问题看似很简单,但是我们要将最简单的问题用最严谨的态度来对待。关键的地方:初始化、字符型、数组。最简单的方法是char array[];。这个问题看似解决了,但是在初始化上好像还欠缺点什么,个人认为:char array[5]={'1','2','3','4','5'};或者char array[5]={"12345"};或者char array[2

2016-10-22 13:17:59 396

原创 嵌入式常见笔试题总结(4)

1:用C语言实现大小端的测试   Int CheckCpu()      {union{int a;char b;}c;c.a=1;if(c.b==1)printf(“小端”);else printf(“大端”);}2:volatile的作用有哪些?Volatile第一变量相当于告诉编译

2016-10-22 13:15:37 522

原创 嵌入式常见笔试题总结(3)

1:设float a=2, b=4, c=3;,以下C语言表达式与代数式 (a+b)+c计算结果不一致的是 A.(a+b)*c/2 B.(1/2)*(a+b)*c C.(a+b)*c*1/2 D.c/2*(a+b) 参考答案:B,因为a,b,c三个变量都是浮点数,所以在B答案中其结果是0,因为在计算1/2是就是0,如果改成1/2.0就正确了。2:为了向二进制文件尾部增加

2016-10-22 13:11:30 1212

原创 嵌入式常见笔试题总结(2)

预处理器(Preprocessor)  1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)  #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL  我在这想看到几件事情:  1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)  2). 懂得预处理器将

2016-10-22 13:01:16 953

原创 嵌入式常见笔试题总结

预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你

2016-10-22 12:51:47 461

原创 arm之mmu原理

实验目的:启用MMU,映射SDRAM的地址空间,操作虚拟地址实现“点灯大法”,借此掌握MMU的使用。实验环境及说明:恒颐S3C2410开发板H2410。H2410核心板扩展有64MB的K4S561632 SDRAM(4M*16bit*4BANK),地址范围是0x30000000~0x33FFFFFF。GPIO端口的地址范围是0x56000000~0X560000B0。实验思路:开发

2016-10-09 21:32:20 1028

Linux多线程服务端编程:使用muduo C++ 网络库.陈硕(详细书签)

本书不仅讲解了创建并行代码时会遇到的问题,而且还帮助读者更好地理解同步技术。本书的目标是帮助读者在理解多线程编程概念的同时,能快速有效地进行并行计算和并发编程

2019-03-18

C++多线程编程实战 姜佑译

多线程编程是当今热门的一种编程技术。结合强大的C ,你可以轻松创建各种类型的应用程序、执行并行和优化现有程序。本书是一本实践为主、通俗易懂的C Windows多线程编程指导。你将学会如何从多线程方案中受益,提升自己的开发能力,构建更好的应用程序

2019-03-18

Kali Linux渗透测试技术详解 主编:杨波、王晓卉,李亚伟 PDF

Kali Linux渗透测试技术详解 主编:杨波、王晓卉,李亚伟 PDF

2018-05-20

[Oracle.11g.Pro﹡C.C.编程艺术].王海凤.扫描版.pdf

这是一本比较适合初学者的书

2017-06-06

Cortex-m3权威指南

详细的介绍了Cortex-m3的工作原理,以及开发方法和注意事项

2016-03-19

s3c2410中文手册

此文件为s3c2410的中文数据手册,非常适合新手学习 详细介绍了芯片的硬件资源以及开发方法

2016-03-19

ARM9芯片手册中文版

次文件为arm9参考手册中文版 非常适合新手学习 详细介绍了arm9的硬件资源以及开发方法

2016-03-19

STM32固件库开发模板

此文件用于stm32固件库开发工程,方便创建工程时的繁琐过程

2016-03-08

空空如也

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

TA关注的人

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