自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 freertos 队列

队列是一种任务到任务、任务到中断、中断到任务数据交流的一种机制。在队列中可以存 储数量优先、大小固定的多个数据,队列中的每一个数据叫做队列项目,队列能够存储队列项 目的最大数量称为队列的长度,在创建队列的时候,就需要指定所创建队列的长度及队列项目 的大小。因为队列是用来在任务与任务或任务于中断之间传递消息的一种机制,因此队列也叫做消息队列。基于队列,FreeRTOS实现了多种功能,其中包括队列集、互斥信号量、计数型信号量、二 值信号量、递归互斥信号量。

2025-06-08 15:03:50 879

原创 freertos 时间片调度

FreeRTOS 的时间片调度(Time Slicing)是一种用于处理相同优先级任务的机制,确保它们能够公平地共享 CPU 时间。在 FreeRTOS 中,时间片调度是指当多个任务具有相同优先级时,内核会让这些任务按时间片轮流执行,每个任务运行一小段时间(时间片)后,强制切换到下一个同优先级任务,形成一种 “伪并行” 执行效果。这种机制确保了同优先级任务之间的公平性,避免某个任务长时间占用 CPU 资源。

2025-06-03 21:23:08 386

原创 freertos 列表和列表项

此函数就是将待插入的列表项插入到列表pxIndex指向列表项的 前面,要注意的时,pxIndex不一定指向xListEnd,而是有可能指向列表中任意一个列表项。要注意的是函数uxListRemove()移除后的列表项,依然于列表有着单向联系,即移除后列 表项中用于指向上一个和下一个列表项的指针,依然指向列表中的列表项。迷你列表项也是列表项,但迷你列表项仅用于标记列表的末尾和挂载其他插入列表中的列表项,用户是用不到迷你列表项的。此函数用于将待插入列表的列表项按照列表项值升序排序的顺序,有序地插入到列表中。

2025-05-31 14:37:36 270

原创 freertos 任务管理

在任何时刻都只可以运行一个任务,这个运行什么任务是由调度器来决定的,宏观看上去好像是一起在执行一堆任务,但实际上确实任务交替执行,当任务进行切入和切出的时候,通过TCB来保存当前的执行环境,当任务再次执行的时候,就可以在原来停止的地方继续执行。这里利用任务三来挂起和恢复任务一,通过按键来触发任务三。若key0摁下挂起任务一,若key1摁下恢复任务一。保存现场:将当前任务的寄存器(PC、SP、通用寄存器)保存到任务栈。抢占式调度(默认):高优先级任务可立即抢占低优先级任务执行。),适用于资源受限场景。

2025-05-29 14:57:04 779

原创 freertos 任务创建与删除

函数内部会记录任务数量,判断是否为第一个任务并做相应初始化或比较操作,将任务控制块添加到就绪列表,标记对应优先级有就绪任务等。通常是预先定义好的全局数组,任务栈占用 MCU 内部 RAM,任务越多所需栈空间越大,且一般要做栈空间地址对齐,FreeRTOS 中默认以 8 字节对齐。若堆栈内存申请成功,继续为任务控制块申请内存。因为裸机延时函数会使任务成为死循环,若该任务优先级最高,会导致低优先级任务无法运行,无法实现多任务。函数,用于设定空闲任务与定时器任务的堆栈大小(这两个任务堆栈需静态分配 )。

2025-05-28 19:47:16 408

原创 电赛校赛完赛后感受

就是让外环的输出直接影响内环的输出,其实两种逻辑的本质是一样的,但我们选取的是第一种,第二种我也尝试过,但不知道为什么调不出该有的效果。之后就是调参了,这里很重要的两点是一定要先调内环再调外环,不然很可能会调半天什么效果的没有,还有就是一定要确定好每个参数的极性,在调试之前,将你要调的参数之外全调成0,然后随便给一个值看是否向你想要的方向调整,如果是则极性为正,在pid的计算中就为正,反之为负。而且由于这类题型没有涉及过,让我们有些慌了,在电赛时的分工也出现了问题,题的进度十分缓慢。

2025-04-27 20:10:12 295

原创 stm32学习笔记(10)spi

SPI(Serial Peripheral Interface)是嵌入式系统中应用最广泛的同步串行通信协议之一,其高效的全双工通信和灵活的硬件设计使其成为传感器、存储器和显示模块的理想选择。本文从基本通信原理和实现两个方面来介绍SPI通信。

2025-03-10 21:56:53 797

原创 stm32学习笔记(9) iic

IIC是一种常用于集成电路间通信的通信协议。iic总线由两条线构成,即串行数据线(SDA)和串行时钟线(SCL)。所有IC总线上的设备都与这两条线相连,数据通过SDA线传输,时钟信号由SCL线提供。总线上有主设备和从设备之分。主设备负责发起通信、控制传输过程,如微控制器;从设备则响应主设备的请求,如传感器、存储器等。在stm32中有硬件iic和软件iic。硬件iic是stm32中集成的iic接口,通过这些接口来实现i2c的功能。除了硬件iic,我们还可以使用软件模拟的方式来实现iic的功能。

2025-02-04 19:19:16 919

原创 stm32 学习笔记(8)看门狗

比如我们设定prer值为4,rlr值为625,那么就可以得到Tout=64×625/40=1000ms,这样, 看门狗的溢出时间就是1s,只要你在一秒钟之内,有一次写入0XAAAA到IWDG_KR,就不 会导致看门狗复位(当然写入多次也是可以的)。这里需要注意独立看门狗的时钟是一个内部RC时钟,所以并不是准确的40Khz,而是 在30~60Khz 之间的一个可变化的时钟,只是我们在估算的时候,以40Khz的频率来计算,看 门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。

