自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STM32寄存器编码流程总结(上部)

当引脚为输出时进行设置。

2025-03-20 16:08:00 584

原创 stm32学习4

创建Hardware\LED文件,其中有led.c和led.h文件,用于存放有关LED灯操作的方法;在User文件中创建delay.c和delay.h文件,用于存放延迟的方法;将方法进行分类保存在不同的 .c 文件中,方便复用和寻找;在led.h中声明方法名等,方便其他 .c 文件进行引用;在该方法中使用到了stm32中自带的系统时钟。

2024-11-05 20:58:51 204

原创 stm32学习3

在官方的文件中定义了很多的宏定义来表示stm32中每个引脚,这样可以简便开发;//1.时钟配置;为了让stm32的时钟与外设的时钟进行适配//2.GPIO工作模式配置;//3.PA0输出低电平;//4.使用一个死循环保存状态while(1){}上面的方法可以增强可读性,但还是存在缺陷,即是对寄存器的整体进行了改变,没有精确的改变某个位,就如ODR中每个位都控制着不同的引脚,如果对整体赋值,就可能会对其他地方产生影响。因此为了解决该问题可以使用位运算;

2024-10-29 21:21:51 372

原创 Synergy遇见的问题

首先两个设备是在同一个局域网中,但任然是无法ping通问题所在:防火墙进行了隔离;解决方法:(1)关闭防火墙(2)创建入站规则打开windows设置点击更新和安全在点击安全中心,之后点击网络保护进行高级设计选择入站规则,创建新的规则先选择右边的自定义,然后再协议和端口在协议类型中选择上ICMPv4,并点击自定义选择特定ICMP类型,勾选上回显请求,点击确定,然后点击下一页点击自定义选择下列接口类型,并勾选上局域网,点击确定,然后点击下一页直接点击下一页。

2024-10-27 23:08:09 935

原创 stm32学习2

目前最新的Keil ARM用的是 Compiler version 6,与前面的core_cm3.c不兼容,所以需要提前准备好Compiler version 5;先将Groups原因的文件删除(点击旁边的叉号),再添加文件(点击文件图标)编辑好名字,并选择添加文件的按钮;先去ST官网下载官方提供的外设标准库,里面有提供标准的启动文件;选择已经创建好的文件,并进行添加;(3)将核心文件复制到工程文件中的Start文件中。打开刚下载的文件寻找下面的文件进行复制;选择最先创建的工程文件,点击打开;

2024-10-27 19:47:54 394

原创 stm32学习1

STM32不是指一个单片机,而是一个系列的单片机;ST为意法半导体公司的简称,M表示该单片机为ARM Cortex-M类型的,32表示其为32位微控制器;(1)电源STM32需要使用的电压大小位3.3V;一路是USB的TypeC供电, TypeC提供的是5V,使用芯片AMS1117把5V转成3.3V;另一路是STLink下载器直接提供3.3V供电(下载器内部已经把5V转成了3.3V);(2)时钟SMT32提供了两路外部时钟:外部高速时钟和外部低速时钟;

2024-10-26 19:19:08 389

原创 算法学习5

完全二叉树:除最后一层其他层都要填满元素,且最后一层从左到右元素必须连续,可以不填满;heapSize只是一个标记,方便计算位置。每一个节点都是其子节点的最大值;(2)从任意节点开始向下。(1)从下开始向上进行。

2024-10-23 21:40:47 314

原创 STM32烧写准备

在弹出错误信息后,直接进行电脑重启,在进行固件升级即可解决;在点击Device Connect时会出现没有识别的弹窗。重新插拔type-C端接口,再进行连接即可解决;首先点击像插头的图形,页面出现列表即连接成功。点击像插头的图形,会有弹窗显示连接失败问题。点击烧写界面,会出现一个弹窗。

2024-10-23 00:10:49 764

原创 MQTT学习

是IBM推出的一种针对移动终端设备的基于TCP/IP的发布/订阅协议;可以连接大量的远程传感器和控制设备,MQTT的特点是可以保持长连接,具有一定的实时性;云端向设备端发送消息,设备端可以在最短的时间内接收到并做出响应;MQTT适用于实时控制的场合;因为需要保持长连接,时不时发送心跳包,因此耗电量高;MQTT的长连接需要建立在TCP的基础上,由于TCP协议的复杂性,所以对设备的要求较高;

2024-10-10 23:00:55 1061

原创 算法学习4

