
FreeRTOS
文章平均质量分 89
一只波本
热爱嵌入式
展开
-
FreeRTOS内部机制学习04(任务通知和软件定时器)
这时候就需要链表上场表演了,创建的定时器的时候创建的各个结构体都会储存在一个链表里面,到时候我就会里面找,比对一下就知道了谁时间到了,周期性的还会更新里面的启动时间和到点时间,方便下次运行!但是,在FreeRTOS实时操作系统中,它想做到实时,就不可能允许在内核,在中断中执行不确定的大小,万一定时器函数非常的长(运行的时间非常长),就会导致Tick中断迟迟无法退出,影响任务的调度,进入影响整个系统!都是利用队列唤醒一个任务来执行其他的工作的,软件定时器中的这个任务叫“任务通知则是不用创建,节省了很多空间!原创 2024-09-12 21:37:01 · 745 阅读 · 0 评论 -
FreeRTOS内部机制学习03(事件组内部机制)
在队列、信号量、互斥量使用他们的函数后,可能你使用之前就会有一个任务或者索多个因为写满了或者没数据可读因此阻塞了,然后假如你在中断中使用了API函数了,就会因此去唤醒他们吧,但是队列它们三个都只会去唤醒一个任务(优先级最高的),相反事件组会去唤醒所有符合这个事件发生条件的任务,那万一一个工程里面真有很多事件在等着同一个事件呢?(比如主人回到家后,自动唤醒灯,风扇,空调,煮饭,。而是仅仅关闭调度器呢?是多么的重要,多么的强大,事件组亦是如此,在创建事件组的时候也分配了一个结构体,那么里面到底又有什么东西呢?原创 2024-09-08 21:44:38 · 915 阅读 · 0 评论 -
FreeRTOS内部机制学习02(消息队列深度学习)
当一个任务因为使用互斥量被另一个任务卡住了,被迫休眠,那么内部就会比较一下这两个任务的优先级,假如,被卡住的任务的优先级>卡住别人的任务,那么卡住的任务就会将对方的优先级提高到像自己一样高级别的优先级,让他更早的运行,及时释放互斥量,让我(卡柱的任务)及时运行!由于低优先级的任务获取了信号量,使得最高优先级的任务卡住了(休眠),那么不就只能中优先级的任务运行了吗?读写任务休眠的时候,可以选择休眠,也是可以选择休眠多久的,不可能呆呆一直傻等着,所以等待的时候是可以设定等待时间的,时间一到,我就不等了被唤醒。原创 2024-09-08 14:06:27 · 1139 阅读 · 0 评论 -
FreeRTOS内部机制学习01(任务创建的细节以及任务调度的内部机制)
关于任务的轮换以及中断恢复继续得以原来为止继续运行,一点也离不开寄存器的作用,所以想要了解任务,了解寄存器也是必不可少的!原创 2024-09-06 20:10:52 · 957 阅读 · 1 评论 -
CubeMX对FreeRTOS的适配
本文章算是对于自己学习FreeRTOS的一个小小总结,我个人比较健忘,也算是为了防止我后面好久没有用CubeMX了忘记了,主要用于备忘吧!原创 2024-08-09 21:51:16 · 770 阅读 · 0 评论 -
延时函数&软件定时器
简单可以理解为闹钟,到达指定一段时间后,就会响铃。STM32 芯片自带硬件定时器,精度较高,达到定时时间后会触发中断,也可以生成 PWM 、输入捕获、输出比较,等等,功能强大,但是由于硬件的限制,个数有限。软件定时器也可以实现定时功能,达到定时时间后可调用回调函数,可以在回调函数里处理信息。原创 2024-05-14 14:20:22 · 881 阅读 · 0 评论 -
FreeRTOS任务通知
xTaskNotifyGive() 和 ulTaskNotifyTake()函数用于发送和接收二值信号量和计数型信号量两者发送用法一样!两者区别于ulTaskNotifyTake()里面的参:pdFALSE:指定在成功接收通知后,将通知值清零或减 1(计数型信号量),pdTRUE:把通知值清零(二值信号量);原创 2024-05-09 20:42:39 · 818 阅读 · 1 评论 -
事件标志组
事件标志位:表明某个事件是否发生,联想:全局变量 flag。通常按位表示,每一个位表示一个事件(高8位不算)事件标志组是一组事件标志位的集合, 可以简单的理解事件标志组,就是一个整数。事件标志组本质是一个 16 位或 32 位无符号的数据类型 EventBits_t ,由 configUSE_16_BIT_TICKS决定。虽然使用了 32 位无符号的数据类型变量来存储事件标志, 但其中的高8位用作存储事件标志组的控制信息,低 24 位用作存储事件标志 ,所以说一个事件组最多可以存储 24 个事件标志!原创 2024-05-05 20:42:31 · 482 阅读 · 2 评论 -
队列以及信号量
信号量(Semaphore),是在多任务环境下使用的一种机制,是可以用来保证两个或多个关键代码段不被并发调用。信号量这个名字,我们可以把它拆分来看,信号可以起到通知信号的作用,然后我们的量还可以用来表示资源的数量,当我们的量只有0和1的时候,它就可以被称作二值信号量,只有两个状态,当我们的那个量没有限制的时候,它就可以被称作为计数型信号量。信号量也是队列的一种。二值信号量其实就是一个长度为1,大小为零的队列,只有0和1两种状态,通常情况下,我们用它来进行互斥访问或任务同步。原创 2024-05-02 15:30:43 · 859 阅读 · 1 评论 -
任务的创建与删除
调度器就是使用相关的调度算法来决定当前需要执行的哪个任务。FreeRTOS中开启任务调度的函数是 vTaskStartScheduler() ,但在 CubeMX 中被封装为osKernelStart()。原创 2024-05-01 13:38:47 · 119 阅读 · 0 评论 -
FreeRTOS
Free即免费的,RTOS的全称是Real time operating system,中文就是实时操作系统。原创 2024-04-30 22:56:52 · 507 阅读 · 2 评论