自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 FreeRTOS移植到STM32-任务的创建

FreeRTOS移植到STM32做一些小实验。

2023-09-20 15:36:11 393 1

原创 雷龙语音模块-LSYT201B(语音控制电机)

语音模块是基于串口通讯的,所有只需要将语音模块的TX和RX和我们单片机交叉连接就可以了。

2024-08-08 11:43:31 262

原创 HAL库开发中,无法关闭高级定时器

该寄存器比较简单,要让 TIM1 的 CH1 输出 PWM 波,这里我们要使能 CC1E 位,该位是通道 1 输入/输出使能位,要想 PWM 从 IO 口输出,这个位必须设置为 1。在项目开发中,采用高级定时器生成指定数量的PWM波,发现无法通过HAL_TIM_Base_Stop(&pwm_handle)函数来到达关闭定时器的作用。如果所有这些位都被清除,即等于0UL,则继续执行禁用定时器的操作。在满足上述两个条件后,定时器的控制寄存器CR1中的使能位TIM_CR1_CEN才会被清除,从而禁用定时器。

2024-07-19 15:24:25 306

原创 基于STM32以及modbus——RTU的从机程序(STM32作为从机)

Modbus协议是一种应用层报文传输协议,协议本身并没有定义物理层,所以支持多种电气接口,直接可以理解成他是软件层面的,各种的电气接口比如RS232、RS485、TCP/IP等,他们是硬件层面。他们之间互不影响。3.2 Modbus通讯过程Modbus是一主多从的通信协议Modbus通信中只有一个设备可以发送请求。其他从设备接收主机发送的数据来进行响应,从机是任何外围设备,如I/O传感器,阀门,网络驱动器,或其他测量类型的设备。从站处理信息和使用Modbus将其数据发送给主站。

2024-04-24 15:51:07 6266 17

原创 达林顿晶体管阵列ULN2803AN的简单使用

ULN2803AN是一种集成电路芯片,属于NPN可控硅阵列。它由多个达林顿对组成,共有8个输出端口。ULN代表“高电压晶体管场效应管数组”,它可以用于驱动较大功率负载(例如电机、灯泡等)。硬件图内部结构图​如果我们单看一个的话,可以简化电路图为:​这个图可以清晰的看出 输入端给高电平,输出端就会导通。ULN2803AN的引脚图及功能如下: 引脚号 引脚名称 引脚功能 1-8

2023-11-27 11:55:24 3936

原创 FreeRTOS内存管理

FreeRTOS 提供了5种动态内存管理方法。heap_1动态内存管理方法是5种方法中最简单的,但是申请的内存不允许释放。heap_2动态内存管理方法支持动态内存的申请和释放,但是不支持内存碎片的整理。heap_3动态内存管理方法采用编译器自带的malloc()函数和firee()函数进行简单的封装,以支持线程安全,即支持多任务调用。heap_4动态内存管理方法支持动态内存的申请和释放,支持内存碎片整理。heap_5动态内存管理方法在heap_4动态内存管理方法的基础上支持将动态内存设置在不连续的区域上。

2023-10-30 16:53:06 321

原创 FreeRTOS软件定时器

FreeRTOS 软件定时器有单次定时模式和周期定时模式两种工作模式。软件定时器在使用前要先创建,刚创建好的软件定时器处于休眠未运行状态。可通过启动、复位、停止等API操作软件定时器,这些API通过软件定时器命令队列传递命令给软件定时器服务任务。软件定时器要的功能通过软件定时器回调函数实现,在软件定时器回调函数中不能调用会导致任务阻塞的API函数。

2023-10-30 14:34:32 179

原创 FreeRTOS任务通知(用任务通知来模拟时间标志组)

使用任务通知可以提高运行速度和减少RAM的消耗,可用于轻量级的使用场所下替换二值信号量,计数信号量,事件标志组等。

2023-10-29 17:05:03 122 1

原创 FreeRTOS任务通知(用任务通知来模拟二值信号量)

任务通知是一个事件,FreeRTOS从v8.2.0版本开始增加了任务通知功能。每个TCB中有一个32位的成员变量ulNotifiedValue,专门用于任务通知。任务通知可以在某些场合用来代替信号量、事件标志组等,并且拥有更高的执行效率。接收任务通知的任务可因等待任务通知而进入阻塞态,在其他任务向这个任务发送任务通知后解除阻塞。根据FreeRTOS官方数据,使用任务通知相较于使用信号量和事件标志组,唤醒被阻塞任务时间的速度提升了45%,并且使用的RAM空间更少。但使用任务通知也有如下局性。

2023-10-29 16:02:19 105 1

原创 FreeRTOS事件标志组

事件标志组可以用来同步多个事件或任务,事件标志组要先创建后使用。在不同任务中均可操作事件标志组。可以设置和获取指定位的事件标志。事件标志位置1表示对应事件发生,xEventGroupWaitBits()函数可在等待多个事件的同时阻塞当前任务。

2023-10-27 17:14:37 230 1

原创 FreeRTOS信号量与任务同步-3互斥信号量

互斥信号量是一种特殊的二值信号量,用于控制在两个或多个任务之间访问共享资源。互斥信号量提供一种优先级继承机制,让持有互斥信号量的任务优先级提升到等待这个互斥信号量的任务优先级。与二值信号量主要用于同步不同,互斥信号量主要用于互斥访问。除优先级继承机制以外,二者的区别主要在于信号量被获取后发生的事情。互斥信号量在多任务资源共享上相当于与共享资源关联的令牌。一个任务想要合法地访问资源,必须先成功地得到(Take)该资源对应的令牌(成为令牌持有者)。令牌持有者在完成资源使用后,必须马上归还(Give)令牌。

