- 博客(13)
- 收藏
- 关注
原创 Freertos学习记录day10-互斥量
我们在学习信号量的过程中,使用二进制型信号量的时候可以成功实现了互斥,而互斥量也是为了实现互斥。那为什么有了信号量之后还需要这个互斥量呢。
2025-12-27 13:33:04
835
原创 Freertos学习记录day9-信号量
信号量不能用来传递数据,只能用来表示资源的数量前面所介绍的队列可以传递具体的数据在任务之间、任务和中断之间,而有时候并不用具体的数据,而只需要传递状态,这种情况下,用信号量会更节省内存。
2025-12-24 20:24:17
773
原创 Freertos学习记录day8-队列(queue)的使用
队列是freertos系统实现任务之间,任务和中断之间通信的一种方式。虽然全局变量也可以实现任务之间的通信,但是其存在一些隐患问题:数据无保护,多个任务并行时,数据容易被破坏队列:遵循FIFO(先写进去的先读出来),以上图为例,任务A和B进行写入工作,右边为头部,任务C和D进行读操作一般来说写数据,要从尾部写入,但是也可以从头部写入,注意:如果从头部写入,并不会覆盖头部数据,这个队列是一个环形的缓冲区,从头部写入,那么原来的数据就往后移位。
2025-11-21 20:56:11
1204
原创 Freertos学习记录day7-同步互斥和通信
临界资源:同一时间只能有一个人使用的资源:比如串口打印:如果两个任务同时使用串口打印,就会导致打印出来的数据非常混乱,必须需要两个人交叉使用,等A打印完了,B才能使用串口开始打印。那么A和B就需要互斥的访问这个资源。同步的话就是,比如A在用串口打印,那么B必须等待,B等待A做完这件事就是同步。
2025-11-20 19:13:53
684
原创 Freertos学习记录day6-任务管理(续)
对应第8个程序,首先完成以下操作:在任务1中创建任务2,并且把任务2的优先级设为2,这样会优先执行任务2,然后在任务2中用一个延迟函数进入堵塞状态,这样就会执行任务1,然后在任务1中执行一个删除任务2的操作代码:while(1)if(xReturn!=pdPASS)while(1)//任务1的句柄debug();
2025-11-18 20:55:01
676
原创 Freertos学习记录day5-任务管理
在之前做优先级实验时,通过用keil中分析仪的功能,可以看出三个任务并不是同时运行,而是严格的按照一个时间间隔运行的,时间间隔大约为1ms。每隔一个时间发生一次中断,这个时间间隔被称为tick,同时要进行计数,第几次中断是tick count。有的操作系统可以规定,一个任务执行多少个tick具体流程:3运行-中断-1运行-中断-2运行-中断在发生中断时,会执行中断服务函数,去readylist中判断是否需要切换任务。其中1ms的设置是在freertos.config文件中,通过下面代码所设置。
2025-11-17 21:31:38
1373
原创 Freertos学习记录day4
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,//任务函数,这个任务具体要做的事情。const char * const pcName,//函数名 /*lint!const configSTACK_DEPTH_TYPE usStackDepth,//栈的深度void * const pvParameters,//传递给任务函数的参数UBaseType_t uxPriority,//优先级。
2025-11-14 21:04:39
1350
原创 Freertos学习记录day3--自己的第一个rtos程序
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,//任务函数,这个任务具体要做的事情。const char * const pcName,//函数名 /*lint!const configSTACK_DEPTH_TYPE usStackDepth,//栈的深度void * const pvParameters,//传递给任务函数的参数UBaseType_t uxPriority,//优先级。
2025-11-12 19:50:34
747
原创 Freertos学习记录day2(2)
以Keil工具下STM32F103芯片为例,它的FreeRTOS的目录如下:之后按照这个架构,对官方的freertos的代码源码进行删减,只保留这些目录。
2025-11-11 20:32:45
981
原创 Freertos学习记录day2(1)
同样在调用b,c函数的时候,也都会分别将LR的值保存到栈中,这样LR的值虽然会被覆盖,但已经即使的保存下来,因此可以正确的返回。那么我们可以发现对于LR来说,如果没有额外的操作,LR的值将会被覆盖,因为每次调用函数,LR都需要保存新的地址。在执行完代码之后,要通过栈中保存的LR寄存器的值,也就是返回地址,跳到这里进行执行之后的代码。同样我们回到在主函数中的操作,在调用a函数的时候,先保存返回地址,再调用a函数。今天再次学习一下栈。栈是系统自动分配的,程序员在写代码时感受不到他的存在。将LR的值保存到栈中。
2025-11-11 15:39:10
342
原创 Freertos学习记录day1
操作系统是为了解决多任务的问题,对于cpu来说,比如有两个事件A和B,如果没有操作系统,有以下程序:while(1)task_A();task_B();两个任务会产生割裂感,两个任务的执行快慢,会互相的影响。不能一心二用而rtos操作系统,采用了分时的思想,比如时间分割为1s,这一秒在做事件a,下一秒在做事件b,就好像,同时在做两个任务。实现一心二用//rtos程序A事件()while(1)做一下事件A();//rtos程序B事件()while(1)做一下事件B();
2025-11-10 21:19:28
908
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