1. 进入FreeRTOS官网下载FreeRTOS源码,其中LTS指的是长期支持版本

  1. 在文件夹中解压并打开,其中FreeRTOS-Kernel是FreeRTO核心组件

  1. 在FreeRTOS-Kernel中我们需要移植的有
  • inclue文件夹:包含需要使用到的头文件

  • portable文件夹:选择Keil文件夹,MemMang其中是内存管理的组件,RVDS文件夹:根据你的MCU核心选择合适文件

  • 还有下列可能要用到的FreeRTOS内核.c文件

  1. 下载2022版本的FreeRTOS包,使用其中的demo的FreeRTOSConfig.h文件,这是FreeRTOS的配置文件,可以对其进行裁剪以及配置,我这里使用的是stm32f407get6故选择FreeRTOSv202212.01\FreeRTOS\Demo\CORTEX_M4F_STM32F407ZG-SK

  2. 在keil中添加对应的头文件路径

  3. 修改FreeRTOSConfig.h文件,修改为第二个预编译

  4. 在stm32f4xx_it.c文件中将“PendSV_Handler”,“SVC_Handler”,“SysTick_Handler”这三个函数注释掉并在cubemx将下面三个配置删除

  5. 在FreeRTOSConfig.h文件中将下面的组件注释掉

    • #define configUSE_IDLE_HOOK 0
    • #define configUSE_TICK_HOOK 0
    • #define configCHECK_FOR_STACK_OVERFLOW 0
    • #define configUSE_MALLOC_FAILED_HOOK 0

    在 FreeRTOS 中,这些预编译指令用于配置内核的特定功能。以下是每个指令的含义:

    1. configUSE_IDLE_HOOK:

      • 这个配置项用于启用或禁用空闲任务钩子函数。如果设置为 1,可以定义一个空闲任务钩子函数 vApplicationIdleHook(),在系统处于空闲状态时调用。
    2. configUSE_TICK_HOOK:

      • 这个选项用于启用或禁用滴答(tick)钩子函数。如果设置为 1,可以定义一个滴答钩子函数 vApplicationTickHook(),在每次系统滴答时调用。
    3. configCHECK_FOR_STACK_OVERFLOW:

      • 此选项用于启用或禁用堆栈溢出检查。如果设置为 1,FreeRTOS 会在上下文切换时检查每个任务的堆栈大小,以防止堆栈溢出。
    4. configUSE_MALLOC_FAILED_HOOK:

      • 这个配置项用于启用或禁用内存分配失败钩子函数。如果设置为 1,可以定义一个钩子函数 vApplicationMallocFailedHook(),当内存分配失败(例如,调用 pvPortMalloc() 时没有足够内存)时会调用该函数。

    将这些选项设置为 0 表示禁用相应的功能,从而减少系统的开销和复杂性。

  6. 值得注意的是,freertos默认的时基单元是系统时钟即systick,所以在使用cubemx时,hal的系统时钟需要使用其他定时器,不能使用systick定时器

    参考链接

    FreeRTOS移植教程(超详细)——基于GD32F303X系列MCU - - 21ic电子技术开发论坛

    [STM32]从零开始的STM32 FreeRTOS移植教程_stm32使用rtos-CSDN博客

    STM32用CUBEMx生成工程, 不使用CMSIS, 自己移植freertos

    cubemx在使用freertos的时候为何推荐使用除systick以外的timebase_cubemx提示freertos不用systick时基-CSDN博客

    基于STM32H7的FreeRTOS+ FatFS + emWin + ST USB的综合模板下载(已经发布2021-01-21) - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz!

    移植FreeRTOS过程中SysTick_Handler()重定义相关的一个问题 - FreeRTOS & Zephyr & RTEMS & Contiki - 硬汉嵌入式论坛 - Powered by Discuz!

    【STM32/FreeRTOS】SysTick定时器及FreeRTOS系统节拍_freertos时钟使用systick还是timer-CSDN博客