2024-12-29 15:19:19 852

原创 做完24年电赛题后感受和总结

总的来说,昨晚这道电赛题收获不少,毕竟虽然学了很长时间的32,但在实际运用上还是很少的,在测试中发生的问题,还有硬件结构的设计问题让我受益良多。也希望能通过这次体验让以后少走一些弯路吧。

2024-12-18 18:47:12 465

原创 stm32学习笔记(7)编码器模式

输入捕获 是 STM32 定时器的一项功能,用于测量外部信号的时间特性,例如信号的频率、周期、占空比等。STM32 定时器的输入捕获功能通过检测外部信号的上升沿或下降沿,将当前计数器(CNT)值存储到捕获寄存器(如 TIMx_CCR1、TIMx_CCR2 等)中。STM32 的编码器模式依赖于其定时器的输入捕获功能,并支持多种类型的编码器。这里可以看到我们将PA0和PA1设置为浮空输入,并且将输入捕获的IC1和IC2映射到TIM2的TI1和TI2上(如果没有这一步定时器无法接收到外部信号。

2024-12-11 20:01:12 372

原创 stm32学习笔记(6)PWM

PWM,即脉冲宽度调制,是一种通过调整数字信号中高电平持续时间(脉冲宽度)来控制输出功率或信号强度的方法。PWM广泛应用于电机控制LED亮度调节音频信号合成电源管理等领域。stm32的pwm可以通过通用定时器和高级定时器来输出。其中通用定时器可以同时产生4路输出,高级定时器(如tim1,tim8)可以同时产生7路输出。

2024-12-05 20:40:10 674

原创 stm32学习笔记(5)定时器

stm32 定时器是微控制器中的重要外设,用于精确的时间管理和信号处理。定时器通过硬件实现周期性事件触发、时间测量和信号生成,从而减少 CPU 负担并提高系统实时性。在之后的学习中会有很多用到定时器的地方。

2024-11-27 20:54:57 1797

原创 stm32学习笔记(4)外部中断

STM32的外部中断是其重要功能之一。STM32芯片有多个外部中断线,这些中断线可以连接到外部设备。例如,连接到按键、外部传感器等。当外部设备的电平发生变化(上升沿、下降沿或者双边沿触发)时,就会触发相应的外部中断。在使用时,需要进行配置。包括开启相应的GPIO口时钟,配置GPIO的工作模式为输入模式,将GPIO与外部中断线连接起来,设置触发条件(上升沿、下降沿或双边沿),还需要编写中断服务函数来处理中断发生后的具体事务。

2024-11-22 21:24:38 1675

原创 stm32学习笔记(3)USART

USART(Universal Synchronous Asynchronous Receiver Transmitter)是一个串行通信外设,用于微控制器与其他设备之间进行数据交换。STM32系列的微控制器通常都配备有多个USART模块,支持串行通信协议,能够在不同的传输模式下工作。USART的主要作用是通过串行的方式来发送和接收数据,它使用的通信方式是通过单线或双线(TX/RX)传输数据,较为常见的协议包括RS-232、RS-485、SPI等。

2024-11-15 20:33:44 747

原创 stm32学习笔记(2)GPIO输入输出

STM32 的 GPIO(General Purpose Input/Output,通用输入/输出)是其外设之一,用于控制微控制器芯片的引脚。GPIO 引脚可以配置为输入或输出,支持多种模式和功能,是连接外部设备、传感器或执行控制任务的关键接口。

2024-11-06 20:32:04 1466

原创 stm32学习笔记(1)

之后是导入相应的文件,在右键左侧的target目录树,选择manage project Items,在中间的对话框内新建USER和SYSTEM组,在SYSTEM组中添加进SYSTEM文件夹中的三个文件,添加过程和添加完成的画面如下图。我用的是keil5,板子的话只要是f103系列的都可以,可以使用stm32c8t6,这个核心板很便宜而且网上很多资源都是以这个板子来做的。这一点也很有利于我们自学。首先创建一个文件夹,根据自己的喜好命个名,尽量起一个与你写的东西有关的,让自己能知道这个文件写的是什么内容。

2024-10-29 21:09:06 468

原创 药品管理系统

总结:做完这个系统,我对编程有新的理解,在实际应用中要考虑很多种情况,与平时做的题不同,需要自己思考各种各样的情况发生该如何解决,甚至有时不知道该怎么改。利用此系统进行药品的信息管理和储存,包括出入仓库,价格变动等功能。注:1、其中保存数据必须正常退出系统,否则会无法保存甚至可能会使原本文件的数据出错。2、其中一些代码还存在一些bug,例如对某些违规数据的输入无法进行辨识导致数据出错。denglu.txt数据的储存文件(以文本形式进行储存)所用知识为链表的增删查改,文件的读写等。main.c 主函数部分.

2023-12-17 19:43:13 440 2

原创 单链表的增删改查(c语言)

单链表(Singly Linked List)是一种常见的数据结构,它由一系列节点构成,每个节点包括一个数据元素和一个指向下一个节点的指针。单链表中只能从头节点开始顺序遍历,每个节点只有一个指向下一个节点的指针,没有指向前驱节点的指针,因此不能倒序遍历。以上是我对在单链表的学习上的一些认识,其中有不足的地方,代码都是初学的时候自己写的,没有进行优化。链表的修改是在查找的基础上进行的,只需要将修改后的值传入链表对应位置即可。其次是删除,删除需要找到要删除的节点,可以是第几个,也可以是某组数据。

2023-11-19 19:02:03 190 1

空空如也

空空如也

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

TA关注的人

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