自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MQTT相关

(命令 readelf-h 查看二进制文件的头部信息)1,要先移植openssl库,因为mqtt依赖这个库。首先有个mqtt库的源码。应用层网络协议(物联网层)正常有mqtt开源的库。一、mqtt库的移植。

2025-11-11 17:57:27 80

原创 华勤终面(是什么样的人,会什么技术)

内核驱动流程为:1,首先下载厂家提供的内核源码,然=然后我把内核源码拿过来加入我自己的外设驱动程序(eg dht11的驱动),先用动态加载的方式去编译这块模块进行调试,调试好了之后把编译过的.c文件加入到内核文件当中,并去修改对应目录的kconfig,修改kconfig单独加上这条驱动的配置项, 通过make menuconfig把配置项勾选上,最终生成的zlmage就带这个配置项(这个过程就叫内核裁剪)外设驱动(dht11等),控制器驱动(GPIO子系统,I2C等),控制器开发就属于bsp开发。

2025-10-29 16:37:14 344

原创 触摸按键与实体按键检测项目文档

本项目基于 ESP32 芯片,通过 FreeRTOS 操作系统实现触摸按键(2 个)和实体按键(1 个)的电平检测功能。项目采用任务调度机制,实时采集按键状态并打印输出,具备消抖处理逻辑,可稳定识别按键的触摸 / 未触摸、按下 / 未按下状态,适用于需要多按键输入的嵌入式场景。宏定义名称取值功能说明GPIO_NUM_4触摸按键 1 对应 GPIO 引脚GPIO_NUM_5触摸按键 2 对应 GPIO 引脚KEY_PINGPIO_NUM_7实体按键对应 GPIO 引脚1。

2025-10-27 10:20:44 638

原创 实习第二天 esp32-p4相关手册重点

• 智能家居 • 工业自动化 • 医疗保健 • 消费电子产品 • 智慧农业 • 零售自助终端(POS、售货机) • 服务机器人 乐鑫信息科技 • 多媒体播放器 • 摄像头视频流传输 • 高速USB主机与设备 • 智能语音交互终端 • 边缘视觉AI处理器 • HMI 控制面板。•专用接口管脚,只可用于特定外设,如flash、MIPIDSI、MIPICSI等–见表2-9专用接口管脚。•电源管脚,为芯片组件和非电源管脚供电–见表2-11电源管脚。•模拟管脚,专用于模拟功能–见表2-10模拟管脚。

2025-10-21 18:04:22 323

原创 实习第一天esp环境搭建(基于ESP—IDF)

【资料下载地址】:https://pan.baidu.com/s/1kCjD8yktZECSGmHomx_veg?【源码下载地址】:https://gitee.com/vi-iot/esp32-board.git。vscode中安装ESP-IDF插件,选择advance高级,设置目录(自定义文件夹),创建文件。bi站搜索esp入门 安装window下的esp环境搭建。安装vscode 和 git。

2025-10-20 16:42:45 97

原创 Linux驱动复习

用户——》用户层 dev/led (open) ——》主次设备号(主设备号代表哪一类设备,次设备号代表第几个设备)——》cdev——》file_operations(为cdev的结构体)1,字符设备驱动(一个一个字节)——芯片内部外设 :WDT,Timer,adc,iic,SPI,R,UART,LCD,CAMERA,USB,Keyboard,Mouse。3,网络设备驱动 ——协议栈,TCP/IP , Zigbee , bluetooth。2,点亮一个led灯流程(一个灯就是一个文件)

2025-04-03 15:24:07 285

原创 s3c2440—定时器

MPLL:倍频(晶振扩大,放大倍率)OM[3:2]:宽侧输入,窄侧输出。

2025-03-24 09:20:29 162

原创 epoll 数据库 并发性服务器

遍历时间复杂度为O(2logN)event:事件的结构体,在op= EPOLL_CTL_ADD或者 EPOLL_CTL_MOD时使用,create table 表名(列名1 数据类型, 列名2 数据类型, ....);insert into 表名 values(值1, 值2, 值3, ...);变量、数组、链表-------------》内存 :程序运行结束、掉电数据丢失。4.只能工作在水平触发模式(低速模式),不能工作在边沿触发模式(高速模式)select 列名1,列名2 from 表名;

2025-03-11 14:42:19 630

原创 构建服务器--在线单词查询

