结构体类型

Linux内核device结构体分析

☆樱花仙子☆ 提交于 2019-12-28 17:51:05
1、前言 Linux内核中的设备驱动模型,是建立在sysfs设备文件系统和kobject上的,由总线(bus)、设备(device)、驱动(driver)和类(class)所组成的关系结构,在底层,Linux系统中的每个设备都有一个device结构体的实例,本文将对Linux内核的device结构体以及相关结构进行简要分析。 2、device结构体 在Linux内核源码中,struct device结构体的定义在include/linux/device.h中,实现的主要方法在drivers/base/core.c文件中,device结构体的定义如下所示: struct device { struct device *parent; struct device_private *p; struct kobject kobj; const char *init_name; /* initial name of the device */ const struct device_type *type; struct mutex mutex; /* mutex to synchronize calls to * its driver. */ struct bus_type *bus; /* type of bus device is on */ struct device_driver

结构体变量

时光怂恿深爱的人放手 提交于 2019-12-28 03:31:08
结构体变量 初始化结构体变量 1.结构一定有struct 第种:struct 结构体名 { 成员列表 }变量名列表; 第二种: struct { 成员列表 } 变量名列表; 所以 struct data { int a ; char b ; float c ; } data1 ; 去掉data后,就省略了结构体名,直接定义结构体变量(data1);但也不能定义其他同结构体变量了 结构体类型定义并不分配内存,但结构体变量一定会分配内存 2.结构体变量的作用:方便人们将不同的数据类型建立联系输出 # include <stdio.h> struct student { int num ; char name [ 20 ] ; char sex ; float score ; } stu1 ; struct student stu1 = { 10 , "li ling" , 'm' , 80 } ; main ( ) { printf ( "%d %s" , stu1 . num , stu1 . name ) ; } 如果需要,可以在后面定义更多的结构体变量 struct student stu1,stu2,stu3; 结构体变量及其成员的引用: 结构体变量名.结构体成员名 初始化: struct student stu1 = { 10 , "li ling" , 'm' , 80 }

GO 结构体

这一生的挚爱 提交于 2019-12-26 23:06:04
一、结构体 1.1 什么是结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。 1.2 结构体的定义和初始化 type struct_variable_type struct { member definition; member definition; ... member definition; } 一旦定义了结构体类型,它就能用于变量的声明 variable_name := structure_variable_type {value1, value2...valuen} 初始化结构体 // 1.按照顺序提供初始化值 P := person{"Tom", 25} // 2.通过field:value的方式初始化,这样可以任意顺序 P := person{age:24, name:"Tom"} // 3.new方式,未设置初始值的,会赋予类型的默认初始值 p := new(person) p.age=24 1.3 结构体的访问 访问结构体成员(访问结构的各个字段) 通过点.操作符用于访问结构的各个字段。 package main import "fmt" type Books struct { title string author string subject

go之结构体

若如初见. 提交于 2019-12-26 23:04:48
一、关于结构体 简述 1、go 语言的切片可以存储同一类型的数据,但是结构体可以为不同项定义不同的数据类型 2、结构体是有一系列具有相同类型或不同类型的数据构成的数据集合 3、因为go 没有类似于类的属性和方法,所以在go中结构体有着更为重要的地位 定义 type StructName struct{ struct_key struct_key_type .... } 如: type User struct{ name string age int obj string hobby []string } 二、结构体创建 与 声明 package main import "fmt" type Addr struct{ name string phone string area string addr string status int8 } func main(){ // 声明方式一 var address Addr address = Addr{ "jmz", "12839293041", "上海", "天安路1728号", 1, } fmt.Println(address) // 结构体 声明方式二 简短声明 address1 := Addr{ "jmz", "12839293041", "上海", "天安路1728号", 1, } fmt.Println(address1) /

go结构体的方法和普通函数

南笙酒味 提交于 2019-12-26 23:04:31
package main import ( "fmt" "math" ) type vertex struct { X, Y float64 } //值接收者是复制一个对象。指针接收者是直接修改地址指向的值 func (v vertex) abs() float64 { return math.Sqrt(v.X*v.X + v.Y*v.Y) } //这里为 *vertex 定义了 Scale 方法。 func (v *vertex) scale(f float64) { v.X = v.X * f v.Y = v.Y * f } func main() { v :=vertex{3,4} v.scale(10) fmt.Println(v.abs()) } 把上面的结构体的方法改为函数就是下面的形式 package main import ( "fmt" "math" ) type vertex struct { X, Y float64 } func (v vertex) abs() float64 { return math.Sqrt(v.X*v.X + v.Y*v.Y) } func (v *vertex) scale(f float64) { v.X = v.X * f v.Y = v.Y * f } func main() { v :=vertex{3,4} v

IIC设备驱动程序详解

倾然丶 夕夏残阳落幕 提交于 2019-12-25 15:50:43
转自: http://www.cnblogs.com/lfsblack/archive/2012/09/14/2685783.html IIC设备是一种通过IIC总线连接的设备,由于其简单性,被广泛引用于电子系统中。在现代电子系统中,有很多的IIC设备需要进行相互之间通信 IIC总线是由PHILIPS公司开发的两线式串行总线,用于连接微处理器和外部IIC设备。IIC设备产生于20世纪80年代,最初专用与音频和视频设备,现在在各种电子设备中都广泛应用 IIC总线有两条总线线路,一条是串行数据线(SDA),一条是串行时钟线(SCL)。SDA负责数据传输,SCL负责数据传输的时钟同步。IIC设备通过这两条总线连接到处理器的IIC总线控制器上。一种典型的设备连接如图: 与其他总线相比,IIC总线有很多重要的特点。在选择一种设备来完成特定功能时,这些特点是选择IIC设备的重要依据。 主要特点: 1,每一个连接到总线的设备都可以通过唯一的设备地址单独访问 2,串行的8位双向数据传输,位速率在标准模式下可达到100kb/s;快速模式下可以达到400kb/s;告诉模式下可以达到3.4Mb/s 3,总线长度最长7.6m左右 4,片上滤波器可以增加抗干扰能力,保证数据的完成传输 5,连接到一条IIC总线上的设备数量只受到最大电容400pF的限制 6,它是一个多主机系统

C# Struct结构体

混江龙づ霸主 提交于 2019-12-25 14:19:56
C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可以包括数据成员和方法成员。   结构和类的区别:   1、结构是值类型,它在栈中分配空间;而类是引用类型,它在堆中分配空间,栈中保存的只是引用。   2、结构类型直接存储成员数据,让其他类的数据位于对中,位于栈中的变量保存的是指向堆中数据对象的引用。   C#中的简单类型,如int、double、bool等都是结构类型。如果需要的话,甚至可以使用结构类型结合运算符运算重载,再为C#语言创建出一种新的值类型来。   由于结构是值类型,并且直接存储数据,因此在一个对象的主要成员为数据且数据量不大的情况下,使用结构会带来更好的性能。    一、声明结构的语法 - struct关键字 public struct AddressBook { //字段、属性、方法、事件 }   对于类而言,两个变量指向同一个对象的情况是存在的,因此对这样两个变量中的任意一个进行操作,起结果必然会影响另外一个,因为它们指向的是同一个对象。   结构是值类型,,直接包含它自己的数据,每个结构都保存自己的一份数据,修改每一个结构的数据都不会对其他结构的数据造成影响。    二、给结构赋值   如果从结构中创建一个对象,并将该对象赋给某个变量,则该变量包含结构的全部值。复制类型为结构的变量时,将同时复制该结构所持有的所有数据。由于结构不是引用类型

字节对齐 详解

你离开我真会死。 提交于 2019-12-25 08:51:25
一.什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任 何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的 排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型 的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问 一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐.其他平台可能没 有这种情况,但是最常见的是如果不按照适合其平台要求对 数据存放进行对齐,会在存取效率上带来损失。比如有些平台每次读都是从偶地址开始,如果一个int 型(假设为32位系统)如果存放在偶地址开始的地方,那 么一个读周期就可以读出这32bit,而如果存放在奇地址开始的地方,就需要2个读周期,并对两次读出 的结果的高低字节进行拼凑才能得到该32bit数 据。显然在读取效率上下降很多。 二.字节对齐对程序的影响: 先让我们看几个例子吧(32bit,x86环境,gcc编译器): 设结构体如下定义: struct A { int a; char b; short c; }; struct B { char b; int a; short c; };

Rust基础

瘦欲@ 提交于 2019-12-24 18:03:03
一:编译器 Rust的编译器叫rustc,类似javac一样,负责将源代码编译成可执行文件或者库文件(.a/.so/.lib/.dll等) 二:核心库和标准库 Rust语言由核心库和标准库组成,核心库是标准库的基础,核心库不依赖于操作系统和网络相关的库,一般写嵌入式应用会用到; 可以在模块顶部引入#![no_std]来使用核心库; 标准库则一般用来开发应用程序,它提供了开发应用程序所需的基础和跨平台支持,比如println!宏其实就是标准库里的,它依赖操作系统提供的API来实现在标准输出流里打印数据; 三:包管理器 Rust的包管理器是cargo【马车】,而Rust里每个项目编译成的库叫做crate,类似Java里的jar包; cargo除了是包管理器,它还能用于创建可执行程序项目和库项目,命令分别是: 1.cargo new exec_proj 2.cargo new --lib lib_proj 然后可以通过cargo build和cargo run对项目进行编译和允许; 四:Rust的语句和表达式 Rust里语法可以分为两大类,即语句和表达式; 语句是指分号结尾,或者花括号结尾的代码,比如输出语句,变量声明语句或结构体声明语句等等; 表达式则是指没有分号的表达式,如果它处于某个X块或函数最后一行,那么它将自动作为X块或函数的返回值,比如1 + 1就是一个表达式

C:结构体

懵懂的女人 提交于 2019-12-24 04:22:18
# include <stdio.h> struct Books { char title [ 50 ] ; char author [ 50 ] ; char subject [ 100 ] ; int book_id ; } book = { "C 语言" , "RUNOOB" , "编程语言" , 123456 } ; int main ( ) { printf ( "title : %s\nauthor: %s\nsubject: %s\nbook_id: %d\n" , book . title , book . author , book . subject , book . book_id ) ; } # include <stdio.h> # include <string.h> struct Books { char title [ 50 ] ; char author [ 50 ] ; char subject [ 100 ] ; int book_id ; } ; int main ( ) { struct Books Book1 ; /* 声明 Book1,类型为 Books */ struct Books Book2 ; /* 声明 Book2,类型为 Books */ /* Book1 详述 */ strcpy ( Book1 . title , "C