STM32hal库FreeRTOS移植笔记的更多相关文章

  1. 基于IAR平台FreeRTOS移植

     开始这篇文章之前先简单说明一下,我使用的MCU是我们公司自主研发的ACH1180芯片,和STM32差不多,都是Cortex-M4的核,所以移植的过程参考了STM32移植的步骤. 1.解压FreeRT ...

  2. tslib移植笔记(1)【转】

    本文转载自:https://blog.csdn.net/zijie_xiao/article/details/50740950 tslib移植笔记(1)2016-04-25 tslib背景[摘自百度] ...

  3. STemWin5.22移植笔记【转】

    来自:http://www.openedv.com/posts/list/27697.htm STemWin5.22移植笔记 网上关于emwin的资料很少,我在移植的时候查了很多资料,对我一个感觉是好 ...

  4. 解决嵌入式linux系统下iconv库的移植问题

    一.解决问题    在arm开发板上使用framebuff,在汉字显示时,因为只有gb2312的16*16的汉字字库,而ubuntu16.04默认    的编码方式时utf-8,因此需要进行转码(ut ...

  5. 手把手图文并茂教你用Android Studio编译FFmpeg库并移植

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52661331 之前曾写过一篇&l ...

  6. C++标准库第二版笔记 3 和异常的理解 1

    C++标准库第二版笔记 3 和异常的理解 1 差错和异常(error and exception)的处理 标准异常类(exception class) 定义于 分为: 1.语言本身支持的异常 2.标准 ...

  7. C++标准库第二版笔记 2.1

    C++标准库第二版笔记 2.1 1 Range-Based for 循环 for ( decl : coll ) { statements; } // collaborate 类似C# foreach ...

  8. nRF52832 SDK15.3.0 基于ble_app_uart demo FreeRTOS移植

    参考资料:https://blog.csdn.net/u010860832/article/details/86235993 这里把移植经验记录下来,供有需要的同学参考,有不对的地方也请大家批评指正. ...

  9. C++标准库第二版笔记 2

    C++标准库第二版笔记 2 微小但重要的语法提升 template表达式内的空格: vector< list<int> >; // OK in each C++ version ...

  10. C++标准库第二版笔记 1

    C++标准库第二版笔记 1 C++ std历史 第一份标准化文档: C++98 & C++03 & TR1 TR1 Information Technology- Programmin ...

随机推荐

  1. WIN10桌面图标间距变得很大怎么办?

    转载来源: 作者:填鸭式教育受益者链接:https://www.zhihu.com/question/328872597/answer/1862986629来源:知乎 1.按Win+R打开运行,输入r ...

  2. Vue(六)——条件渲染

    Vue--条件渲染 v-if.v-else-if.v-else v-if 指令用于条件性地渲染一块内容,表达式的值为 true --渲染. false--不渲染 v-if.v-else-if.v-el ...

  3. codeup之数组元素原地逆置

    Description 将一个长度为10的整型数组中的值按逆序重新存放. 如:原来的顺序为1,2,3,4,5,6,7,8,9,0,要求改为0,9,8,7,6,5,4,3,2,1 Input 从键盘上输 ...

  4. JQuery元素滚动定位及获取元素的scrollTop,clientHeight,scrollHeight

    scrollHeight为滚动DIV的实际总体高度,获取方式为:$(obj)[0].scrollHeight clientHeight为滚动DIV的可见高度,获取方式为:$(obj)[0].clien ...

  5. deepseek-r1的1.5b、7b、8b、14b、32b、70b和671b有啥区别?

    DeepSeek-R1系列提供了多种参数规模的模型(1.5B.7B.8B.14B.32B.70B 和 671B),它们在模型架构.性能表现.资源需求和适用场景上有显著差异.以下是对这些版本的核心区别总 ...

  6. 【2020.11.25提高组模拟】树的解构(deconstruct) 题解

    [2020.11.25提高组模拟]树的解构(deconstruct) 题解 题目描述 给一棵以\(1\)为根的外向树,进行\((n-1)\)次删边操作,每次都会从没有删掉的边中等概率地删掉一条边\(a ...

  7. Java中的静态块(static{})

    静态块(static{}) (1) static关键字还有一个比较关键的作用,用来形成静态代码块(static{} 即static块 )以优化程序性能. (2) static块可以置于类中的任何地方, ...

  8. FPGA使用两个HC595驱动8位数码管

    FPGA使用两个HC595驱动8位数码管 本文章给出使用FPGA3根线来驱动8位数码管的示例代码,输入为disp_data,共7*8=56位,输出输入如图所示. 硬件方面参数 该程序只能控制数码管的7 ...

  9. 「Log」2023.8.21 小记

    序幕 七点到校,管理整理博客. 然后开始写博客,SAM 的. 学长开始讲题,2-SAT,还算好理解,写完博客过了下板子题. \(\color{royalblue}{P4782\ [模板]2-SAT 问 ...

  10. window10本地搭建DeepSeek R1(三) 'NoneType' object has no attribute 'encode'

    上面两章介绍了在本地安装DeepSeek+OpenWebUI.这里介绍一下几个需要注意的地方. 1:文件上传失败,上传文件是报错:python "'NoneType' object has ...