自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 Linux下的使用字符设备驱动框架编写ADC驱动 ——MQ-4传感器

ADC 的作用:模拟信号转换为数字信号模拟信号一般是指连续变化的电压信号,其数值在一定范围内变化。而数字信号是由一系列离散的数字表示, 只能取有限的值,通常以二进制形式表示。ADC通常由一个采样保持电路、一个比较器和一个计数器组成。采样保持电路将输入的模拟电压保持在一个稳定的值,比较器将这个稳定的值与一个参考电压进行比较,计数器记录比较器的输出信号的次数。ADC的分辨率是指ADC可以分辨的最小电压变化,通常用位数来表示。ADC的工作原理是将模拟信号。

2024-08-29 17:44:41 1542 2

原创 网页html版——在线查字典的一个web服务器

HTML是一种用于创建网页的标准标记语言。可以用dreamwave这个工具来写使用文本编辑器(如Notepad++、Sublime Text、Visual Studio Code等)创建一个新的文件,并将其保存为 .html 文件。

2024-08-27 20:48:47 1552

原创 混杂设备驱动、Linux内核中的中断、火焰传感器驱动、呼吸传感器驱动、等待队列

硬中断由硬件产生,每个设备或设备集都对应着一个中断向量号。中断处理函数一定要快点执行完毕,越短越好。Linux 系统为了解决中断处理程序执行过长和中断丢失的问题,将中断过程分成了两个阶段,分别是「上半部和下半部分」(或叫做顶半部和底半部)都是一个意思。上半部直接处理硬件请求,也就是硬中断,主要是负责耗时短的工作,特点是快速执行;下半部是由内核触发,也就是软中断,主要是负责上半部未完成的工作,通常都是耗时比较长的事情,特点是延迟执行。

2024-08-26 16:33:06 909

原创 字符设备驱动程序 --使用GPIO控制引脚高低电平(点亮LED)

