• 【FreeRTOS-----笔记(基础)】


    链接------最详细的地方通常是官方文档
    (2022年12月20日官方网站中文版上线,歪瑞古德)

    • 优先级
      • 数值越大优先级越低(与uCOS相反)
      • 最大优先级配置最好不超过32(专用算法效率高)
    • 中断
      • 中断分组最好全部为抢占优先级,容易管理(对于stm32cube也只支持这样)
      • 可被系统管理的中断,顾名思义,就是FreeRTOS可以关的掉的中断(如临界段),不被系统管理的中断,系统是没权限关闭的
      • 如果在中断中使用了可能会影响系统任务调度的api,中断处理结束添加portYIELD_FROM_ISR()
    		BaseType_t xHigherPriorityTaskWoken = pdFALSE;
    		portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
    
    • 1
    • 2
    • 任务创建
      • 如果程序运行没跑起来往往是因为任务创建时的栈分配不够
    • 优先级翻转
      • 指高优先级任务因为等待资源释放导致阻塞,发生任务调度时,低优先级就绪任务先运行的情况
    • 互斥信号量
      • 解决了优先级翻转现象的二值信号量。高优先级任务等待低优先级任务释放资源时,低优先级任务会暂时继承高优先级任务的优先级(优先级继承),这样优先级翻转现象就不会发生。等资源释放后低优先级任务的优先级会恢复
      • 互斥信号量中断函数内不可用
    • 任务信号量无须创建即可使用,任务控制块自带的一个专用任务通知的32位变量ulNotifiedValue,初始计数值为0,执行效率比消息队列实现的信号量要高
    • 任务通知相关的信号量,标志组和邮箱都是操作ulNotifiedValue实现的
    • 内存管理
      • heap_1: 静态内存管理,申请的内存不允许释放
      • heap_2: 比C库更高效的动态内存管理,但不考虑内存碎片,适用于内存块大小固定的情况
      • heap_3: 是对编译器提供malloc和free的封装,线程安全,使用的是启动文件配置的堆内存,而不是FreeRTOSConfig.h中宏定义的堆内存
      • heap_4: 最常用的一种,比C库高效,支持内存碎片回收
      • heap_5: 在heap_4基础上实现,支持不连续的内存空间,比如内部SRAM一块外部SRAM一块,需要使用vPortDefineHeapRegions(xHeapRegions)初始化指定数量、位置和大小
    • xPortGetFreeHeapSize()函数可以获取FreeRTOS动态内存剩余
    • xPortGetMinimumEverFreeHeapSize()函数可以获取从系统启动到当前状态的最小FreeRTOS动态内存剩余
    • 线程安全指可以无副作用的多任务调用
    • 低功耗tickless模式,对应cortex-m3和m4,直接配置configUSE_TICKLESS_IDLE为1就好了,其他需要用户实现

    FreeRTOS官方FAQ

    参考文档

    • 《安富莱 stm32v5开发板 FreeRTOS教程》
    • FreeRTOS版本:v8.2.3
  • 相关阅读:
    【翻译】Raft 共识算法:集群成员变更
    Elasticsearch Analyzer 内置分词器
    【高分快刊】Elsevier旗下,中科院2区SCI,2个月19天录用!
    【Java】Object类及类中方法
    JavaScript的ES6中的箭头函数的详细讲解
    鸿蒙Next 支持数据双向绑定的组件:Checkbox--Search--TextInput
    JavaScript 面向对象的基本用法
    (CVE-2019-0227)Axis<=1.4 远程命令执行漏洞
    基于SSM的电影网站设计与实现
    什么是Ipython
  • 原文地址:https://blog.csdn.net/a1058191679/article/details/126596935