一个数组,选择其中一个数作为对照,把小于等于对照数的放在数组的左边,等于对照数的将其放在数组中间,大于对照数的放在右边;一个数组,选择其中一个数作为对照,把小于等于对照数的放在数组的左边,大于对照数的放在右边;的下一个数进行交换,并将小于区间向前移一位,(1)若当前数小于等于对照数,则将当前数与小于区间。(3)若当前数大于对照数,则将大于区间前一位数与当。(2)若当前数大于对照数,则直接将下标移动到下一。(2)若当前数等于对照数,则直接将下标移动到下一。(1)若当前数小于对照数,则将当前数与小于区间。

2024-10-10 20:19:14 559

原创 zigbee学习

其是一种新兴的短距离无线通信技术,用于传感控制应用;低功耗,比wifi蓝牙功耗更低;低成本;低速率;近距离;短时延;高容量;高安全;

2024-10-09 21:56:35 701

原创 RFID学习

RFID被称为无线射频识别,其是一种通信技术,通过无线电讯号耦合识别特定目标并读写相关数据;RFID主要位于典型物联网架构中的感知层,其因为具有非接触式特性,所有运用较广;

2024-10-06 22:10:45 520

原创 SQL学习3

callback:其为回调函数指针,当该条语句执行之后,sqlite3会去调用提供好的该函数,其用于处理有结果集时;errmsg:存放错误信息的地址,打印错误信息,printf(“%s\n”,errmsg);执行sql指向的SQL语句,若结果集不为空,函数会调用函数指针callback所指向的函数。para:表示sql执行函数sqlite_exec传给该函数的参数,其为任意类型;column_name:指针数组的地址,存放一行信息中各个列值对应列名的首地址;n_column:结果集的列数;

2024-10-03 22:33:57 438

原创 SQL学习2

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息;索引数据可能要占用大量的存储空间,因此并非所有数据都适合索引;在使用commit命令之前,可以将数据回滚到数据库修改之前;索引改善检索操作的性能,但降低了数据插入、修改和删除的性能;begin:开始一个事务,之后的所有操作多可以取消;用来保证一个列或一组列中的数据满足一组指定的条件;将结果集形成新的一张表,其可以保存,并反复查看;索引进行数据的排序,在查找是可以减少查询时间;其就是从多个表中查询想要的数据;

2024-09-29 22:44:10 502

原创 SQL学习1

数据库中提供了丰富的操作符配合where子句实现多种多样的匹配方法;对于嵌入式的数据库,其使用的是SQLite这种小型数据库;零配置、可移植、紧凑、简单、灵活、自由的授权、可靠、易用。其中可以使用’%'来表示缺少的字符,可以表示一个或多个;其不只可以搭配 in ,还可以搭配其他操作符;其默认按照升序,可使用desc使其按照降序;SQL是一种专门用来与数据库通信的语言;当数据库不存在时会创建数据库并打开;其表示只要满足其中每个条件的数据。其表示展示两个值之间的数据。表示对结果的数据进行排序;

2024-09-28 22:39:54 650

原创 linux网络编程9

readyState(请求状态):0为未初始化,1为正在加载,2为已经加载,3为交互中,4为完成;其是HTTP服务器与其他程序进行“交谈”的工具,通过CGI接口能在服务器端运行其他的程序;其最大的优点是在不重新加载整个页面的情况下,可用于服务器交换数据,并更新部分网页内容;CGI主要是将硬件获取到的数据传送到服务器,服务器通过AJAX技术将其传入到浏览器上;CGI传送给Web服务器的信息可以用各种格式,但但通常是HTML、XML的形式;是一种用于创建快速动态网页的技术;其本质是一种使用现有标志的新方法;

2024-09-27 22:03:14 417

原创 算法学习3

取左右部分中已经拷贝的元素的下一位数,与另外部分未拷贝的元素接着比较,并拷贝到辅助数组中,直到左右部分中的其中一部分全部拷贝过一遍;从左右部分的第一个数进行比较大小,将大(或者小)的数拷贝到一个辅助数组的第一个位置;接着将左右部分中未完全拷贝的部分,按照其当前顺序全部拷贝到辅助数组中;):表示在整个递归函数中除去调用函数的其他代码的时间复杂度。将数组分为左右两部分,分别对左右两部分进行排序;b:表示每个递归函数计算个数占整体多少份的倒数。a:表示在递归函数中递归函数被使用的次数。

2024-09-27 20:22:50 377

