- 博客(79)
- 收藏
- 关注
原创 dht11 + Sc32440驱动
构建了一个基本的Linux内核模块,用于通过GPIO接口与DHT11温湿度传感器进行通信。这个模块通过定义一系列的函数来实现对DHT11的初始化、发送启动信号、等待响应、读取数据位以及处理整个数据包的接收。超小的体积、极低的功耗,使其成为该类应用中,在苛刻应用场合的最佳选择。每个DHT11传感器都在极为精确的湿度校验室中进行校准。主机发送开始信号->主机读取响应信号->开始接收数据->主机发送停止信号。根据下面的时序图,并检测模块是否存在,功能是否正常。,确保产品具有极高的可靠性和卓越的。
2024-08-28 22:09:36
1191
1
原创 Linux —— 驱动——platform平台总线
adcconadcdat0clkcon:这些是指向硬件寄存器的指针,用于控制ADC和时钟。wq:等待队列头,用于在ADC转换完成时唤醒等待的线程。condition:一个标志,用于指示ADC转换是否完成。arg:传递给中断处理程序的参数(在这个例子中,实际上并未在中断处理函数中使用)。
2024-08-28 10:45:44
1387
原创 驱动——linux——中断处理
我们已经学习了中断,但当有更高优先级的中断处理时,会有中断嵌套的情况发送.ARM架构中使用中断的上下部处理机制,而是为了优化中断处理的效率和系统的响应性。将两种情况相结合。一、中断上下部。
2024-08-28 09:55:49
1002
原创 Linux——S3C2440驱动—中断按健-中断ADC
define指令用于定义ADC相关的寄存器地址和设备名称。全局变量包括指向ADC控制寄存器、ADC数据寄存器和时钟控制寄存器的指针,以及一个等待队列头和一个条件变量。
2024-08-28 09:50:39
810
原创 linux——驱动——GPIO子系统
GPIO(General Purpose Input/Output,通用输入输出)子系统是Linux内核中负责处理GPIO引脚的一个关键组件。它提供了一套接口,使得硬件工程师和软件开发者能够方便地使用和控制GPIO引脚,无论是初始化、设置引脚为输出并输出高低电平值,还是读取引脚的输入电平状态。的功能来与用户空间交互。例如控制LED、读取按键、触摸屏、鼠标都可以通过这些子系统接口实现。二、主要功能初始化GPIO:在系统启动时或设备驱动加载时,GPIO子系统负责初始化GPIO控制器及其下的引脚。
2024-08-26 13:49:15
1644
原创 Linux——驱动——自动设备
({ \})实际上,是一个宏定义,它内部调用了函数。参数owner:指向模块所有者的指针,通常为宏,表示当前模块。name:设备类的名称,该名称将用于在目录下创建对应的目录。返回值:返回指向新创建的结构体的指针,如果创建失败则返回ERR_PTR错误码。
2024-08-24 13:46:14
883
1
原创 ARM——驱动——inmod加载内核模块
字符设备是指在I/O传输过程中以字符为单位进行传输的设备。这类设备在数据传输时,数据被视为连续的字符流,逐个字符地进行读写操作。
2024-08-23 20:54:37
1118
原创 ARM——驱动——内核编译
在Linux内核开发中,驱动(Driver)是一种特殊的软件,它充当硬件设备和操作系统之间的接口。驱动程序允许操作系统控制和管理硬件设备,包括初始化设备、发送数据到设备、从设备接收数据以及检测和处理硬件错误等。
2024-08-22 22:27:05
1197
原创 ARM——驱动——Linux启动流程和Linux启动
lash存储器,全称为Flash EEPROM Memory,又名闪存,是一种长寿命的非易失性存储器。它能够在断电情况下保持所存储的数据信息,因此非常适合用于存储需要持久保存的数据。Flash存储器的数据删除不是以单个的字节为单位,而是以固定的区块为单位,区块大小一般为256KB到20MB。在ARM系统中,Flash存储器主要分为两种类型:NOR Flash和NAND Flash。
2024-08-22 22:26:47
1277
1
原创 S3C2440中断处理
需要注意的是在中断处理函数中,当处理完业务之后,必须将之前因中断产生而置位的中断标志位清除(一般写入1即可),顺序必须遵循如上框图,从左至右,依次清除;S3C2440提供了丰富的中断源,包括内部中断和外部中断,以及支持子中断的功能。(1)当有子中断时,SUBSRCPND和SRCPND会自动置位,紧接着需要将中断屏蔽寄存器和次级中断屏蔽寄存器(SUBMASK和INTMSK以及INTSUBMSK设置为0)使能(开启中断服务),此时表明中断设置成功;上图为中断处理的框图,首先中断源分为有子中断和无子中断两类;
2024-08-22 00:07:47
320
原创 ARM——操作示例
操作流程: (1)GPIO:可编程的输入输出引脚每一组io都有一个寄存GP*CON控制引脚作用,每个io都有2个位,控制引脚作用每一组io都有一个寄存GP*DAT控制引脚数据,每个io都有1个位,控制引脚数据(2)如图:在原理图中找到控制led的引脚端口,进而对引脚进行相应的输出配置。从下图可以看出当引脚为低电平时,LED会被点亮,所以需要寻找对应的nLED_1(对应的GPIO口)如下图,led对应的寄存器时GPB寄存器,因此使能GPBCON,使GPBDA的第五位输出低电平/再从下
2024-08-21 01:30:29
713
原创 arm——汇编语言
nop:空转一个机器周期,不准优化;高位 地位0x40001000不是一个立即数、函数传参1、四个以内的参数R0~R32、超过四个的参数使用栈传递返回值:返回值存放在R0中.汇编和从c相互调用:异常处理软中断的指令:示例代码这段代码是一个基于ARM架构的启动和中断处理示例,使用了ARM汇编语言编写。它主要展示了如何设置堆栈指针、切换处理器模式、处理软件中断(SWI)以及调用C语言函数。
2024-08-14 11:17:51
916
原创 Linux嵌入式学习——C++学习(2)
静态数据成员和普通数据成员一样遵从public、private、protected访问规则。由于静态数据成员在全局数据区分配内存,属于本类的所有对象共享,它不属于特定的类对象,在没有产生类对象时作用域就可见。即在没有产生类的实例时,我们就可以操作它。<数据类型><类名>::<静态数据成员> = <值>类的静态数据成员有两种访问方式:如果静态数据成员的访问权限允许的话,即为public成员,可在程序中,按上述格式来引用静态数据成员;静态数据成员主要用在各个对象都有相同的某项属性的时候。
2024-08-09 20:11:06
1252
原创 Linux——嵌入式学习——C++学习(1)
对象——对象具有状态和行为。例如:一只狗的状态-颜色,名称,品种 或 行为-摇动,叫唤,吃.对象是类的实例。类——类可以定义为描述对象行为/状态的模板,蓝图。方法-从基本上说,一个方法表示一种行为。。一个类可以包含多个方法。可以在方法中写入逻辑以及执行的动作计时变量-每个对象都有其独特的即时变量对象的装特都是由这些即时变量的值创建的。定义一个类需要使用关键字 class,然后指定类的名称,并类的主体是包含在一对花括号中,主体包含类的成员变量和成员函数。
2024-08-07 00:18:39
917
原创 项目学习——环境监测系统a
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。
2024-08-07 00:18:32
185
原创 Linux嵌入式学习——数据结构——树(tree)
定义:给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,则这样的二叉树被称为哈夫曼树。性质哈夫曼树的带权路径长度是最小的。权值较大的结点离根较近,而权值较小的结点则离根较远。哈夫曼树的总结点数是2n-1(n是叶子节点数)。定义:哈希表是一种通过哈希函数组织数据,以支持快速插入和搜索的数据结构。性质提供快速的插入和查找功能,理论上可以在O(1)时间复杂度内完成。基于数组存储数据,通过哈希函数将关键码值映射为数组下标。
2024-07-29 20:09:25
746
原创 Linux嵌入式学习——数据结构——队列
1)定义是只允许在一端进行插入操作,而在另一端进行删除操作的线性表队列 是一种 先进先出(First In First Out) 的线性表线性表有顺序存储和链式存储,栈是线性表,所以有这两种存储方式同样,队列作为一种特殊的线性表,也同样存在这两种存储方式(2)队头允许删除的一端称为对头(3)队尾允许插入的一端称为队尾。
2024-07-27 10:50:03
829
原创 Linux嵌入书学习—数据结构——栈(seqstak)
是限定仅在表尾(栈顶)进行插入和删除操作的线性表栈又称为后进先出(Last In First Out)的线性表,简称 LIFO 结构。
2024-07-25 14:20:50
690
原创 Linux嵌入式学习——数据结构——概念和Seqlist
零个或多个数据元素的有限序列元素之间是有顺序了。如果存在多个元素,第一个元素无前驱,最有一个没有后继,其他的元素只有一个前驱和一个后继。当线性表元素的个数n(n>=0)定义为线性表的长度,当n=0时,为空表。在非空的表中每个元素都有一个确定的位置,如果a1是第一个元素,那么an就是第n个元素。线性表的常规操作ADTchar sex;int age;int score;DATATYPE;Datatype;int tlen;
2024-07-23 09:13:47
776
原创 Linux操作系统——数据库
数据库sun1、分类: 大型 中型 小型关系型数据库2、名词:DB 数据库 select update databaseDBMS 数据库管理系统MIS 管理信息系统OA 办公自动化3、嵌入式数据库:GNU特点:1、开源 C语言开发2、代码量少 1万行左右,总大小10M以内3、绿色软件无需安装4、文件型数据库,可以移动。
2024-07-15 23:36:48
1620
原创 Linux——多路IO
④ select返回-1表示错误,返回0表示超时时间到没有监听到的事件发生,返回正数表示监听到的所有事件数(包括可读,可写,异常),通常在处理事件时 会利用这个返回值来提高效率,避免不必要的事件触发检查。① readfds等是指针结果参数,会被函数修改,所以一般会另外定义一个allread_fdset,保持全部要监听读的句柄,将它的拷贝传递给select函数,返回可读的句柄集合,类型fdset支持赋值运算符=;这样,进程就可以在需要时处理IO事件,而无需轮询或阻塞等待。
2024-07-13 09:18:48
646
原创 【无标题】
1、IP头格式(1)版本 占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。关于IPv6,目前还处于草案阶段。(2)首部长度 占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。
2024-07-12 16:07:48
846
原创 Linux_网络编程_TCP
client / server brow / serb / s http p2p 1、模式 C/S 模式 ==》服务器/客户端模型server :socket()-->bind()--->listen()-->accept()-->recv()-->close()client :socket()-->connect()-->send()-->close();int on = 1;setsockopt(listfd, SOL_SOCKET,SO_REUSEADDR
2024-07-09 19:25:43
1191
原创 Linux——网络编程——UDP
dest_addr: 必选,表示要发送到的目标主机信息结构体。buff 要存储数据的内存区,一般是数组或者动态内存。len 要获取的数据长度,一般是buff的大小。1、根据以上知识点编写UDP测试程序,验证UDP协议的无链接性质。buff 本地的数据存储,一般是要发送的数据。src_addr 可选,表示对方的地址信息结构体,3、将以上知识点融合,考虑如何实现一个基于UDP的聊天室程序。1、要有注册过程,每个客户端必须在服务器端有注册信息。bind() 客户端是可选的,服务器端是比选的。
2024-07-09 11:51:12
1120
原创 linux——网络编程(1)ositcp
网络编程1、OSI 模型 ===》开放系统互联模型 ==》分为7层:理想模型 ==》尚未实现tftpa /etc/123应用层表示层 加密解密 gzip会话层 网络断开,连接状态,keep-close keep-alive传输层tcp udp 协议 文件 视频,音频网路层ip NAT链路层 交换机 数据的格式化 帧 校验物理层 100Mb/8 Gbits 100MB 同轴电缆 10Gb 2.4G 5G。
2024-07-08 09:54:40
970
原创 进程间通信————信号通信,共享内存,IPC对象之信号量集
void fun(int sig) ////sig 接收到的信息编号10 SIGUSR112 SIGUSR2专门预留给程序员使用的未定义信号。printf("老爸叫你\n");i++;printf("老妈叫你\n");i++;return 0;
2024-07-03 19:35:33
980
原创 linux——IPC 进程间通信
在多进程操作系统中,不同的进程可能需要交换数据以完成共同的任务。:由于进程空间的独立性,一个进程无法直接读取或修改另一个进程的内存空间中的数据。这个返回值0是一个特殊的信号,它告诉读端进程,管道的写端已经被关闭,并且管道中没有更多的数据可以读取了。==>fd 是固定写端。函数从管道中读取数据,并且管道已经为空(即没有任何待读取的数据),同时写端已经被关闭,那么。1,读端存在,一直向管道中去写,超过64k,写会阻塞。2,写端是存在的,读管道,如果管道为空的话,读会阻塞(读的快,写的慢)
2024-07-03 10:46:44
950
原创 IPC_l练习
1.fifo a,b 实时聊天。发送#quit,a,b都退出。如果没找到,显示单词输入错误。如果输入#quit,退出。2.pipe,父进程把dict.txt写入管道。子进程从终端接收需要查找的单词。
2024-07-03 10:39:13
141
原创 Linux——互斥与同步练习
启动三个线程,th1输出a,th2输出b,th3输出c。不能重复买票,将100张车票均匀的从两个。用多线程程序设计一个火车票售票系统,要求至少有两个售票窗口,每个售票窗口。窗口1 卖出车票 1。窗口2 卖出车票 2。窗口1 卖出车票 3。窗口2 卖出车票 4。
2024-07-02 09:45:15
283
原创 Linux——线程练习
主线程,接收一个表达式,填充结构体,传递给th1线程,th1线程结算结果,并返回给主线程。1.创建一个多线程程序,至少有10个子线程,每个线程有会打印不同的数据,同时表明身份。
2024-07-01 11:50:03
332
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人