要在原基础上继续分割时,str传NULL;2,客户端本地可以缓存数据,不需要所有数据从服务端获取。1,使用专用的客户端,需要针对特定功能做开发。2,客户端不需要开发,只需要开发服务器。4,HTML(超文本开发语言)str:要分割的字符串首地址。1,通用的浏览器作为客户端。3,数据基本都来源与服务器。成功:分割到的字符串首地址。

2025-03-10 19:27:48 352

原创 POLL与EPOLL 并发性服务器

4.只能工作在水平触发模式(低速模式),不能工作在边沿触发模式(高速模式。4,可以工作在水平触发模式(低速模式),也工作在边沿触发模式(高速模式。2,文件描述符集合在应用层创建,需要实现应用层和内核层的反复拷贝。1,创建文件描述符集合:epoll_create()2,文件描述符集合创建在内核,避免了应用层和内核层的拷贝。2,将关注的文件描述符加入到集合:epoll_ctl()3,向应用层返回到达的IO事件的集合,不需要遍历查找。3,需要应用层对集合表进行遍历,寻找到达的事件。

2025-03-10 09:16:02 423

原创 Linux网络编程(网络协议/UDP/TCP/HTTP)

网络:不同主机,进程间通信目的1, 解决主机之间的硬件层面的互联互通2,解决主机间软件层面的互联互通IP地址:区分不同主机(软件地址)MAC地址:硬件地址协议:定义的网络标准。

2025-03-06 21:50:07 1062

原创 多进程——进程及线程

value:初始化的资源数。1.多个线程访问临界资源时,进行排他性访问(同一时刻只允许一个线程对该临界资源进行访问)当申请的信号量资源数>0 ,sem_wait表示申请到了该信号量,信号量资源数-1。restrict mutex:锁对象地址。restrict 锁的属性(NULL)pipefd[1]: 管道的写端。当申请的信号量资源数>0,sem_wait 阻塞等待信号量的释放。pipefd[0]:管道的读端。2.2)读管道/写管道:文件IO { read ,write。

2025-02-24 18:32:46 727

原创 Linux应用软件编程————多任务

正在执行的程序,需要消耗内存和CPU ,一个动态执行的全过程。内核中拷贝父进程的PCD块,更新自己的pid号。概念:进程动态执行过程,程序静态的数据集合。每个进程被创建时,操作系统会为该进程分配4G的虚拟内存空间。kill -信号编号/信号名称 接受信号的进程id。拷贝父进程0~3G的虚拟内存。成功:父进程:子进程的pid号。功能:通过拷贝父进程产生一个新的子进程。程序进程可以产生进程。| 管道:将前面的输出作为后面的输入。父进程:创建新进程的进程称父进程。查看系统中所有进程的信息和状态。

2025-02-20 19:14:31 613

原创 【无标题】

【代码】【无标题】

2025-02-19 20:31:57 189

原创 Linux目录IO

chmod -r / +r 目录名(test) 对目录(test)文件增加或减去读的权限。chmod 0777 test 权限全开。dirp:目录流指针。成功:读到的文件 的信息的地址。name:需要打开的目录名称。功能:读取目录中的一个文件信息。获取当前目录工作路径 函数:getcwd()功能:打开一个目录并获得一个目录流指针。2,读目录 : readdir。3,关闭目录: closedir。1,打开目录:opendir。当前目录路径:pwd。

2025-02-19 11:03:47 174

原创 Linux3——文件IO

标准IO (FILE *) 文件IO(FILE---int)O_RDONLY: 只读:文件必须存在 "r"功能:获取1970-1-10:0:0到现在的秒数 v。文件描述符是一个小的,非负的整型数据,代表了一个已打开的文件。文件io没有缓冲区,文件io只能用于Linux操作系统,属于系统内核调用。rwxrwxrwx r(读)w(写)x(执行)成功返回文件描述符;

2025-02-17 18:50:58 843

原创 Linux内核2

失败:在读取过程中,如果遇到文件末尾或发生错误,fread 将返回一个小于请求的数据项数量的值。成功:返回当前文件位置指针相对于文件开头的偏移量(以长整型 long 表示)。offset:表示相对于 whence 指定的位置的偏移量,以字节为单位。fseek(打开文件的地址,偏移量,SEEK_END/SEEK_CUR/SEEK_SET)size:要写入的每个数据项的大小(以字节为单位)size:要写入的每个数据项的大小(以字节为单位)功能:函数从指定的内存位置开始,将一块数据写入到指定的文件流中。

2025-02-17 09:36:20 954

原创 Linux应用软件编程 ————操作系统

2,读文件,写文件 fgetc()/fputc,fgets()/fputs(),fread()/fwrite()标准io:将一个打开的文件和一个文件流指针(FILE*)关联,后面操作文件,皆面对文件流指针。stderr------>标准出错流--->(关联的输出设备是)显示器(终端)stdout----->标准输出流--->(关联的输出设备是)显示器(终端)"r+" 以读写方式打开----文件必须存在。"r" 以只读的方式打开 ----文件必须存在。读到文件末尾:NULL。

2025-02-14 18:04:57 806

原创 数据结构 哈希表

存储数据时按照函数关系寻找存储位置,数据查找时根据关键字进行函数映射得到数据的存储位置。哈希存储(散列存储):将要存储数据的关键字和数据的存储位置之间建立起函数关系。解决哈希冲突:1,开放地址法 2,链地址法。基本方法:求余法和一次函数法。

2025-02-11 19:23:08 131

原创 数据结构:队列

2, 满队列:队尾+1和对头在同一位置时则为满(如下图)(牺牲了一个内存(储存)空间):提高效率(用户输入速度慢,CPU处理快,等缓冲区达到一定量再全部返给CPU)如何判断循环队列是空还是满(刚开始和结束时头和尾在一个位置)(当队头和队尾处于同一位置表示该队列为空)1 ,空队列:对头和对尾相遇。:缓存数据(缓冲区)

2025-02-11 19:22:47 250

原创 数据结构:栈

顺序表:顺序栈:满增栈,空增栈,满减栈,满减栈。出参:将函数执行获得的某个结果传递给被调函数。1.开发人员手动管理的区域,使用完手动释放。链表:链式栈(使用链表的方式实现栈结构)3.函数调用关系(保护现场和恢复现场)满栈:先移动栈顶,再增加数据。空栈:先移动数据,再增加栈顶。2.常量(eg 'a')5,清空栈(成为一个空栈)入参:传递给函数的执行条件。2.函数的形参和返回值。1.已初始化的全局变量。2.已初始化的静态变量。bss段:(未初始化)1.未初始化的全局变量。2.未初始化的静态变量。

2025-02-10 18:40:54 235

原创 20250206

创建列表 -> 插入数据(头插,尾插) -> 删除数据(头删,尾删) -> 查找,修改 -> 销毁链表。程序的设计:将现实中大量而复杂的问题以特定的数据类型和特定的存储结构存储在内存中,线性结构:元素之间一对一的关系(表(数组,链表),队列。索引存储:通过关键字构建索引表,通过索引表来来找到数据的存储位置。散列存储(哈希存储):将数据元素的存储位置与关键码之间建立确定对。一组用来保存一种或者多种特定关系的数据的集合(组织和存储数据)数据的物理结构:数据的逻辑结构在计算机内存中的存储形式。

2025-02-06 20:19:55 303

原创 20250122

C语言的结构体是一种自定义数据类型,它可以将不同变量组合在一起形成一个新的结构类型,方便程序的设计和数据的管理结构体的定义使用关键字struct,格式如下:struct 结构体名{数据类型 成员1;数据类型 成员2;...其中,结构体名为用户自定义的标识符,成员可以是任意的数据类型,包括基本数据类型和自定义的数据类型。结构体变量。

2025-01-22 20:45:24 269

原创 20250121

指针函数的返回值不得是局部变量(不能返回局部变量)它会向堆内存申请一块连续可用的空间,空间大小是。malloc分两次调用,分配的空间一定不连续。返回的是个指针,所以在使用它时要用指针接收。个字节,并返回指向这块空间的指针。是我们见得最多的动态内存函数。

2025-01-21 20:29:59 262

原创 20250120

const关键字在 C 和 C++ 编程语言中用于定义常量,即那些一旦初始化后其值就不能被修改的变量。const char* message // message 不能被函数修改。

2025-01-20 21:09:32 162

原创 20250117

对#define用法的几点说明:1)宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单粗暴的替换。字符串中可以含任何字符,它可以是常数、表达式、if语句、函数等,预处理程序对它不作任何检查,如有错误,只能在编译已被宏展开后的源程序时发现。2)宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起替换。3)宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令。

2025-01-17 11:23:31 802

原创 20250116

斐波那契数列斐波那契数列斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、34、……

2025-01-16 20:58:32 296

原创 20250115

函数的声明就是告诉编译器有一个函数叫什么,参数是什么,返回类型是什么,但是这个函数具体存不存在,函数声明决定不了函数的声明一般出现在函数使用之前,要满足先声明后使用。

2025-01-15 18:57:28 341

原创 20250114

是比较字符串中对应位置上的字符大小(ASC II码值大小),如果相同,就比较下一对,直到不同或者都遇到'\0'。strlen() 函数用于获取字符串的长度,即字符串中字符的个数,不包括字符串末尾的空字符(\0)。(1)目标空间必须足够大,以确保能放的下复制过来的字符串。字符串的赋值和比较都要调取函数,不能直接比较和赋值。Strlen函数:统计某个字符串中的有效字符个数。strcpy拷贝函数:strcpy(目标,源);字符串连接函数:Strcat函数。Strcat(目标,源);

2025-01-14 19:22:12 198

原创 20250113

插入排序法:插入排序是把一个记录插入到已排序的有序序列中,使整个序列在插入该记录后仍然有序。插入排序中较简单的种方法是直接插入排序,其插入位置的确定方法是将待插入的记录与有序区中的各记录自右向左依次比较其关键字值的大小。思路:选择排序的基本算法是从待排序的区间中经过选择和交换后选出最小的数值存放到 a[0] 中,再从剩余的未排序区间中经过选择和交换后选出最小的数值存放到 a[1] 中,a[1] 中的数字仅大于 a[0],依此类推,即可实现排序。每轮从第1个比到第n- i个(i代表第i轮)。

2025-01-13 17:45:46 185

原创 20250112

由于C语言是没有检查数组长度改变或者数组越界的这个机制,可能会在编辑器中编译并通过,但是结果就不能肯定了,因此不要越界或者改变数组的长度。可以将数组理解为大小固定,所放物品为同类的一个购物袋,在该购物袋中的物品是按一定顺序放置的。C语言的数组长度一经声明,长度就是固定,无法改变,并且C语言并不提供计算数组长度的方法。数组就可以采用循环的方式将每个元素遍历出来,而不用人为的每次获取指定某个位置上的元素。在C语言中,可以使用。2,数组中的元素当作函数参数,即把数组中的参数传入。,在函数中需要函数参数的称之为。

2025-01-12 20:38:06 341

原创 20250110

C语言编译系统在表示逻辑运算结果时,以数值1代表“真”,以数值0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”。当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,若所以的case中的常量表达式的值都没有与表达式的值匹配的时候,就执行default后面的语句。if语句是用来判定所给的条件是否满足,根据判定的结果(真或假)来决定执行给出的两种操作之一。switch后面括号内的表达式,其值可以是整型 ,字符型,枚举型等数据;***if语句后不跟分号。

2025-01-10 19:31:09 166

原创 20250109

putchar()是字符输出函数,用于在显示器输出一个字符例如:putchar(x);代表输出字符变量x的值//例如:先后输出Bit三个字符int main()putchar(a);putchar(b);putchar(c);return 0;getchar()函数用于从键盘上输入一个字符,通常把输入的字符赋予一个字符变量,构成赋值语句,例如:a=getchar();说明:(1)getchar()函数只能接收单个字符,输入数字也按字符处理。

2025-01-09 19:28:13 357

原创 20250107心得

int (signed int)有符号,占4Byte,范围:-2的31次方--2的31次方-1无符号,范围:0-2的32次方-1unsigned int。short(signed short int)占2Byte,范围:-2的15次方--2的15次方-1范围:2的16次方-1unsigned short。long(signed long int)占8Byte,范围:-2的63次方--2的63次方-1。1.signed char 范围:-2的7次方-2的7次方-1。单精度型--float:占4Byte(1)

2025-01-08 18:42:41 328

原创 【无标题】

码中的对应值.字节小的可以向字节大的自动转换,但字节大的不能向字节小的自动转换.char可以转换为int,int可以转换为double,char可以转换为double。运算时保持数据类型一致,int与int做除法运算时,结果的小数部分会丢失进行除法运算和求余运算时,右操作数为零时,编译器只做类型检查,不报错,但运行会导致程序蹦崩溃,余下内容也不再运行。自增/自减运算符前置和后置的区别:前置属于在原有内存空间内进行运算,后置需要系统创建临时变量并分配内存空间进行运算,用完后,该内存空间被收回。

2025-01-08 18:29:06 448

空空如也

空空如也

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

TA关注的人

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