原创 linux网络编程8

(1)web前端开发技术HTML:为超文本标记语言;CSS:时一种定义样式结构,如字体、颜色、位置等;XML:是用于传输数据,而非显示数据,是各种应用程序之间进行数据传输的最常用的工具;Javaacript:是一种网络的脚本语言,常用于为网页添加各种各样的动态功能;AJAX:创建交互式网页应用的网页开发技术;(2)web服务器端开发技术CGI:式web服务器运行时外部程序的规范,按CGI编写的程序可以扩展服务器功能;ASP:可用来创建动态交互式网页并建立强大的web应用程序;

2024-09-25 23:07:13 981

原创 linux网络编程7

protocol:用于指定可以收发的数据包类型,ETH_P_IP(为IPV4数据包)、ETH_P_ARP(为ARP数据包)、ETH_P_ALL(为所有协议的数据包)标志字段中的最低位记为MF,当为1时表示后面还有数据的分片,当为0时表示时数据中的最后一个分片。生存时间:TTL,为跳数限制,用于限制数据包在路由器中转发的次数,当下降为0时表示丢弃该数据包。标志字段中的中间位置,记为DF,意思为不能分片,当为0时才可以分片。首部校验和:只用于校验数据报的首部,不包括数据。

2024-09-24 23:00:06 1089

原创 linux网络编程6

(1)交换机是一个扩大网络的器材,可以把更多的计算机等网络设备连接到当前的网络中;具备有性价比高、高度灵活、相对简单、易于实现等特点;转发过滤:能过滤并非转发到当前端口的信息;学习功能:对于连接到交换机的设备,都将其设备的MAC地址保存在其中的MAC地址表中还可以对VLAN的支持、对链路汇聚的支持、甚至还有防火墙的功能。

2024-09-22 23:04:28 500

原创 linux网络编程5

将套接字修改为被动,让操作系统给该套接字设置一个连接队伍,用来记录所有连接到该套接字的连接。关闭使用socket函数创建的套接字,会导致服务器无法接收新的连接,但不会影响已经连接的;其是关闭一个代表已经连接套接字,则会出现向另外一端接收到一个长度为0的数据包;关闭accept返回的套接字,则会导致其连接关闭,但不会影响服务器的;backlog:连接队列的长度,即设置服务器最大的连接客服的数量。其返回的是一个已连接的套接字,这个套接字代表当前这个连接。connect建立连接后不会产生新的套接字;

2024-09-21 22:09:12 921

原创 算法学习2

再将该元素与替换后位置的前一个元素进行交换,直到不需要交换(或没有前一个元素)就停止当前循环;从数组的第一个元素开始,当前元素与其前一个元素进行比较;大于(或小于时)将其进行交换,即当前元素替换到前一位;然后到该元素原先位置的下一个元素开始进行新一轮的循环;

2024-09-21 20:04:54 315

原创 linux网络编程4

optname:SO_BROADCAST(允许发送广播数据包)、SO_RCVBUF(接收缓冲区大小)、SO_SNDBUF(发送缓冲区大小)optname:IP_ADD_MEMBERSHIP(加入多播组)、IP_DROP_MEMBERSHIP(离开多播组)由一台主机向该主机所在子网内的所有主机发送数据的方式;其作用是将单个服务器与多个客户主机通信时减少分组流通;level:SOL_SOCKET(套接字层次)数据的收发仅仅在同一分组中运行;在IPv4中其地址为D类地址。optval:多播的结构体。

2024-09-20 22:46:44 558

原创 算法学习1

第一个元素与对相邻的元素进行比较,并交换,然后又从下一个元素开始与其下一个相邻的元素进行比较,直到比较到最后一个,又开始从第一个开始进行新一轮比较,直到比较到上轮比较最后一个元素的前一个结束。接下来将数组分为两部分,一部分为该位置上为1的集合,另一部分为该位置上位0的集合,对其中的一个集合中的所有元素进行异或计算,则可以得出其中一个值;首先将数组中的每个元素都进行异或算法,最后的结果为两个奇数的异或,让后在该异或中找到二进制位上位1的位置,其含义是在该位置上两个奇数的值不相同;其可以看作是不进位的相加。

2024-09-20 21:20:54 558

原创 linux网络编程3

