快速好用的结构体定义使用方式struct

我们来讲一个我最常用的定义方式,首先是定义这个结构体的内容,类似于定义一个类

定义结构体的内容

struct SPI{
	u8 SPI_TX[20];
	u8 SPI_RX[20];
	u32 addr;
	u16 length;	
	u8 task_1;
	u8 task_2;
	u8 task_3;
	u16 size;
	u8 SR1;
	u8 SR2;
	u8 SR3;
	u16 ID;
	u32 Page_Address;
};

实际去定义这个结构体

SPI就是这个类的名称SPI_1就是我定义的这个结构体,里面的内容根据需求去定义,这个struct 定义在,h文件里。

struct  SPI SPI_1;

然后给这个类定义一个实体的结构体,也可以定义多个,根据使用需求决定。

			if(SPI_1.task_1)
		{
			task1();
			SPI_1.task_1=0;
		}

然后直接使用就可以啦,包括在keil里的watch看这个结构体的内容也能收起来,非常方便

 总结

总结一下

第一步,在.h定义你的结构体长什么样,例如,你的结构体是猪

第二步,在你的要用的.c里去定义你要几只猪,叫什么名字

第三步,如果有在其他.c里用的需求就再去.h里声明一下你这几头猪的名字

然后就可以直接使用啦

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
mm_struct 结构体是 Linux 内核中用来管理进程地址空间的数据结构,它的定义位于文件 include/linux/mm_types.h 中。 mm_struct 结构体包含了与进程内存管理相关的所有信息,例如进程虚拟地址空间的起始地址、结束地址、页表、内存映射等等。它的定义如下: ``` struct mm_struct { struct vm_area_struct * mmap; // 进程的内存映射区域链表 struct rb_root mm_rb; // 进程的虚拟地址空间红黑树 struct rw_semaphore mmap_sem; // 进程 mmap 操作的信号量 unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); // 为进程映射新地址空间所使用的函数指针 unsigned long mmap_base; // 进程映射的基地址 unsigned long task_size; // 进程的虚拟地址空间大小 unsigned long highest_vm_end; // 进程虚拟地址空间中最高的地址 pgd_t *pgd; // 进程页表目录表 atomic_t mm_users; // 进程地址空间的使用计数 atomic_t mm_count; // 进程地址空间的引用计数 }; ``` 其中,各字段的含义如下: - mmap:进程的内存映射区域链表,用于存储进程的地址空间中各个区域的信息。 - mm_rb:进程的虚拟地址空间红黑树,用于存储进程地址空间中各个区域的信息,以便快速查找。 - mmap_sem:进程 mmap 操作的信号量,用于保护进程的内存映射区域链表,防止多个线程同时修改该链表。 - get_unmapped_area:为进程映射新地址空间所使用的函数指针,用于确定新映射的地址空间。 - mmap_base:进程映射的基地址,表示进程的虚拟地址空间中最小的地址。 - task_size:进程的虚拟地址空间大小,即进程可以使用的虚拟地址的范围。 - highest_vm_end:进程虚拟地址空间中最高的地址,即进程的虚拟地址空间的结束地址。 - pgd:进程页表目录表,用于存储进程的页表信息。 - mm_users:进程地址空间的使用计数,表示有多少个进程正在共享该进程的地址空间。 - mm_count:进程地址空间的引用计数,表示有多少个对象正在引用该进程的地址空间。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值