Freertos学习笔记

本文详细介绍了FreeRTOS的移植、任务管理、中断管理、同步互斥与通信机制,如信号量、队列、邮箱等,并探讨了事件组、任务通知及软件定时器的使用。通过对FreeRTOS核心组件的解析,帮助读者深入理解实时操作系统的工作原理。
摘要由CSDN通过智能技术生成

Freertos移植

在这里插入图片描述

  • 其核心文件为,tasks.c、timers.c、queue.c、event_groups.c、croutine.c、list.c。源码兼顾了很多平台,但是我们可以删除一些不用的平台以及例程等,只保留我们要的。
    比如RVDS/ARM_CM3,这表示cotexM3架构再RVDS或Keil工具上的移植文件(比如下图中的port.c、portmacro.h)
    在编程过程中的大部分宏配置都在FreeRTOSConfig.h这个配置文件(调度、优先级、空闲任务等)

  • 任务切换基础
    1、任务间的切换,是利用tick中断实现的(关于这个时间片轮转的时间通过上面提到过的配置文件设置)
    2、stm32+freertos之所以要用到两套timebase(一是freertos的心跳tick (os_tick)
    3、防止在高优先级(优先级高于systick)中断服务中调用HAL_Delay(),导致中断服务忙等待,这样任何优先级低于该中断的中断都得不到服务,当然也包括os的全部调度.

    BaseType_t xTaskCreate(TaskFunction_t pxTaskCode,//函数指针
    const char* const pcName,//任务名字
    const configSTACK_DEPTH usStackDepth,//任务栈大小
    void * const pv Parameters,//传入任务的参数,通常是指的是任务的参数
    UbaseType_t uxPriority,//优先级
    TaskHandle_t * const pxCreatedTask);//任务函数句柄
    上面是动态创建任务,而静态创建任务是需要自己分配任务堆栈以及TCB控制块大小
    Void vTaskDelete(TaskHandle_t xTaskToDelete);//任务句柄
    Void vTaskSuspend(TaskHandle_t xTaskToSuspend);/任务去休息了
    Void vTaskResume(TaskHandle_t xTaskToResume);
    
TCB控制块
  • 信息表和内存
    在这里插入图片描述
  • 任务的创建流程:
    分配TCB大小、任务堆栈大小
    初始化TCB、初始化任务堆栈
    添加到任务就绪队列
  • 任务的删除流程:
    从就绪链表中删除
    从事件表中删除(任务状态信息)
    释放任务控制块、任务堆栈(内存资源)
    开始调度任务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

栋哥爱做饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值