在客户端的代码中,指设置了目的IP、目的端口,而客户端的IP和端口都是linux系统底层自动给客户端分配的;其是基于UDP协议实现的,因此在应用层中想要使用TFTP,那么传输层就一定要是UDP;from和addrlen可以为NULL,表示不保存数据来源。读写请求中操作码为1或2,代表为读或写,即上传或下传;向to结构体指针中指定的ip,发送UDP数据;from:源地址结构体指针,用来保存数据的来源。addrlen:from所指内容的长度。to:指向目的主机地址结构体的指针。

2024-09-19 23:06:23 578

原创 linux网络编程2

常用于语音和视频通话相较于TCP速度稍快些简单的请求、应答应用程序可以使用UDP对于海量数据传输不应该使用UDP广播和多播应用必须使用UDP。

2024-09-18 23:04:14 776

原创 linux网络编程1

通过分组来减少协议设计的复杂性,每一层利用下一层提供的服务来为上一层提供服务,每层服务的实现细节对上一层屏蔽(1)IP协议实现在一个相互连接的网络系统上从源地址到目的地址间传输数据包所提供必要功能不可靠:其不能保证数据包能成功到达目的地,仅提供尽力而为的传输服务无连接:每个数据包都是处理的,IP数据包可以不按发送顺序接收(2)TCP协议TCP是一种面向连接的、可靠的为不同主机上的进程间通信建立连接->使用连接->释放连接TCP数据包中包含序号和确认序号。

2024-09-16 22:57:10 971

原创 linux高级学习14

mmap函数:该函数的第三个参数表示该共享空间既可以写也可以读;第四个参数为该空间是共享得并且为匿名映射,即不需要文件描述符;则第五个参数与匿名对应将其改为-1。sem_init函数:将第二个函数写为1,表示进程间的信号变量。这些操作的函数与信号量操作使用的函数是一样的。(4)有名信号量的PV操作和销毁有名信号量。以下方法不使用信号量的初始化函数。oflag:为函数的权限标志。(3)有名信号量名字的删除。(1)有名信号量的初始化。其信号量使用无名信号量。其信号量使用有名信号量。(2)有名信号量的关闭。

2024-09-12 21:55:34 378

原创 linux高级学习13

即是将信号量初始化为1,每个线程对信号量先进行P操作,然后对共享区域进行操作,最后对信号量进行V操作。每个线程首先对自己的信号量进行P操作,然后对共享区域进行操作,最后对下一个线程的信号量进行V操作。PV原语是对信号量的操作,一次P操作使信号量减一,一次V操作使信号量加一。pshared:等于0,信号量在线程间共享;每个线程拥有一个信号量完成同步,先执行的任务信号量为1,其他为0。信号量本质上是一个非负整数计数器,用于控制对公共资源的访问。当信号量大于0时可以进行访问,否则阻塞。sem:信号量的地址。

2024-09-11 21:57:46 295

原创 linux高级学习12

在使用条件变量时当遇到条件不满足时,会将共享区域上的锁解开,然后阻塞线程等待条件满足,然后重新上锁,这些操作都是调用条件等待函数时完成,并且是原子操作。也可以使用静态初始化pthread_cond_t cond = PTHREAD_COND_INITIALIZER;条件变量是用来阻塞线程,其本身并不是锁,直到达到特定的要求;通常条件变量和互斥锁同时使用;attr:通常位默认值NULL。(4)唤醒被条件变量阻塞的线程。(1)条件变量初始化。

2024-09-09 22:58:03 355

原创 linux高级学习11

可以使用宏pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER进行初始化,但使用该方法不进行错误检测。互斥锁是一种简单的加锁方法,用于对共享资源的访问,互斥锁只有两种状态,加锁(lock)和解锁(unlock)attr:设置互斥量的属性,通常使用默认属性,即NULL;互斥锁的数据类型:pthread_mutex_t。其与分别申请读或写操作的锁配对。mutex:互斥锁地址。

2024-09-08 22:25:27 457

原创 linux高级学习10

线程的杀死不是实时的,是有一定的延迟,其需要达到取消点。这些属性可以通过函数进行改变其数值,用于适应不同的情况。将线程的回收工作分离出去,线程结束时,系统回收资源。start_routine:线程函数的入口地址。retval:用来存储线程退出状态的指针的地址。attr:线程属性结构体地址,通常位NULL。retval:存储线程退出状态的指针。thread:需要回收的线程号。thread:线程标识符地址。等待线程结束,并回收线程资源。arg:传给线程函数的参数。(5)线程的取消和退出。

2024-09-07 23:21:42 592

原创 linux高级学习9

