- 博客(25)
- 问答 (1)
- 收藏
- 关注
原创 stm32c8t6之freertos软件定时器
像我们使用电stm32单片机或者51单片机当中,都有定时器这个外设。而freertos也不例外,它自己也有定时器的功能。
2024-01-06 11:02:47
1218
1
原创 stm32c8t6之freertos事件
freertos中的事件主要是用来把若干个任务关联起来的一种机制,就好比我创建了3个任务。当我3个任务都发生了之后,那么事件就起效果了,就可以执行事件函数里的代码逻辑。若这三个任务当中有一个任务没有发生,那么就进入不了事件函数,大概就是这么一个逻辑。
2024-01-05 15:34:22
1027
原创 stm32c8t6之freertos互斥信号量
互斥信号量其实就是一个拥有优先级继承的二值信号量,在同步的应用中(任务与任务或中断与任务之间的同步)二值信号量最适合,,互斥信号量适合用于那些需要互斥访问的应用中。就好比你定义了串口1和串口2,使用串口1时不想使用串口2,使用串口2时不想使用串口1,这时候就可以使用互斥量。
2024-01-05 10:54:17
876
原创 stm32c8t6之freertos二值信号量和计数信号量
在freertos中,信号量的作用大多是用来同步任务的。而信号量又分为4种信号量,分别是二值信号量、计数信号量、互斥量和递归信号量。这次主要是来介绍二值信号量和计数信号量。
2024-01-04 21:56:06
1078
原创 stm32c8t6之freertos消息队列
freertos任务之间的通讯方式有很多,消息队列就是一种,它可以在任务中发送或者读取信息。有了解过数据结构的应该能理解消息队列的含义,消息队列本质上来说就是队列。队列就好比你去排队打饭,排队的队伍就是一个队列,队列的原理就是先进先出。你先排队那就你先打完饭,你后排队就等别人打完饭才到你。消息队列也一样,先发送的数据可以先被读取到,后发送的数据后面才会被读取。
2024-01-03 22:52:09
872
原创 stm32c8t6使用freertos控制led闪烁
xTaskCreate()的第一个参数就是我的函数名,第二个参数是任务名称,个人推荐最好和函数名一致。最后一个参数是任务句柄,每个任务都有一个任务句柄,以下是任务句柄的定义方法。任务函数的写法大体都是一致的,所有任务函数都没有返回值,参数都是(void *arg),使用freertos之后,掩饰4函数用它自身的延时函数vTaskDelay(),单位是ms。上面的xTaskCreate()就是创建任务的函数名,这是通过动态的方式进行创建,也是最常用的一种方式,这个函数一共有6个参数,每个参数都缺一不可。
2024-01-03 19:19:51
604
1
原创 Linux之socket编程
这是服务器和客户端的连接流程,服务端主要进行7个步骤。分别是创建服务器socket()、设置ip和端口bind()、监听listen()、接收客户端accept()、读取数据recv()、发送数据send()、关闭服务器close()。客户端主要进行5个步骤, 创建服务器socket()、连接服务器connect()、发送数据send()、接收数据recv()数据、关闭服务器close()。
2023-11-13 21:39:05
35
原创 Linux进程通讯之共享内存
shmget()函数用来获取key的值,size是共享内存的大小,一般以兆为单位,shmflg是标志位。shamt()函数是映射函数,用来映射共享内存的地址,shmid是key的id号,shmadder是地址。shmat()函数是用来挂载内存的,shmctl函数是用来销毁共享内存。这是发送方的代码,我们用到fotk()函数,这个函数用来计算key的值,第一个参数是文件路径,第二个参数是类型。shmget()函数的第一个参数是key的值,第二个参数给了4兆,然后就是标识符,IP_CREAT权限是0600。
2023-11-09 17:31:24
55
1
原创 Linux进程通讯之消息队列
消息队列常用的几个API就这几个,key是队列号,msgflg是标志位,msgid是msgget()函数的id号,msgsz是数据大小,msgtyp是队列类型。msgsnd()函数用来发送信息,msgid是队列号,&sendbuf是取发送数组的地址,地址后面是发送数据的大小,0代表标志位默认选择。这是发送方的代码,先是定义一个sendbuf的结构体,666是队列的类型,this is senddata是发送的数据。这是接收方的代码,改了消息队列号,设置了一个结构体数组,还加了一个msgsnd()函数。
2023-11-08 23:50:07
47
1
原创 Linux进程通讯之无名管道和命名管道
无名管道主要用在父子进程直接进行通讯,但是只能父发子收或者父收子发,发送和接收不能同时进行。管道的函数是pipe()函数,除此之外还定义了一个fd[2]的数组。这个数组的用处在于是否要进行读写。fd[1]代表写,fd[0]代表读,之前说过,无名管道不能同时收发。所以,当我们进行写的操作时,要把读给关闭,也就是close(fd[0]),读操作就相反。代码刚开始先调用pipe()函数创建一个管道,然后创建一个进程,用pid来接收进程id。如果pid大于0,说明进入了父进程。
2023-11-08 22:28:07
47
1
原创 Linux进程之execl族函数、system函数
execl族函数除了execle()和execve()不常用以外,其他的都经常用。execl族函数的作用在于可以在进程或者代码中执行可执行文件,也就是以.exe结尾的文件。从而使执行的可执行文件变成一个新的进程。这是execl族的头文件。path:要执行的程序路径。可以是绝对路径或者是相对路径。在execv、execve、execl和execle这4个函数中,使用带路径名的文件名作为参数。file:要执行的程序名称。如果该参数中包含“/”字符,则视为路径名直接执行;
2023-11-07 16:29:42
202
原创 Linux之与进程相关的操作
我们每写一份代码,它运行之后都是处于进程中的,我们可以用getpid()函数来读取当前代码的进程id号。运行之后的效果。我们可以通过getpid函数读取当前进程的id号,但是同一个代码每次运行起来后,它的id号是不一样的。
2023-11-06 10:44:13
24
原创 Linux之文件操作
通常来说,在windows系统下,我们也经常对文件进行操作,比如创建文件、打开文件、写入文件、读取文件、关闭文件。在Linux系统下对文件的操作也是需要进行这几个步骤,唯一不同的是,在Linux系统操作文件需要调用对应的API来实现。那么有哪些API呢。
2023-11-05 20:52:00
38
1
原创 Linux文件操作相关的API
r的值为4,w的值为2,z的值为1。这段代码用的是两个参数的open函数,代码的逻辑是,打开当前文件下file1这个文件,如果文件表述符fd小于0,则打开失败,并且打印出fd的值。我们查看一下file1文件的内容,发现写的是之前写的hello world,那么我们在不使用O_APPEND的情况下写入一个字符串。read函数的参数和wirte函数一致,fd是文件描述符,buf是读取的内容,count是读取的字节数。write函数有三个参数,fd是文件表述符,buf是写入的内容,count是写入的字节数。
2023-11-04 11:43:25
35
1
原创 51单片机之定时器中断
定时器中断我们使用定时器0来做,定时器0中断用到的寄存器为TF0和TR0。TF0是溢出中断标志,我们默认给0就好了,TR0是定时器运行位,置1时启动计时。除此之外,我们还要配置TMOD寄存器。因为我们采用的是定时器0,然后要配成16位TL0、TH0全用的模式,直接给0x01就好了。
2023-10-28 20:56:10
687
1
原创 51单片机之串口通讯
在信息传输通道中,携带数据信息的信号单元叫码元,单位时间内通过信道传输的码元数称为码元传输速率,简称波特率,其单位是波特(Baud,symbol/s),波特率是传输通道频宽的指标。“波特”(Baud)本身已是速率,所以不需要写成 Baud Rate(Rate是赘字)。虽然单位“波特”本身就已经是代表每秒的调制数,以“波特每秒”为单位是一种常见的错误,但是在一般中文口语化的沟通上还是常以“波特率”来描述“波特”(Baud)。
2023-10-27 21:49:13
172
1
原创 51单片机之超声波测距
我使用的超声波传感器的型号为HC-SR04,这个模块有4个引脚,VCC、GND、Trig和Echo。VCC和GND就不用介绍了,主要来说一下Trig和Echo这两个引脚。Trig引脚是用来触发信号的,Echo引脚是用来输出回响信号的。
2023-10-27 19:25:24
613
1
原创 51单片机之PWM控制SG90舵机
PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进 行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通 过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的 时间占据整个信号周期的百分比,例如方波的占空比就是50%。
2023-10-26 20:23:17
360
原创 51单片机之定时器计数
时钟周期也称为振荡周期,定义为时钟频率的倒数。时钟周期是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。时钟周期是一个时间的量。时钟周期表示了SDRAM所能运行的最高频率。更小的时钟周期就意味着更高的工作频率。机器周期也称为CPU周期。在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶 段(如取指、译码、执行等),每一阶段完成一个基本操作。完成一个基本操作所需要的时间称为 机器周期。一般情况下,一个机器周期由若干个时钟周期组成。
2023-10-25 22:49:50
629
1
原创 51电动车防盗项目之实物连接(三)
代码是用第二节的代码,因为我们继电器接的是常开的口,所以我们需要让震动传感器感应到震动他才会报警。实物连接需要准备一个电源和一个报警器 ,大概是这样连接的。
2023-10-24 21:24:20
37
原创 51点动车防盗项目之震动控制继电器通断(二)
输入端有VCC、GND、IN三个引脚,VCC和GND分别接在单片机的5V电源和GND,IN引脚可以根据自己的选择接在单片机的哪个引脚,我这里接的是P1^1引脚。NO口,我们通常成为常开口。也就是说,当你把继电器NO口接入一个电路里面,它会使得电路为断路,电路通不起来,当你给它一个高电平或者低电平时,这个电路才会导通。继电器有输出端和输入端,输出端就是用来对控制电路的通断,输入端就是软件或者单片机对它输入信号。当你用NC口接入电路时,他会使得整个电路为通路,当你给一个高电平或者低电平时,他才会断开。
2023-10-24 20:51:32
61
原创 51电动车防盗项目之震动传感器点灯(一)
震动传感器共有4个引脚,VCC、GND、AO、DO,我们用到的引脚有VCC、GND、DO。VCC和GND分别接到51单片机的5V电源和GND引脚,DO则是接到自己选择的引脚,我这里选择的是P3^3引脚。震动传感器点灯的原理其实不难,就是控制IO给高低电平,通过while来一直查询震动传感器的状态。
2023-10-24 19:59:07
89
原创 51单片机点灯防抖动之标志位的应用
在平时写代码的过程中,我们有时在主函数中要处理一些比较复杂的业务逻辑,就比如点灯。可能你业务逻辑复杂起来了,点灯的代码又不知道在哪写,这时候就可以用到标志位了。标志位的作用在于,你执行完一个逻辑以后,可以在其他的地方进行操作。
2023-10-24 19:29:38
171
原创 51单片机点灯防止按键抖动
这里通过延时的方法来防止抖动,代码中延时了50毫秒,也就是说我们按下按钮50毫秒后灯才会亮。这就避免了我们不小心按到按键的情况,当然不一定非要延时50毫秒,具体情况具体分析。51单片机通过自带的按键进行点灯时,难免会不小心按到按钮,这时我们可以通过编写代码的方式来防止抖动。话不多说,直接看代码。
2023-10-24 19:06:26
188
空空如也
Dev C++代码调试不了
2022-10-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人