- 博客(48)
- 收藏
- 关注
原创 freeRTOS 消息队列
我在Task3传入了&name,类型为char **,但是我在task2中用于接收的QueReceive2,类型为char*,这里应该传入&QueReceive2。此时由于我传入的等待时间为portMAX_DELAY,队列内找不到,task2会一直进入阻塞态。优先级继承:FreeRTOS 支持基于优先级的消息传递,确保高优先级任务在队列操作期间不会被低优先级任务阻塞,队列是任务间通信的主要形式。
2025-07-31 22:30:43
215
原创 freeRTOS 时间管理
相对延时:vTaskDelay(),从执行vTaskDelay()函数开始,直到指定延时的时间结束,只能保证它上一行代码到下一行代码的时间间隔。绝对延时:xTaskDelayUntil(), 将整个任务的运行周期视为一个整体,适用于需要以。保证每次任务执行按照固定时间间隔。
2025-07-31 12:07:02
62
原创 c 全局变量赋值踩坑
在 C 语言中,全局变量(定义在函数外部的变量)和静态变量的初始化是在。,因此不能调用函数(函数调用需要在程序运行时执行)C 语言规定全局 / 静态变量的初始化必须是 “”,不能包含运行期的函数调用。
2025-07-30 19:37:38
135
原创 学习FreeRTOS时遇到关于中断优先级的坑
FreeRTOS中时钟通过中断来进行计时,默认为Systick,它在FreeRTOS的中断优先级默认为。当把FreeRTOS中断关闭时,时间就不会再增长,这时使用HAL_Delay(),会在内部卡死。这也是为什么我按下key1关闭中断后,想按下key2开启中断时没有反应。
2025-07-29 00:22:51
105
原创 freeRTOS 中断管理、临界段
一般的RTOS函数不能在中断函数中调用,除了xxxISR()这种形式的函数。xxxISR()这种形式的函数只有在被freeRTOS控制的才能调用。FreeRTOS利用寄存器实现中断管理,屏蔽优先级低于某一个阈值的中断。设置为0x50(,也就是5),代表中断优先级在5~15内的均被屏蔽,,0~4的中断优先级正常执行。
2025-07-28 13:03:57
408
原创 freeRTOS 任务挂起、恢复
一般的RTOS函数不能在中断函数中调用,除了xxxISR()这种形式的函数.xxxISR()这种形式的函数只有在被freeRTOS控制的中断优先级 内才能调用。
2025-07-28 11:02:20
204
原创 STM32 SPI通信协议
相比I2C,SPI传输更快,没有严格规定最大传输速度。硬件开销大,通信线个数多,并且通信过程中会出现资源浪费的现象。全双工MOSI、MISO可同时向通信双方发送数据,从机上可能表示为DI、DO。SPI只支持一主多从,不支持多主机。SS、CS专门用来指定通信的从机SPI所有通信线都是单端信号,它们的高低电平都是相对GND的电压差,并且所有设备都要共地;如果从机没有独立供电,主机还要额外引出电源正极。SCK时钟线,,对于主机时钟线为输出,对于从机时钟线为输入。SS选择线,,同时只能选中一个;
2025-06-13 10:38:57
355
原创 STM32 I2C通信外设
比较器、自身地址寄存器用于从机模式:自定义一个从机地址,写到这个寄存器,如果收到的地址经过比较器判断和自身地址相同,那么STM32就作为从机。SDA、SCL这种外设模块引出来的引脚,复用在GPIO口,不复用的情况下IO口是由STM32自身的寄存器控制的。10位寻址:起始之后的两个字节都作为寻址,第一个字节前5位是11110作为10位寻址的标志位。帧错误校验计算:数据校验模块,当发送一个多字节数据帧时,硬件自动进行CRC校验计算,SMBus:系统管理总线,主要用于电源管理,与I2C类似。
2025-05-30 09:29:06
401
原创 STM32 I2C 通信协议
一主多从,单片机作为总线主机SDA:数据线SCL:时钟线主机对SCL线完全控制,从机只能读取;在空闲状态下,主机可以主动发起对SDA的控制,只有在从机发送数据和从机应答的时候,主机才会暂时转交SDA的控制权给从机I2C禁止所有设备输出强上拉的高电平,采用加的电路结构。为了防止出现两个引脚同时处于输出状态,如一个高电平,一个低电平,会发生电源短路。,输出低电平,下管导通,强下拉;输出高电平,下管断开,引脚。为了避免高电平造成的引脚浮空需要在总线外面给SCL和SDA各外置一个上拉电阻(弱上拉)。
2025-05-26 10:34:11
1501
原创 STM32 USART串口通信
SCLK:用于产生同步的时钟信号,配合发送移位寄存器输出,发送寄存器移位一次,同步时钟电平就跳变一个周期,时钟告诉对方,移出去一位数据。当数据处理不过来,如接收数据寄存器一直没有读,又有数据过来了,RTS置高电平,对方CTS接收到之后,暂停发送数据,直到RTS置低电平。,在程序上表示为一个寄存器,数据寄存器DR,在实际的硬件中,是两个寄存器,一个用于发送,一个用于接收,TDR只写,RDR只读。,因为在gpio的电路中,是由输出数据寄存器控制,外设无法干预,但使用复用推挽输出后,输出数据寄存器会被断开,
2025-05-24 20:13:13
1212
1
原创 stm32 DMA
AHB从设备,也是DMA自身的寄存器,用于DMA配置,DMA既是总线矩阵上的主动单元,也是AHB总线上的被动单元,CPU通过AHB总线就可以对DMA进行配置了。M2M位为0时,DMA选择硬件触发,一般与外设有关,如ADC转换完成、串口接收数据、定时器时间到,同时还要在。与ADC软件触发不同,以最快的速度,连续不断地触发DMA,将传输计数器清零,完成这一轮转换。的数据转运,外设的数据需要处理完再转运。DMA请求,DMA硬件触发源,如ADC转换完成、串口接收到数据,就会通过这条线路来向DMA发送硬件触发信号。
2025-05-17 18:08:12
938
原创 力扣239滑动窗口最大值
将元素推进队列时就先找到,k个元素中的最大值,只维护这个最大值,仅当推进一个更大值或该最大值被退出时更新。可以避免滑动窗口每次右移都要遍历k次。遍历时的问题:循环变量i要在滑动窗口的下一位。
2025-02-23 22:06:51
244
原创 KMP算法
根据pi[i-1],左右两侧红色区域颜色都相等,所以长度相等的绿色区域和橙色区域元素都相等,同时我们想要求得除pi[i-1]外最长匹配的真前后缀,蓝色区域和橙色区域相等,最终蓝色区域和绿色区域相等。因此pi[len-1]就是我们想要求的pi[i-1]外最长匹配的真前后缀。=s[i]时,需要找到除pi[i-1]外最长匹配的真前后缀,更新len,然后继续判断pi[len]==s[i]
2025-02-20 23:56:02
174
原创 STM32 GPIO 输出方式
在开漏输出模式下,高电平相当于高阻态,没有驱动能力,只有低电平有驱动能力。在推挽输出模式下,高低电平均有驱动能力。
2024-11-24 15:32:48
214
原创 c51 延时函数和定时器中断函数冲突
在使用定时器中断函数的同时使用了延时函数,可以在进入延时函数之前置EA = 0,关闭定时器中断,延时函数之后置EA = 1.单总线的时序是绝对时间,需要这么来处理冲突, I2C总线有单独的时钟总线,不受延时函数的影响。
2024-11-19 20:35:21
163
原创 I2C时序遇到的问题
在编写I2C_stop(),终止I2C通讯的函数时,弄错了SCL、SDA。,导致向EEPROM中写入的数据始终全位为1。以后要严格按照手册上的顺序来切换。
2024-11-04 23:45:48
288
原创 I2C总线 接收数据、发送数据
当主机准备接收数据时,需要释放对SDA的控制权。如果主机发送的最后一位数据为0(即SDA=0),则主机需要主动释放SDA,此时SDA的控制权交由从机,主机对SDA的操作将无效。如果主机发送的最后一位数据为1(即SDA=1),主机会自动释放SDA,从机会立刻发送ACK信号(SDA=0),此时主机对SDA的操作也将无效。由于不确定主机发送的最后一位数据是0还是1,在接收数据开始时主动将SDA置1。
2024-10-29 11:38:27
432
原创 linux 环境变量 env/export/source/PATH
PATH记录了系统执行任何命令的搜索路径(路径之间以:隔开)执行任何命令都会按照顺序,从上述路径中搜索要执行的程序的本体。
2024-08-04 00:10:23
259
原创 linux 进程管理 ps/kill
f:以完全格式化的形式展示全部信息。ps -ef 列出全部进程的全部信息。-9:表示强制关闭进程。-e:显示出全部的进程。
2024-07-28 21:57:30
250
原创 systemctl命令,控制软件的启动和关闭
systemctl start | stop | status | enable( 开机自启 ) | disable( 关闭开机自启 ) 服务名。Linux 系统很多软件( 内置或第三方 )均支持使用systemctl命令控制 :启动、停止、开机自启。能够被systemctl管理的软件,一般称为:服务。
2024-07-21 23:15:58
270
原创 linux 下载命令 yum/apt
RPM包软件管理器,用于自动化安装配置Linux软件,并且可以自动解决依赖问题 (将其他所依赖的程序一并下载并安装)-y : 自动确认,无需手动确认安装或卸载过程。install : 安装。remove : 卸载。search : 搜索。权限(使用 sudo )
2024-07-21 22:26:57
538
原创 vi\vim编辑器
整体文件的控制,如文件的保存,文件的退出。如果文件不存在,那么此命令就会用于编辑新文件。如果文件存在,那么此命令就会用于编辑已有文件。此模式下,可以对文件内容进行。按下“:”进入底线命令模式。命令模式下,所敲的按键编辑器都理解为。按下“i”键进入命令模式。即编辑模式、插入模式。按下“esc”键退出。此模式下,不能自由进行文本编辑。保证从文本外部复制的内容粘贴后,,以命令驱动执行不同的功能。vim兼容全部vi功能。
2024-07-07 13:31:07
294
原创 linux tail命令
使用tail命令, 可以查看文件尾部内容,跟踪文件的最新更改。-f,表示持续跟踪,一直处于查看文件尾部状态。-num,表示查看尾部多少行,默认10行。linux路径,表示被跟踪的文件路径。
2024-07-06 16:51:24
170
原创 linux echo
使用echo命令在命令行内输出指定内容语法:echo 输出的内容无需选项,只要有一个参数,表示要输出的内容,复杂内容可以用 ” “包围带有空格或\等特殊符号,建议使用双引号包围。
2024-07-06 16:11:04
260
原创 linux grep命令
关键字,必填,表示过滤的关键字,带有空格或其他特殊符号 ,建议使用” “将关键字包围起来。可以通过grep命令,从文件中通过关键字过渡文件行。-n,可选,表示在结果中显示匹配的行的行号。文件路径,必填,表示要过滤内容的文件路径,grep [-n] 关键字 文件路径。,与管道符 | 一起使用。
2024-07-06 15:56:20
146
原创 linux wc命令做数量统计
语法: wc [-c -m -l -w] 文件路径。可以通过wc命令统计文件的行数、单词数量等。-w,统计单词数量(按空格划分)
2024-07-06 14:32:51
250
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人