位或权限位:共享内存位或权限位后可以设置共享内存的访问权限。SHM_RND:只有当shmaddr非空才有效;shmaddr:共享内存映射地址,推荐位NULL。IPC_STAT:保存shmid_ds参数。IPC_SET:设置shmid_ds参数。shmflg:共享内存段的访问权限和映射条件。shmflg:标识函数行为及共享内存的权限。SHM_UNLOCK:解锁共享内存段。SHM_LOCK:锁定共享内存段。IPC_RMID:删除。shmid:共享内存标识符。shmid:共享内存标识符。

2024-09-06 22:58:29 423

原创 linux高级学习8

提供IPC通信机制需要一个key值,通过key值就可以在系统中获取一个唯一的消息队列标识符,key值可以认为指定,也可以通过ftok函数获取。msgtyp < 0:返回队列中消息类型小于或者等于msgtyp的消息,如果消息有多个,则取类型最小的消息。flags:标志位,有MAP_SHARED(共享的)对映射区的修改会影响文件、MAP_PRIVATE(私有的)IPC_STAT:将消息队列相关的数据结构中的值,存放到buf指向的结构中。msgtyp:消息的类型,当有多个相同类型的消息,采用先进先出原则。

2024-09-06 21:04:18 721

原创 linux高级学习7

管道称为无名管道,其是一种特殊类型的文件,在应用层体现为两个打开的文件描述符,最古老的进程间通信方式(IPC)主要用于没有血缘关系的进程间通信,其是在物理内存中抽象出一部分内存规划为文件,用于进程间通信。filedes数组中存放了管道的文件描述符fd[0],fd[1]dup2函数用于复制文件描述符,与dup的区别为调用的形式区别。filedes[0]为读打开,filedes[1]为写而打开。将newfd作为oldfd的副本。

2024-09-03 22:58:40 326

原创 linux高级学习6

操作系统不允许用户直接对其进行位操作,需要自定义另外一个集合,借助信号集操作函数对其两个信号进行修改。每个进程都有阻塞集,创建子进程时子进程会继承父进程的阻塞集,其作用是暂缓信号的传送。同一主机的进程通信:无名通道,有名通道,消息队列,mmap,共享内存,信号。让新的文件描述符指向旧的文件描述符,其函数为dup、dup2。不同主机的进程通信:socket(网络通信)oldset为保存原先的信号阻塞集。在PCB中有两个重要的信号集,

2024-08-24 22:56:15 372

原创 linux高级学习5

信号是一种异步通信的方式,其是软件中断,可以导致一个正在运行的进程被另一个正在运行的异步进程中断,转而处理某一个突发事件信号的特点:简单,不能携带大量信息,满足某个特设条件才发送信号的产生信号在进程中的注册信号在进程中的注销编号名称事件默认处理动作当用户按某些终端键时,将产生信号硬件异常将产生信号,如除数为0,无效的内存访问等软件异常将产生信号(定时器)调用系统函数(如:kill、raise、abort)将发送信号运行kill / killall命令将发送信号。

2024-08-19 23:00:27 986

原创 linux高级学习4

使用上面的方法创建的子进程个数为2的n次方减1个,因为在父进程创建完子进程后子进程也会进行创建子进程。先调用fork,终止父进程(使用exit(-1)来结束),子进程调用setsid,将其设为会话。可以判断 i 的值来确定当前子进程为那个,用于区分子进程需要完成的任务。

2024-08-14 23:03:21 454

原创 linux高级学习3

使用fork创建进程得到的子进程是父进程的一个复制品,它从父进程中继承了整个进程的地址空间(包括进程上下文、堆栈等),其子进程独有的为进程号和计时器等,因此用fork创建进程代价很大。由于fork创建的子进程会复制父进程的上下文,所以在执行父进程中的fork函数后,其返回的值为子进程ID,在执行子进程中的fork函数后,返回的值为0。进程运行时,内核为进程每个进程分配一个PCB,维护进程相关的信息,linux内核的进程控制块为task_struct结构体。0号进程为内核进程,用于管理其他所有进程。

2024-08-13 22:57:04 539

原创 linux高级学习2

当文件是一个符号连接时,lstat返回的是该符号链接本身的信息;stat返回的是该链接指向的文件的信息。阻塞与非阻塞是对文件描述符而言,而不是指read、write等的特性;

2024-08-10 22:47:45 202

空空如也

空空如也

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

TA关注的人

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