
Freertos
文章平均质量分 50
学习积累
奋斗的少年yyds
这个作者很懒,什么都没留下…
展开
-
freertos定时器任务运行流程()
/获取下一个定时的时间,即如果定时10ms,则在启动定时器的时间加上10ms,即定时时间。= pdFALSE )//如果没有定时器任务,那么进入挂起态。= pdFALSE )//判断定时器列表是不是空的。这是定时器的回调函数,pxCallbackFunction是函数指针,参数是定时器句柄。获取当前的时间,并判断定时器列表有没有交换,如果定时器计时超过一个周期就会从0开始,意味着需要交换定时器列表。定时器列表中存储创建的定时器,如果定时时间超过当前最大时间,就放入溢出列表。/这一步不知道用处是什么。原创 2023-10-02 09:58:24 · 339 阅读 · 0 评论 -
xPortPendSVHandler任务切换流程
{r4-r11} /* Save the remaining registers. */进入中断会自动保存部分寄存器到//PSP。在任务切换函数中,xCurrentTCB的值变成了要切换任务的TCB。ldr r2, [r3]//r2保存pxCurrentTCB的值,也是结构体topofstack的值,即栈顶的地址,因为中断的硬件保存机制,所以即使另一个任务是被中断的,也可以继续保持运行。根据找到的就绪列表中的其它任务,并将该任务的TCB赋值给pxCurrentTCB。原创 2023-10-01 14:04:13 · 341 阅读 · 0 评论 -
freertos动态和静态任务创建的区别
const uint32_t ulStackDepth,栈的长度(不是大小,)UBaseType_t uxPriority,任务优先级。void * const pvParameters,任务参数。xTaskCreateStatic( TaskFunction_t pxTaskCode,//函数指针。xTaskCreate( TaskFunction_t pxTaskCode,函数指针。静态创建任务时任务控制块和栈空间是提前分配好的,是静态的。由上可知,动态创建任务时任务控制块和栈空间是动态分配的,原创 2023-09-28 15:23:19 · 184 阅读 · 0 评论 -
关于如何通过用任务控制块中的成员变量找到任务控制块的方法(附程序)
我们通过将&( pxNewTCB->xStateListItem )加入到不同的列表中实现任务的控制,其中实现任务控制,必须要实现上述代码,通过将任务控制块的成员变量指向自身,即可通过成员变量找到任务控制块的地址。将pxNewTCB设置为从ListItem_t返回的连接,在freertos中初始化一个任务时,总会遇到。原创 2023-09-27 22:48:34 · 97 阅读 · 0 评论 -
为何Freertos的系统中断进入周期为1ms一次?
我的 系统内部时钟为72MHZ,所以记一次需要1/72MHZ秒,reload为定时器计数个数,即(1/congfiTICK_TATE_HZ)秒进一次中断。在22行可得,需计1/72MHZ*(reload)秒。计数个数乘以记一次所需时间,即为进入中断所需时间。(我忘记计算我的时钟频率了’)原创 2023-04-18 18:54:31 · 423 阅读 · 0 评论 -
FreeRtos延时函数delay_us()
函数内部tcnt 的值是累加的 ,每运行一次函数,tcnt就会加一次定时器计次个数(told-tnow)这个函数就是记录,运行while内部运行一次所需的时间,然后相加,知道大于等于我们设定的时间。tnow>told 是因为,定时器减到零,又从reload开始减。原创 2023-04-17 20:47:17 · 3347 阅读 · 0 评论 -
freertos 的任务切换时,数据变量有哪个任务的栈所保存
由于 FreeRTOS 采用协作式调度方式,任务主动让出 CPU 后,下一个任务被调度执行时,当前任务的上下文(包括数据变量)都会保存在该任务的栈空间中。当该任务再次被调度时,它的上下文会从栈中恢复。任务切换时,数据变量会保存在被切换出的任务的栈中,并从被切换入的任务的栈中恢复。当任务 A 被挂起时,它的上下文数据(包括数据变量)保存在任务 A 自己的栈中,当任务 B 被恢复执行时,它的上下文数据(包括数据变量)从任务 B 的栈中恢复。这样任务 A 和任务 B 之间的数据是相互独立的,互不影响的。原创 2023-04-25 14:26:20 · 418 阅读 · 0 评论 -
Freertos 任务抢占的时间关系
在任务一中,创建任务二,任务二的优先级比任务一高,则任务二会立刻执行。原创 2023-04-24 20:55:38 · 159 阅读 · 0 评论 -
Freertos优先级分组和几位有效问题
7:4]来表达抢占式优先级,所以没有子优先级。这是在Freertos中官方建议的。这样只需设定一个优先级就能区分了。CM3中的优先级位段,优先级高位对齐,F103的默认值用了4个Bit,即Bit7-4,在优先级。原创 2023-05-25 17:53:32 · 101 阅读 · 0 评论 -
Freertos 任务调度器之设置pendsv和systick优先级为最低
监视器的地址,但是,这里用的是按字访问,所以0xe000ed20~0xe000ed23组成了一个以0xe000ed20为地址的32 寄存器。一个8位寄存器的高位对齐来设置优先级,且寄存器的高四位有效,所以要左移4位,移出无效区域,可以带入15,和4试一下。因为pendsv和systick分别在第三和第四个寄存器所以分别左移16和24位。0xe000ed20是。原创 2023-05-25 11:32:29 · 337 阅读 · 0 评论 -
Freertos 创建任务(动态)
Freertos 中portSTACK_GROWTH>0表明栈是向下增长的,arm就是向下增长的,所以进入。事件链表是根据优先级设置链表项的值的,优先级越高(号小的优先级高),值越大。刚创建的任务还没有放入就绪链表,Container指向就绪链表(等)将任务的状态链表插入当前链表项的后面。(就是链表的最后)。任务句柄会获得任务控制块,这样就可以通过任务句柄控制任务。给任务控制块分配空间(回传给任务句柄)。每一个链表都有链表指针,指示当前的链表想。根据传入的指针,pxList就是就绪链表。原创 2023-05-25 09:56:57 · 840 阅读 · 0 评论