logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

如何在matlab上搭载STM32CubeMX环境

本文介绍了在MATLAB 2018b及以上版本中配置STM32开发环境的步骤:1)设置KEIL_PATH环境变量;2)下载并安装STM32-MAT/TARGET插件;3)在MATLAB中添加文件路径;4)配置模型为定步长模式;5)使用CubeMX生成MDK_ARM格式工程文件;6)确保Simulink模型与CubeMX的.ioc文件同目录。完成配置后即可利用Simulink库进行逻辑设计并生成C代

#stm32#嵌入式硬件#单片机
RM赛事C型板九轴IMU解算(2)(PID控制温度解决温漂)

摘要:本文介绍了IMU传感器中的热噪声问题及其导致的零漂现象。热噪声由电子热运动产生,会引起IMU数据偏移,表现为静止状态下仍有输出值。解决方法包括测量零漂值并进行补偿,但需保持温度恒定以确保零漂值稳定。文中详细讲解了基于STM32和PID控制的温度调节方案,包括CubeMX配置、代码移植和PID参数设置。通过控制IMU工作温度,可有效减小热噪声带来的测量误差。该方案适用于非FreeRTOS环境,

#人工智能
FreeRTOS学习(10)(互斥量+递归锁+事件组)

对于上一张讲过的优先级反转的的问题的时候我们引入了互斥量(也叫互斥锁)的概念,其实互斥量就是特俗的信号量。那互斥量怎么去使用呢?互斥量是一种但是特殊的点是二进制信号量和计数信号量获取者和释放者可以不是同一个任务,但是互斥信号量获取者和释放者必须是同一个人。函数要注意的是,互斥量不能在ISR中使用。各类操作函数,比如删除、give/take,跟一般是信号量是一样的。但是在使用时也会遇到别的问题比如在

#学习#c语言
FreeRTOS学习笔记(9)(信号量)

然后我们在使用信号量可能会出现优先级反转的问题,简单来说,就是低优先级的任务运行比高优先级的任务高,这个原因就是因为,信号量的权限一直在低优先级手里,也就是低优先级没有释放信号量造成的,信号量是FreeRTOS中用于"计数"和"同步"的工具,主要解决:1个资源多个任务抢的问题,和1个事件多个任务等的问题。信号量本质上是一个特殊的队列,但是它内部是一个计数装置,通过计数来表明程序的状态,可以理解成一

#学习
FreeRTOS学习笔记(8)(队列集)

本文总结了FreeRTOS中队列集的使用方法。针对多任务系统中队列资源浪费问题,提出使用队列集解决方案。详细介绍了三个关键函数:xQueueCreateSet()创建队列集、xQueueAddToSet()添加队列到集合、xQueueSelectFromSet()读取队列数据。通过示例代码展示了如何创建三个队列(x/y/num)并加入队列集,在RX_task中使用队列集接收数据并在OLED上显示。

#学习
FreeRTOS(6)(任务的状态+两种时间阻塞)

其中还有一个重要的点就是空闲任务,他最重要的作用就是处理前面讲到的自删除产生的内存碎片,我个人是初学者,对于他的底层逻辑也了解的不多。但是空心任务是由MX自己生成自动运行的,但是我们要注意的是为了保证任务的正常运行,我们要多使用软阻塞比如vTaskDelay少用像HAL_Delay这样的硬阻塞。总结:互斥和同步是我们需要使用外设时的要求,而接下来要学习的互斥锁,信号量,队列,任务通知,事件组,就是

FreeRTOS学习(5)(任务的优先级)

阻塞状态就是没有达到运行的条件,我个人把他简单理解成准备状态,准备的可以是时间也可以是时间,比如用vTaskDelay()就是主备多少时间,在阻塞状态下这个任务是不运行的,在满足条件后就会进入就绪状态,也就是由阻塞(准备)-》就绪。挂起状态:也由地方叫做暂停状态和阻塞有点相同,在暂停状态下的任务也不运行,但是暂停状态的启动是由自己控制的,就绪状态和运行状态就很好理解了,一个任务处于就绪状态的时,没

#学习
FreeRTOS学习(4)(任务的基本管理)

创建任务的时候任务名不同,和传入的参数不同,但是函数名称需要相同,需要注意传入的参数只能有一个指针,可以到函数内部进行继承。被别的任务删除:别的任务执行vTaskDelete(pvTaskCode),pvTaskCode是自己的句柄。删除别的任务:执行vTaskDelete(pvTaskCode),pvTaskCode是别的任务的句柄。这是主题函数,里面的flag类似一个状态判断标志位,里面的OL

#学习
FreeRTOS学习笔记(2)(MX基础配置+简单汇编)

本文介绍了使用FreeRTOS多线程实现LED灯不同频率闪烁的便捷方法。相比传统定时器方式,FreeRTOS通过xTaskCreate函数创建任务更简洁,文中展示了0.5秒和1秒闪烁两个LED的示例代码。此外,文章还简要讲解了如何通过Keil查看汇编代码,并列举了LDR/STR读写内存、ADD/SUB运算、CMP比较和B/BL跳转等基本汇编指令,帮助理解程序底层逻辑。通过FreeRTOS多线程和汇

#学习
FreeRTOS学习(3)(运行底层)

摘要:文章主要讲解了堆和栈的区别及其在程序运行中的作用。栈由编译器自动管理,存放局部变量和函数调用信息,分配速度快但空间有限;堆需手动管理,适合动态内存分配但可能产生碎片。在FreeRTOS中,每个任务需要独立的栈空间来保存任务现场和临时变量。通过LED闪烁程序示例,说明了多任务切换时栈空间的重要性——虽然程序看似同时运行,实际上是快速切换执行,依赖各自的栈空间保存运行状态。

#学习
    共 11 条
  • 1
  • 2
  • 请选择