在32位机中是4个字节。主设备号占高12位,次设备号占20位。主设备号从0~4095,次设备号虽然占20位,但是它的有效范围是从 0~256。(在早期的 Unix 系统中,次设备号通常只占用一个字节(8 位),因此最大值为 256。

2024-08-24 21:27:08 1028

原创 使用Linux内核自带的V4L2设备驱动 采集图像

V4L2代表Video for Linux Two,它是Linux内核的一部分,提供了一种统一的方式来访问各种视频输入/输出设备,如摄像头、电视卡等。

2024-08-17 17:50:49 1247

原创 gdb调试 查找段错误

core文件:当程序发生异常(如段错误)并退出时,操作系统可以选择生成一个 core 文件。这个文件包含了程序崩溃时刻的内存映像,通常还包括了程序的状态信息,如寄存器值等。3.执行代码让代码产生段错误(会生成一个包含错误信息的core文件)1.根据给定链接设置系统允许生成core文件。5.可以直接看到产生段错误的代码的位置。4.使用gdb调试core文件。先设置 程序崩溃时的core文件产生。2.编译代码时加入-g选项。记得改完之后重启虚拟机。

2024-08-01 15:45:28 593

原创 Makefile

学习Makefile的要求:把遇见的Makefile文件都看懂Makefile 里面是由一系列的规则组成的,这些规则格式如下:目标…... :依赖文件集合……命令 1命令 2 ……命令是以 tab 键开头的 shell 命令,用于执行具体的编译、链接等操作。命令列表中的每条命令必须以 TAB 键开始,不能使用空格!

2024-08-01 15:16:31 381

原创 Sqlite3数据库

关系型数据库:Mysql (开源,中型数据库)Oracle (大型数据库)SqlServerSqlite (小型,嵌入式,手机,相机)非关系型数据库:RedisNoSQL1.数组、链表、文件、数据库数组、链表: 内存存放数据的方式(代码运行结束、关机数据丢失)文件、数据库: 外存存放数据的方式(文件:数据量很小 处理效率很低DB 数据库 select update database。

2024-07-30 20:20:22 996

原创 Linux火焰传感器驱动程序

ioremap 函数用于将设备的,这样内核就可以通过普通的指针访问硬件寄存器。这里的 0x00000000 是 物理地址,而 regGPGCON 指向的是 虚拟地址。GPGCON 是 物理地址,即硬件寄存器的实际地址。regGPGCON 是 虚拟地址,即通过 ioremap 映射后的地址,用于内核访问硬件寄存器。

2024-07-26 17:47:37 311

原创 多路复用IO、TCP并发模型

CPU单核在同一时刻只能做一件事情,一种解决办法是对CPU进行时分复用(多个事件流将CPU切割成多个时间片,不同事件流的时间片交替进行)。在计算机系统中,我们用线程或者进程来表示一条执行流,通过不同的线程或进程在操作系统内部的调度,来做到对CPU处理的时分复用。这样多个事件流就可以并发进行,不需要一个等待另一个太久,在用户看起来他们似乎就是并行在做一样。PC寄存器 程序计数器 代码执行到哪里了 程序下一条要执行什么。有没有一种可以在单线程/进程中处理多个事件流的方法呢?一种答案就是IO多路复用。

2024-07-23 17:30:13 1436 2

原创 HTTP协议、Wireshark抓包工具、json解析、天气爬虫

全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。一发一收,一问一答明文传输 ,https密文 (加密了的)现在的主流网站都是https。

2024-07-18 20:29:06 1984 1

原创 线程邮箱.

线程间通信的一种通信机制,需要自己封装出来。项目中涉及到采集端需要多线程任务需要使用。

2024-07-13 20:28:15 295

原创 frame buffer ——帧缓冲区

帧缓冲区就像是屏幕的“草稿纸”,图形处理器(GPU)在上面绘制图像,然后将结果呈现到屏幕上。在嵌入式系统中,例如Linux系统下,可以通过访问特定的设备节点(如/dev/fb0)来直接读写帧缓冲区,从而实现图形输出或进行底层的图形编程允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作对于应用层,通过操作/dev/fb*,通过ioctl来用各种命令控制fb/usr/include/linux/fb.h 中查看。

2024-07-09 14:40:51 2802

原创 Bash ——shell

Bash作为用户与操作系统之间的接口,让用户通过命令行输入各种指令来控制和操作计算机系统。

2024-07-07 00:09:50 879

原创 指针回顾.

野指针:指向随机空间的指针空指针:指向内存地址为0x0的空间的指针注意:定义指针一定要初始化,防止成为野指针。

2024-07-06 19:27:23 502

原创 串口通信、IIC时序整理

并行通信是指多个比特同时通过并行线进行传输,这种方式的传输速率较高,但会占用大量的芯片资源;串行通信是指将数据拆分成一个个比特,按照先后次序在一根总线上进行发送,串行通信有着系统占用资源少,结构简单等优点,是主机间通信的常用方式。串口通信(Serial Port)是串行通信的一种,属于串行通信中的异步通信。串口通信是串行通信的一种具体实现,指的是使用串行通信接口(如RS-232、RS-485、USB串行接口等)进行的数据传输。

2024-07-03 20:09:39 1354

原创 使用AI大模型需谨慎

87以下都是统一的问法;就输入了这个(PS:问法有不严谨的地方,但是口语化)其中a=3,b=5,c=4 求sum。

2024-05-30 10:53:09 665

原创 进程、线程

•资源和独立性:进程是资源分配的基本单位,拥有独立的内存空间和系统资源;线程共享所属进程的资源,轻量级。•并发与并行:线程提供了更细粒度的并行执行,使得程序能更高效利用多核CPU。•通信与同步:线程间通信更直接但需处理数据同步问题,进程间通信相对复杂。•创建与切换开销:线程创建、切换、销毁和上下文切换比进程快,更适合需要频繁切换的场景。2、多进程(Multi-Process)、多线程(Multi-Thread)的优缺点?多进程和多线程是用于实现并发的两种常见方式,它们各自有一些优点和缺点。

2024-05-23 15:43:38 742

原创 2024/5/23 学习杂记

2. 结构混乱:goto破坏了程序的结构化编程原则,如顺序、分支(if-else、switch)、循环(for、while、do-while)等,这些结构提供了清晰的逻辑控制流控制方式。此时y和z的二进制表示分别为100和010,因此y|z的结果为110。此时y和z 的值都不是0,因此y && z 的结果为1。此时y和z的值都不是0,因此y||z的结果为1。3. 维护困难:goto使得修改和维护代码变得复杂,因为修改一处可能需要考虑对跳跃目标的影响,这可能导致连锁反应式的修改,增加了出错风险。

2024-05-23 11:55:03 1124

原创 2024/5/22 学习杂记

(A) int i;什么是定义?所谓的定义就是(编译器)创建一个对象,为这个对象分配一块 内存并给它取上一个名字,这个名字就是我们经常所说的变扯名或对象名。什么是声明::告诉编译器,这个名字巳经匹配到一块内存上了。声明可以出现多次。告诉编译器,这个名字已被预定了,别的地方再也不能用它来 作为变量名或对象名。上述举例中:(A) 是定义;(B) 是声明定义和声明最重要的区别:定义创建了对象并为这个对象分配了内存,而声明没有分配内存。

2024-05-23 08:42:31 1123

原创 TCP通信

TCP是传输层的协议。

2024-04-02 16:19:07 1170

原创 UDP实现聊天直播间 chatroom

1.memcmp() 函数memcmp() 函数用于比较两个内存区域前 n 个字节的内容。它接受三个参数:•const void *s1:指向第一个内存区域的指针。•const void *s2:指向第二个内存区域的指针。•size_t n:要比较的字节数。返回值: memcmp() 函数返回一个整数值,表示两个内存区域内容的比较结果:•如果 s1 和 s2 相同,返回0。•如果 s1 小于 s2(按字典序),返回一个小于0的值。•如果 s1 大于 s2(按字典序),返回一个大于0的值。

2024-04-02 10:24:29 1952

原创 网络、UDP(用户数据报)编程

网络层 数据的路由(如何从一个局域网到达另一个局域网) IP地址。domain:使用的协议族 AF_INET (IPv4协议族)dest_addr:目的地址信息存放的空间首地址。子网掩码是1的部分表示IP地址的网络位。子网掩码是0的部分表示IP地址的主机位。表示层 发送的数据是否加密。addrlen:存放接收到IP地址大小空间的首地址。src_addr:存放IP地址信息的空间首地址。应用层 传输的数据。

2024-03-07 15:12:01 1094

原创 消息队列、共享内存、信号灯

常用的 IPC 对象包括管道(pipe)、消息队列(message queue)、信号量(semaphore)和共享内存(shared memory)等。

2024-03-05 22:38:52 732

原创 IO接口 2月5日学习笔记

从流中读取nmemb个对象,每个对象size个字节,存放到ptr指向的空间中。向流中写入nmemb个对象,每个对象size字节大小,在ptr指向的空间中。函数每次调用将会返回当前文件指针所指向的字符,并将文件指针指向下一个字符。fgets会保留从终端接收的\n字符,并在其末尾加入\0。fgets需要给定最多读取的字符个数,没有越界风险。2.gets会去掉从终端接收的\n字符,换成\0字符。1.gets没有给定最多读取字符的个数,有越界风险。1.puts会在字符串末尾多打印一个\n字符。

2024-03-04 22:44:15 747

原创 进程间的通信IPC

进程间的通信方式:1.管道2.信号3.消息队列4.共享内存5.信号灯6.套接字。

2024-02-28 23:47:34 962

原创 线程互斥和同步

线程分离属性是指线程执行完后会自动回收资源,无需其他线程等待或回收。线程分离属性的主要作用是告诉操作系统,在线程结束时自动释放相关资源,而不需要其他线程来等待其结束并回收资源。这样可以避免资源泄漏和提高系统的性能。通常情况下,线程默认是处于非分离状态的,需要显式地设置为分离属性。

2024-02-28 23:30:57 1109

原创 exec族函数、线程

功能:使得进程能够在运行时动态地加载和执行不同的程序.l:参数以列表形式传递v:参数以指针数组形式传递e:更新环境变量p:在系统指定目录下查找文件getenv功能:获得环境变量名对应的值setenv功能:设置环境变量的值。

2024-02-27 00:01:12 945

原创 进程 Process

程序:存放在外存中的一段数据组成的文件进程:是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡。

2024-02-24 15:46:06 1164

原创 MiniShell 项目总结 2月21~22日总结

1.Terminal多窗口的使用可以更快捷方便的进行代码的调试以及vim 编辑器 的 vsp功能 分屏打开文件 利于 复制y 粘贴p2.之前所学IO的多有不熟悉 ,需要翻阅笔记才能对照着打出来。一是不熟练,其次就是理解也不够深刻3.对 man手册的使用更为熟练了 ,主要是对各个函数的参数进一步了解4.对char *tmpbuf 与 char tmpbuf[4096] ={0};以及加强char **p 和 char *p[]的理解。

2024-02-22 20:14:52 1073

原创 时间获取、文件属性获取 2月20日学习笔记

执行两次代码,打印出两次执行过程中新增的文件及删除的文件。

2024-02-20 21:20:36 962

原创 目录IO.

功能:重新设定文件描述符的偏移量参数:fd:文件描述符offset:偏移量whence:SEEK_SET 文件开头SEEK_CUR 文件当前位置SEEK_END 文件末尾返回值:成功返回当前偏移量失败返回-1。

2024-02-19 20:42:39 1920

原创 文件 IO

1.标准IO是库函数,是对系统调用的封装2.文件IO是系统调用,是Linux内核中的函数接口3.标准IO是有缓存的4.文件IO是没有缓存的文件IO:1.操作步骤:2.打开文件:open 接口有两种形式功能:打开文件并且获得文件描述符参数:pathname:要打开的文件名flags:标志位O_RDONLY 只读O_WRONLY 只写O_RDWR 读写O_APPEND 追加。

2024-02-19 11:02:13 1127

原创 标准IO.

I: 键盘是标准输入设备 ====》默认输入就是指键盘 /dev/inputO: 显示器是标准输出设备 ==》默认输出就是指显示器linux中一切都是文件。文件用来存储数据(数据,指令)。IO输入输出,操作对象是用 命令 ll 来查看文件权限用一种特殊的符号表示法来描述,通常可以看到类似rwxrwxrwx这样的权限字符串,以及它们对应的数字表示法111111111。这些符号和数字分别对应着文件或目录的读、写、执行权限,以及对这些权限的拥有者(用户)、所属组和其他用户的不同权限设定。

2024-02-18 20:12:08 672

原创 shell——2月3日总结

head命令用于查看文件开头的内容,tail命令则用于查看文件末尾的内容。它分配和调度处理器时间,确保每个进程都能得到执行,并控制进程之间的通信和同步,以保证系统的稳定和安全。文件管理:操作系统管理计算机上的文件和目录,包括创建、删除、复制、移动、打开文件等操作。总的来说,操作系统起着承上启下的作用,它使计算机硬件能够运行起来并提供给用户一个友好的界面,使用户能够方便地使用计算机资源和运行应用程序。操作系统是计算机系统中的核心软件,负责管理和协调计算机的硬件和软件资源,提供用户界面,并执行用户程序。

2024-02-05 08:58:30 1086

原创 malloc()函数、结构体、共用体、枚举 2月1日学习笔记

/通常在函数外部声明结构类型,这样就可以被多个函数所使用了结构体类型可以定义在函数内部,但这样结构体的作用域就只有这个函数内部了。

2024-02-01 19:50:01 1392

原创 指针2 1月31日学习笔记

strncpy函数用于将一个字符串的一部分拷贝到另一个字符串中。正常拷贝多了 一个n只拷贝前n个字符,最终dest中不会有'\0'正常拷贝if (n) 拷贝够了次数剩余拷贝 统统补0思路:// 结束条件 *src == '\0'// n次 拷贝完成没有strncmp函数用于比较两个字符串的前n个字符。函数用于将一个字符串的一部分追加到另一个字符串的末尾。

2024-02-01 16:28:39 1212

原创 指针、以及使用指针处理字符串

是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。不同语境下的指针:1.定义一个指针,是指定义一个变量,数据类型是指针类型,这个变量里面存放地址,也就是内存单元的编号。2.打印某个变量的指针,此时指针指的是地址变量的指针就是变量的存储地址,指针变量就是存储指针的变量。基类型 --- 数据类型//基本数据类型//数组类型//基类型 表示 指针变量 指向的目标的 数据类型。

2024-01-30 21:56:25 560 1

原创 变量的存储类别1月27日学习笔记

变量或函数。

2024-01-27 19:06:27 882 1

原创 打印日历1月26日总结

要求是输入年份和月份,把那个月的日期按照 cal 年份 那种格式打印出来。但目前来看这是个死胡同!明天再看看按天数是怎么推的吧。让完成一个日历的打印。

2024-01-26 22:01:15 774 1

线程邮箱,以及一些打开设备的代码

线程邮箱,以及一些打开设备的代码

2024-07-25

空空如也

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

TA关注的人

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