2023-10-06 20:15:31 207 3

原创 FreeRTOS信号量与任务同步-2计数信号量

上一节的二值信号量可能会发现,在用二值信号量同步任务与中断的例子中,串口输出的同步信息数量明显少于中断次数。这是由于TIM2更新中断时间短,在使用二值信号量同步任务与中断时,信号的传递还没有完成,新的中断又发生了,二值信号量显然无法保存多次中断的状态,采用计数信号量则可以解决这个问题。计数信号量相当于长度大于1的队列,主要用于事件计数和资源管理。当计数信号量用于事件计数时,初值一般为0,事件处理函数每释放一次信号量其值加一,其他任务获取信号量其值减一。

2023-10-06 14:21:38 73 1

原创 FreeRTOS信号量与任务同步-1二值信号量

信号量是操作系统用来实现资源管理和任务同步的消息机制。FreeRTOS信号量分为二值信号量、计数信号量、互斥信号量和递归互斥信号量。可以将互斥信号量看成一种特殊的二值信号量,但互斥信号量和二值信号量之间还是有一些区别的。同步互锁。

2023-10-06 13:22:20 521 1

原创 FreeRTOS队列与消息传递-3队列实现串口守护任务

队列是一种特殊的数据结构,可以保存有限个具有长度的数据单元,一般采用先进先出的存取方式。FreeRTOS利用队列实现任务间的通信,消息传递,后面将要介绍的信号量也是队列来实现的。

2023-10-04 16:41:50 846 1

原创 FreeRTOS队列与消息传递-2队列操作

队列的创建、入队和出队是最常用的队列操作,除此之外还有队列删除、重置,查询队列中的消息数量等队列操作。

2023-10-04 13:09:48 316 1

原创 FreeRTOS队列与消息传递-1FreeRTOS队列及其结构

任务与任务之间、任务与中断之间经常需要进行一些信息交互和消息传递。FreeRTOS利用队列来实现任务间的通信,队列可以用于在任务与任务之间、任务与中断之间传递消息,所以又被称为消息队列。另外,用于资源共享和访问的二值信号量、计数信号量、互斥信号量和递归互斥信号量也都是通过队列来实现的,这个我们后面在细说。

2023-10-02 17:01:27 567 1

原创 FreeRTOS任务函数 - 4统计任务运行时间信息

任务管理是FreeRTOS的核心功能,FreeRTOS提供了很多任务函数,比较常用的任务函数有延时函数,优先级控制函数,任务状态信息以及任务运行时间信息获取函数等。

2023-10-01 20:43:22 1137

原创 FreeRTOS任务函数 - 3获取任务状态信息

uxTaskGetSystemState()函数用于获取所有任务的状态,任务句柄、任务名、任务堆栈、任务优先级等信息会保存在一个TaskStatus_t类型的结构体数组中。使用此函数需要将宏configUSE_TRACE_FACILITY设置为1。该函数的原型如下。参数说明如下。pxTaskStatusArray: 指向TaskStatus _t类型的结构体数组首地址。uxArraySize: 保存任务状态信息的数组大小。

2023-10-01 10:26:29 845

原创 FreeRTOS任务函数 - 2优先级控制

在创建任务时,可以指定其优先级。在任务运行过程中,可以通过 uxTaskPriorityGet()函数查询任务优先级,通过vTaskPrioritySet()函数改变任务优先级。

2023-09-30 16:23:04 223

原创 FreeRTOS任务函数 - 1延时函数

任务管理是FreeRTOS的核心功能,除内核函数中的任务创建,挂起,恢复,删除和任务切换之外,还有用于让出CPU使用权的阻塞式延时,任务优先级查询,设置,获取任务状态信息,以及获取任务运行时间信息等辅助函数。下面是常用的FreeRTOS任务函数。

2023-09-30 12:54:17 694

原创 FreeRTOS任务调度

调度器开启后,程序就不会从调度器开启函数中返回。在开启调度器时会自动创建个空闲任务,用于回收资源、进入低功耗tickless 模式。空闲任务能够获得的执行时间径往用于衡量一个系统设计是否有足够裕度。FreeRTOS 任务切换通过PendSV中断实现无论是系统调用还是嘀嗒定时器中断,都是通过将ICSR的bit28置1来触发PendSV中断,从而实现任务切换的。对于一些需要保护的代码,可以采用进入和退出临界段或挂起调度器的方式进行保护。

2023-09-29 17:15:10 963 1

原创 FreeRTOS任务基础

在接触操作系统前,单片机程序的编写采用的是在一个while死循环里面反复的执行,在循环中调用相应的函数来完成对应的操作。在循环中各个函数按照排队顺序轮流执行,不管这个功能模块有多紧急,没轮到就只能等着,因此整个系统的实时性差。对于稍大一点的嵌入式应用程序,显然是不适用的。除实时性受限制之外,各个功能模块的先后顺序安排也增加了程序设计的复杂度和不可预见性。为了解决系统的固有问题,引入了操作系统。几乎所有的操作系统都采用多任务系统,FreeRTOS也不例外。

2023-09-21 21:17:48 308

原创 FreeRTOS的裁剪和配置

FreeRTOS是一个可裁剪和配置的嵌入式实时操作系统,其裁剪和配置通过FreeRTOSConfig.h头文件实现,每个FreeRTOS项目中必须有一个FreeRTOSConfig.h文件,FreeRTOS通过以INCLUDE_和config_开始的宏进行裁剪和配置。

2023-09-21 14:17:49 524

空空如也

空空如也

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

TA关注的人

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