![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
FreeRTOS
文章平均质量分 87
饼干饼干圆又圆
这个作者很懒,什么都没留下…
展开
-
freeRTOS学习(四)
如果存储在队列中的数据的大小很大,那么最好使用队列来传输指向数据的指针,而不是一个字节一个字节地将数据复制到队列中。在这种情况下,阻塞时间是在队列已经满的情况下,任务保持在Blocked状态来等待队列上有可用空间的最长时间。任意数量的任务都可以写同一个队列,也可以从同一个队列读任意数量的任务。处于阻塞状态的任务正在等待队列中的数据可用,当另一个任务或中断将数据放入队列中时,该任务会自动移动到Ready状态。队列通常用作先进先出(FIFO)缓冲区,其中数据被写入队列的末端,并从队列的头部删除。原创 2023-06-06 07:02:27 · 340 阅读 · 0 评论 -
FreeRTOS学习(五)
信号量是一种解决同步问题的机制,可以实现对共享资源的有序访问。判断信号量是否有资源信号量有资源,获取信号量成功信号量没有资源,获取信号量失败,可以选择等待(任务阻塞)释放信号量信号量资源数:计数值释放信号量:计数值++获取信号量:计数值–当计数值>0,代表有信号量资源信号量,用于传递状态如果信号量最大值限定为1,就是二值信号量。如果信号量最大值>1,就是计数型信号量。原创 2023-06-05 06:55:53 · 507 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发(十)
由于将Flash中的代码复制到RAM中的操作会带来一定的时间开销,因此,对于此类系统启动时无须Bootloader,而直接在NORFlash或ROM等可以做主存的非易失性存储介质中运行,已达到较快的启动速度。从上面可以看出,在PC上,BIOS满足上面的特性,因为PC启动时就是从BIOS的地址处启动的,然后BIOS的代码读取硬盘的第一扇区的数据,即引导程序,然后将控制权交给引导程序,由引导加载操作系统内核代码运行。在嵌入式系统的实际应用中,针对不同应用环境,对时间效率和空间效率有不同的要求。原创 2023-06-05 06:55:12 · 541 阅读 · 0 评论 -
FreeRTOS学习(四)
进入中断时的自动压栈使用的是进程堆栈,而进入中断handler后自动改为MSP,退出中断时切换回PSP,并且从进程堆栈上弹出数据。同等优先级任务轮流地享有相同的CPU时间(可设置 ),叫时间片,在FreeRTOS中,一个时间片就等于SysTick中断周期。相当于挂起当前的任务等待时间延时到达,会触发任务调度。delay_ms()不会阻塞当前任务,相当于当前任务一直在执行。此函数用于获取指定任务的任务栈历史最小剩余堆栈。所以时基定时器的计时精度高于系统时钟节拍精度。然后根据最高优先级找到对应的任务控制块。原创 2023-03-31 15:57:35 · 392 阅读 · 0 评论 -
FreeRTOS学习(三)
define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5 //系统可管理的最高中断优先级。#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15 //中断最低优先级。需要将宏INCLUDE_vTaskSuspend置1和INCLUDE_xTaskResumeFromISR定义为1。形参:待挂起任务的任务句柄。原创 2023-03-29 21:25:30 · 466 阅读 · 0 评论 -
FreeRTOS学习(二)
portSTACK_GROWTH:栈的生长方向,STM32是高地址向低地址生长的,也就是向下生长的。堆是从低地址向高地址生长(向上生长)使用动态创建函数xTaskCreate()创建的任务会立刻进入就绪态,由任务调度器调度运行。把分配的堆栈内存全部赋值为a5,当值不是a5时,就表示被用了。任务的创建和删除本质就是调用FreeRTOS的API函数。互斥量有优先级继承问题,所以先将基优先级保存下来。xTaskToDelete待删除任务的句柄。任务优先级最大,赋值为31。动态创建任务其内部实现。原创 2023-03-29 17:18:26 · 453 阅读 · 0 评论 -
FreeRTOS学习(一)
3、Task3运行过程中,Task3阻塞了(系统延时或等待信号量等),此时就绪态中,优先级最高的任务Task2执行。1、首先Task1在运行中,在这个过程中Task2就绪了,在抢占式调度器的作用下Task2会抢占Task1的运行。4、Task3阻塞解除了(延时到了或者接收到信号量),此时Task3恢复到就绪态中,抢占TasK2的运行。2、Task2运行过程中,Task3就绪了,在抢占式调度器的作用下Task3会抢占Task2的运行。原创 2023-03-29 06:39:40 · 1098 阅读 · 0 评论 -
freeRTOS学习(三)
在单核处理器上,在任何给定时间内只能有一个任务处于Running状态。任务可以在阻塞状态等待事件发生,并在事件发生时自动移回就绪状态。临时事件发生在特定的时间,例如,当块时间到期时,通常用于实现周期性或超时行为。同步事件发生在任务或中断服务例程使用任务通知、队列、事件组或总多类型的信号量之一发送信息时。原创 2022-10-30 09:23:46 · 1020 阅读 · 0 评论 -
freeRTOS学习(二)
3.第一个空闲的RAM块中,所请求的字节数将装入200字节块,因此pvPortMalloc()将200字节块分割为一个20字节的块和一个180字节的块,然后返回一个指向20字节块的指针。能够容纳所请求的字节数的最小空闲RAM块是25字节块,因此pvPortMalloc()将25字节块分割为一个20字节的块和一个5字节的块,然后返回一个指向20字节块的指针。分配给新创建的任务的堆栈大小与分配给之前删除的任务的堆栈大小相同,因此最佳拟合算法确保了之前分配给被删除任务的堆栈的RAM块被重用来分配新任务的堆栈。原创 2022-10-28 20:43:32 · 1258 阅读 · 0 评论 -
freeRTOS学习(一)
FreeRTOS非常适用于微控制器或小型微处理器的深入嵌入式实时应用程序。这种类型的应用程序通常混合了硬实时需求和软实时需求。软实时需求是那些规定了时间截止日期的需求——但是违反截止日期并不会使系统无用。例如,对击键的响应太慢可能会使系统看起来没有响应,但实际上并没有使它不可用。硬性实时需求是那些规定了时间截止日期的需求,而违反截止日期将导致系统的绝对失败。例如,如果驾驶员的安全气囊对碰撞传感器输入的响应太慢,它可能造成的伤害大于好处。FreeRTOS是一个实时内核(或实时调度程序)原创 2022-10-28 08:50:29 · 628 阅读 · 0 评论