- 博客(109)
- 收藏
- 关注
原创 git的使用
Git是一个免费开源的,它使用一个特殊的叫做仓库(repository)的数据库来记录文件的变化。仓库中的每个文件都有一个完整的版本历史记录,可以看到谁在什么时间修改了哪些文件的哪些内容,在需要的时候也可以将文件恢复到之前的某一个版本。
2025-05-27 23:57:06
1074
原创 Linux网络编程
前面对于进程间通信我们讲了:管道、消息队列、共享内存、信号、信号量。这5种通信方式都是依靠Liunx内核。这也造成了他们的一个缺点就是,这些通信方式只能在单机运行。那么如何实现多机通信呢?这就需要引入网络编程。那么网络有哪些呢?就从嵌入式出发,有Linux与Android、IOS、各种单片机,或者是Android对Android等等。网络编程中有两个主要的问题:1、如何准确地定位网络上一台或多台主机以及定位主机上的特定的应用?答:通过通信双方地址。地址由IP地址和端口号组成。
2025-05-19 00:08:52
727
原创 Linux搜索
cd/usr/include/ //进入头文件目录地址。(*是在当前目录,n 是找出来显示行数,i 是不区分大小写,r 是递归)假如我们要搜索 struct sockaddr_in。现在找到在linux.h的184行 我们就可以输入。
2025-05-19 00:02:45
208
原创 Linux进程脚本和记录数据
文件是 Unix、Linux 等类中常见的脚本文件,扩展名为.sh是一种约定俗成的做法,用于表明这是一个 shell 脚本文件。.sh文件本质上是一个纯文本文件,其中包含一系列可在 shell 环境中执行的命令。这些命令按顺序排列,当执行该脚本时,shell 会逐行读取并执行这些命令。在 Unix/中,要执行.sh文件,需要为其赋予执行权限。可以使用chmod./test.sh在赋予执行权限后,可以直接通过文件名来执行脚本:这里的./表示当前目录,因为系统默认不会在当前目录中查找可执行文件。
2025-05-15 12:43:45
433
原创 Linux线程
条件变量是线程另一可用的同步机制。条件变量给多个线程提供了一个会合的场所。条件变量与互斥量一起使用时,允许线程以无竞争的方式等待特定的条件发生。条件本身是由互斥量保护的。线程在改变条件状态前必须首先锁住互斥量,其他线程在获得互斥量之前不会察觉到这种改变,因为必须锁定互斥量以后才能计算条件。条件变量使用之前必须首先初始化。
2025-05-15 11:31:51
1035
原创 进程间的通信
第一行是真实处理信号的函数:中断函数的原型中,有一个参数是 int 类型,显然也是信号产生的类型,方便使用一个函数来处理多个信号,即注册函数的第二个参数可以调用信号处理函数并执行其中的功能。在操作系统中,申请内存的最小单位为页,一页是4k字节,为了避免内存碎片,我们一般申请的内存大小为页的整数倍,即以兆为单位(1024)第一次创建完共享内存时,它还不能被任何进程访问,shmat函数的作用就是用来启动对该共享内存的访问,并把共享内存连接到当前进程的地址空间,即将共享内存映射进进程中。
2025-05-12 22:40:25
718
1
原创 Linux进程
(1)一个父进程希望复制自己,使父,字进程同时执行不同的代码段。这在网络服务进程中是常见的——父进程等待客户端的服务请求。当这种请求到达时,父进程调用fork,使子进程处理此请求。父进程则继续等待下一个服务请求到达。(2)一个进程要执行一个不同的程序。这对shell是常见的情况。在这种情况下,子进程从fork返回后立即调用exec由fork创建的新进程被称为子进程(child process)。fork的数被调用一次,但返回两次。两次返回的唯一区别是。
2025-04-27 13:34:58
696
原创 Linux文件编程
3、文件平时是存放在块设备中的文件系统文件中的,我们把这种文件叫静态文件,当我们去open打开一个文件时,Linux内核做的操作包括:内核在进程中建立一个打开文件的数据结构,记录下我们打开的这个文件;2、强调一点:我们对文件进行操作时,一定要先打开文件,打开成功之后才能操作,如果打开失败,就不用进行后边的操作了,最后读写完成后,一定要关闭文件,否则会造成文件损坏。1、在Linux中要操作一个文件,一般是先open一个文件,得到文件描述符,然后对文件进行读写操作(或其它操),最后是close关闭文件即可。
2025-04-24 15:33:46
772
原创 Linux指令合集
cp 拷贝指令 cp b.c test,c 拷贝b.c 到test.c。重命名 mv a.c b.c 将a.c文件重命名为b.c。mkdir 创建文件夹 比如:mkdir test 创建文件夹名为test的文件夹。ls 列出当前文件夹下有哪些文件 ls -a 显示所有文件,包含隐藏的文件和文件夹。命令行模式:默认此模式,从输入模式回到命令行模式:esc , esc按完,insert消失。
2025-04-21 22:29:52
229
1
原创 FreeRTOS中断管理
在我们的操作系统,中断同样是具有优先级的,并且我们也可以设置它的优先级,但是他的优先级并不是从 0 ~ 5 ,默认情况下它是从 5 ~ 15 , 0 ~ 4 这5个中断优先级不是FreeRTOS控制的(5是取决于configMAX_SYSCALL_INTERRUPT_PRIORITY)。首先设置好中断,并勾选RTOS。任何中断的优先级都大于任务!
2025-04-20 22:20:13
209
原创 FreeRTOS软件定时器
如果定时器服务任务的优先级设置的高的话,定时器命令队列中的命令和定时器回调函数就会及时的得到处理。STM32芯片自带硬件定时器,精度较高,达到定时时间后会触发中断,也可以生成PWM、输入捕获、捕获比较,等等功能强大,但是由于硬件的限制,个数有限。在调用函数vTasksStartScheduler()开启任务调度器的时候,会创建一个用于管理软件定时器的任务,这个任务就叫软件定时器服务任务。定时器是一个可选的,不属于FreeRTOS内核的功能,他是由定时器服务任务来提供的。只超时一次,调用一次回调函数。
2025-04-20 18:36:26
886
原创 FreeRTOS延时函数
vTaskDelay作用时让任务阻塞,任务阻塞后,RTOS系统调用其它处于就绪状态的优先级最高的任务来执行。HAL_Delay一直不停的调用获取系统时间的函数,直到指定的时间流逝然后退出,故其占用了全部CPU时间。绝对延时:vTaskDelayUntil。相对延时:vTaskDelay。
2025-04-19 23:29:34
115
1
原创 FreeRTOS任务通知
ulBitsToClearOnExit:表示在函数退出前,清零任务通知值那些位,(置1)在清零前,接收到的任务通知值会先被保存到形参*pulPreviousNotifyValue中。pdFALSE:把通知值减一(计数型信号量);在大多数情况下,任务通知可以替代二值信号量,计数信号量,事件标志组,可以替代长度位1的队列(可以保存一个32位整数或指针数),并且任务通知速度更快,使用的RAM更少!如果被通知任务没有取走上一个通知,由接收到一个通知,则这次通知值丢弃,在这种情况下视为调用失败并返回pdFALSE。
2025-04-19 00:11:48
993
原创 FreeRTOS事件标志组
事件标志组本质是一个16位或32位无符号的数据类型EventBits_t,由configUSE_16BIT_TICKS决定(如果是0,代表是32位,其它情况下是16位)尽管使用32位无符号的数据类型变量来存储事件标志,但其中的高8位用作存储事件标志组的控制信息,低24位用作存储事件标志,所以说一个事件组最多可以存储24个事件标志!事件标志组:是一组事件标志位的集合,可以简单的理解事件标志组,就是一个整数。uxBitsToSet:指定要在事件组中设置的一个或多个位的按位值。设置之后事件组中的事件标志位值。
2025-04-17 23:41:06
236
原创 FreeRTOS互斥量
举个例子,这里有A,B,C三人,优先级是依次下降的,首先C醒来先去上厕所,上到一半,A醒来也要上厕所,但是厕所已经被C占用了,所以A被阻塞了,然后B醒来,但是他不上厕所,他喝水,所以B也执行完任务了,接着C完成上厕所,最后才到A。当C在上厕所时,A被阻塞了,在优先级继承中,C的优先级就会被提升到A的优先级,且不会被B醒来打断,这样C执行完任务,就轮到A执行。在多数情况下,互斥性信号量和二值型信号量非常类似,但是从功能上二值型信号量用于同步,二互斥型信号量用于。成功,返回对应互斥量的句柄;
2025-04-17 11:08:00
219
原创 FreeRTOS计数信号量
计数型信号量是相当于队列长度大于1的队列,因此计数型信号量能够容纳多个资源,这在计数型信号量被创建的时候确定的。uxInitialCount:创建信号量是分配给信号量的计数值,也就是初始放几个信号量。uxMaxCount:可以达到的最大计数值,也就是可以放几个信号量。计数型信号量的释放和获取与二值信号量完全相同!成功,返回对应计数型信号量的句柄;首先,要enable下面的值。失败,返回NULL。
2025-04-17 10:21:52
122
原创 FreeRTOS二值信号量
信号量,其中,信号可以起到通知信号的作用,然后我们的量可以用来表示资源的数量,当我们的量只有0和1的时候,它可以被称为二值信号量,只有两个状态,当我们的量没有限制时,比如0,1,2,3,4,5,6.......,它就是计数型信号量。二值信号量就是一个长度为1,大小为零的队列,只有0和1两种状态,通常情况下,我们用它来进行互斥访问或任务同步。注意,在cubeMX中信号量是已经放入的,所以一上电是不能放入的,故一开始按获取是失败的。失败,返回errQUEUE_FULL。成功,返回对应二值信号量的句柄。
2025-04-16 23:53:29
234
原创 FreeRTOS队列
队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间,中断和任务间传递消息。通常使用先进先出(FIFO)的数据存储缓冲机制,即先入队的数据会先从队列中被读取。也可以配置为后进后出(LIFO)方式,但用的比较少。使用实际值传递,即将数据拷贝到队列中进行传递,也可以传递指针,在传递较大的数据的时候采用指针传递。队列不属于某个任务,任何任务和中断都可以向队列发送/读取消息当任务向一个队列发送消息时,可以指定一个时间,假设此时队列已满无法入队。
2025-04-16 22:51:54
601
原创 任务的状态
类似暂停,通过调用函数 vTaskSuspend() 对指定任务进行挂起,挂起后这个任务将不被执行,只有调用函数 xTasResume() 才可以将这个任务从挂起态恢复。处于就绪态的任务是指那些能够运行(没有被阻塞和挂起),但是当前没有运行的任务,因为同优先级或更高优先级的任务正在运行。当任务处于实际运行状态称之为运行态,即CPU的使用权被这个任务占用(同一个任务仅一个任务处于运行态)。如果一个任务因延时,或等待吸信号量、信息队列、事件标志组等而处于的状态被称之为阻塞态。
2025-04-16 18:06:56
217
原创 FreeRTOS任务的创建和删除
xReturned == errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY 创建成功。其实就是堆栈的分配,动态堆栈是由系统分配,而静态是由用户自己传递,一般情况下使用动态来创建任务。任务其实就是线程/进程,创建一个任务,就会在内存开辟一个空间,例如:游戏运行,浏览器,都是一个任务。xTaskCreate() 函数原型。vTaskDelete() 函数原型。看返回值就可以知道任务是否创建成功。优先级我们选normal即可。
2025-04-16 17:45:57
147
原创 FreeRTOS的移植串口
前面的FreeRTOS移植就不过多介绍,直接说说将串口接入cubeMX,在cubeMX中打开串口后,直接打开usart.c文件,插入下面的代码。然后直接在main文件里面,直接写printf ()函数即可实现串口的传输,上电即可发送。
2025-04-16 16:38:34
116
原创 独立看门狗(IWDG)
操作(即重置计数器的值)来刷新计数器,那么就不会产生复位信号,系统将继续正常运行。CPU在接收到这个复位信号后,会重新启动系统,以确保系统从可能的错误或死锁状态中恢复。IWDG)主要作用是主要用于检测外界电磁干扰,或硬件异常导致的程序跑飞问题。可以在停止模式和待机模式下工作,确保在这些模式下系统仍然受到保护。当计数器的值从某个初始值开始递减,并一直减到。操作通常是由程序在正常运行时定期执行的,)作为时钟源,即使在主时钟发生故障时,0时,系统会产生一个复位信号(: 看门狗的时钟源频率。
2024-11-25 21:42:00
352
原创 定时器输入捕获实验配置
最后就是回调函数 HAL_TIM_IC_CaptureCallback ,在中断处理函数里面找的到,但是我们的步骤图里面写出来了 就不一一找了。定时器基本配置,是一个TIM_Base_InitTypeDef类型的结构体变量,包含了定时器的时钟分频系数、计数模式、自动重装载值等信息。定时器状态,表示定时器的当前状态。一共两个参数,第一个还是句柄 handle ,第二个就是中断的类型,这里我们选择上面的更新中断类型。一共也是两个参数,句柄和通道,句柄没得说直接使用创建,通道就是我们使用的通道二。
2024-11-11 00:34:46
465
原创 32单片机HAL库的引脚初始化
第一个“GPIO_TypeDef”,这个结构体主要定义了需要初始化的GPIO分组,哪一组GPIO口。PIN:定义需要配置的GPIO引脚 ,可配置参数:GPIO_PIN_(0-15)这里的输入的三种模式在下面的Pull里面选择,其余的模式我已经备注好在上面。由这个函数可以看出,在初始化GPIO时,需要向函数传入2个结构体,读的引脚进入 端口输入数据寄存器(GPIOx_IDR)Mode:设置工作模式,一共八种工作模式。Speed:翻转速度,低速,中速,高速。(组别,引脚数,高低电平)把值赋进 端口位设置。
2024-11-03 00:21:51
505
1
原创 18.DHT11编程案例
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,应用领域:暖通。模块,模块一次完整的数据传输为。引脚安装:可以买封装好的。,51单片机发送序列指令给。直接出结果,不用转化。
2024-09-20 00:22:02
347
原创 17. LCD1602编程案例
为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。为读写信号线,高电平时进行读操作,低电平时进行写操作。这样不行,因为写入显示地址时要求最高位。接正电源时对比度最弱,接地时对比度最高,对比度。端由高电平跳变成低电平时,液晶模块执行命令。同为低电平时可以写入指令或者显示地址,当。)是一种工业字符型液晶,能够同时显示。例如第二行第一个字符的地址是。就可以将光标定位在第二行第。为高电平时可以读忙信号,为低电平时可以写入数据。为液晶显示器对比度调整端。的电位器调整对比度。,使用时可以通过一个。
2024-09-14 14:52:41
627
原创 WIFI模块的引入
上电后,通过串口输出一串系统开机信息,购买的部分模块可能电压不稳,导致乱码,以。上一节每次发送数据都要进行字符长度设定,如果设置成透传,就有点像蓝牙模块的玩法。响应,也要求一行最多有一个,不允许上报的一行中有多条指示或者响应。指令,控制类都要加回车,数据传输时不加回车。其对所传输的数据包大小有定义:即对于。字符的长度(包括最后的空字符)。尾,响应或上报以回车换行为结尾。指令测试通信及模块功能是否正常。以设备模式接入家中路由器配置。对于由终端设备主动向。两个字符外,最多可以接收。指令集是从终端设备(
2024-09-10 23:54:07
445
原创 蓝牙模块的引入
透传即透明传送,是指在数据的传输过程中,通过无线的方式这组数据不发生任何形式的改 变,仿佛传输过程是透明的一样,同时保证传输的质量,原封不动地到了最终接收者手里。等模块玩法一样,对嵌入式程序员来说,不需要关心通讯模块内部数据及协议栈工作原理,只要通过串口编程获得数据即可。蓝牙模块,又叫做蓝牙串口模块。
2024-09-10 23:48:17
391
原创 AUXR-特殊功能寄存器(只写)
使用定时器作为波特率的发生器,定时器工作的时候时钟可能会对外有电磁辐射。它的高六位都是空的,赋值也没有意义,但是B1和B0是有值的。B0(ALEOFF)位置1,禁止ALE信号输出,提升系统的。Auxiliary Register(只写)功能,复位后为0,ALE信号正常输出。B0的意义是减少电磁辐射(EMI)是xxxx xx00。
2024-09-05 23:52:08
623
原创 串口引入之波特率的配置
在方式2或方式3时,如SM2位为1,REN位为1,则从机处于只有接收到RB8位为1(地址帧)时才激活中断请求标志位RI为1,并向主机请求中断处理。在方式1时,如果SM2位为1,则只有在接收到有效的停止位时才置位中断请求标志位RI为1:在方式0时,SM2应为0。当用软件置位SMOD,即SMOD=1,则使串行通信方式1、2、3的波特率加倍:SMOD=0,则各工作方式的波特率正常。在方式0,当串行发送数据第8位结束时,由内部硬件自动置位,即TI=1,向主机请求中断,响应中断后必须用软件复位,即TI=0。
2024-09-05 23:37:38
1506
原创 串口的引入
总结:RS-232比起RS-422和RS-485,区别就在于传输速度和节点, RS-232只有一个节点。单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成。对于电脑来说,别人做好了软件,鼠标点点点就能配置好,而苦逼单片机的波特率配置需要我们写。是异步串行接口,通信双方使用时钟不同,因为双方硬件配置不同,但是需要约定通信。(即只用一对收、发设备)通讯而设计的,其传送距离最大为约。电平信号应用广泛,是因为其数据表示采用二进制规定,),从设备之间不能通信,所以RS-422。
2024-09-04 20:43:04
699
原创 13.感应开关盖垃圾桶
SG90舵机,超声波模块,震动传感器,蜂鸣器。检测靠近时,垃圾桶自动开盖并伴随滴一声,2。发生震动时,垃圾桶自动开盖并伴随滴一声,2。按下按键时,垃圾桶自动开盖并伴随滴一声,2。震动传感器接 P3.2 口(舵机控制口 P1.1。实现物体靠近后,自动开盖,查询的方式添加按键控制。查询的方式添加震动控制。舵机和超声波代码整合。
2024-09-02 22:55:58
381
原创 12.超声波测距
超声波测距模块是用来测量距离的一种产品,通过发送和收超声波,利用时间差和声音传播速度,波回来的拿一下,我们开始停止定时器,计算出中间经过多少时间。Echo信号,由低电平跳转到高电平,表示开始发送波。Echo,由高电平跳转回低电平,表示波回来了。波发出去的那一下,开始启动定时器。Echo引脚维持高电平的时间!Echo端口低转高,表示发出,高转低,表示返回。接线参考:模块除了两个电源引脚外,还有。引脚,这两个引脚分别接我们开发板的。Trig端口高电平,开始计时。怎么知道接收了返回波。
2024-09-01 16:28:15
325
原创 11.舵机控制
0.5ms-------------0度;1.0ms------------45度;1.5ms------------90度;2.0ms-----------135度;2.5ms-----------180度;并且软件PWM是不稳定的,所以前面要用软件延时稳定一下。jd就是cnt,分别对应着。
2024-08-29 22:14:18
687
原创 PWM 开发引入
行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通。过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的。0.5ms-------------0度;1.0ms------------45度;1.5ms------------90度;,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进。时间占据整个信号周期的百分比,例如方波的占空比就是。占空比 :一个周期内,高电平占据时长的百分比。,常用三根或者四根接线,黄色为。波的频率不能太高,大约。
2024-08-29 13:43:25
361
原创 中断的引入
用户可以用关总中断允许位(EAE.7)或相应中断的允许位来屏蔽所有的中断请求,也可以用打开相应的中断允许位来使CPU响应相应的中断申请:每一个中断源可以用软件独立地控制为开中断或关中断状态:每个中断的优先级别均可用软件设置。,这样的过程称为中断。微型机的中断系统一般允许多个中断源,当几个中断源同时向CPU请求中断,要求为它服务的时候,这就存在CPU优先响应哪一个中断源请求的问题。CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请,EA的作用是使中断允许形成两级控制。
2024-08-29 00:10:30
1027
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人