查看: 2112|回复: 2

[分享] 基于LPC5500-Cortex M33处理器下移植FreeRTOS的操作记录

[复制链接]
  • TA的每日心情
    开心
    2022-4-14 11:08
  • 签到天数: 47 天

    [LV.5]常住居民I

    23

    主题

    131

    帖子

    0

    高级会员

    Rank: 4

    积分
    724
    最后登录
    2024-1-20
    发表于 2020-10-20 16:29:59 | 显示全部楼层 |阅读模式
    本帖最后由 h12121 于 2022-8-4 10:31 编辑

    基于LPC5500-Cortex M33处理器下移植FreeRTOS的操作记录


    1、前言
    本文记录了本人使用Keil V5.28向Cortex M33处理器下进行FreeRTOS V10.2.0的移植操作,过程中描述如存在不当或错误之处欢迎指正。

    2、FreeRTOS V10.2.0简介
    2.1、关于FreeRTOS 的详细介绍建议直接去官网查看,在这里就不再翻译。官网链接如下:
    https://www.freertos.org/

    2.2、本文简单描述一下,我对FreeRTOS 系统文件结构的理解,详细如下:
    1. 1.1、基础的目录结构(Basic Directory Structure)

    2. +---FreeRTOS-Plus        //包含FreeRTOS+的组件及demo例程
    3. |
    4. +---FreeRTOS                //包含FreeRTOS的实时内核代码的源文件及demo例程
    5.         |
    6.         +---Demo                //包含demo应用例程
    7.         |        
    8.                 +---Common        //The demo application files that are used by all the demos
    9.                 |
    10.                 +---Dir x        //The demo application build files for port x
    11.                 |
    12.                 +---Dir y        //The demo application build files for port y
    13.                 |
    14.         +---Source                //包含实时内核源代码
    15.                 |
    16.                 +---include        //FreeRTOS内核代码所需头文件
    17.                 |
    18.                 +---Portable        //Processor specific code
    19.                         |
    20.                         +---Compiler x        //All the ports supported for compiler x
    21.                         |
    22.                         +---Compiler y        //All the ports supported for compiler y
    23.                         |
    24.                         +---MemMang                //The sample heap implementations
    25.                         
    26.                         
    27. 1.2、FreeRTOS内核代码的核心由三个文件包含
    28.         +---Source
    29.                 |
    30.                 +---tasks.c                //
    31.                 |
    32.                 +---queue.c                //
    33.                 |
    34.                 +---list.c                //
    35.                
    36.         +---Source
    37.                 |
    38.                 +---timer.c                //software timer
    39.                 |
    40.                 +---croutine.c                //co-rountine 功能
    41.                
    42. 1.3、FreeRTOS针对每一个处理器架构分别需要一些特定的依赖于架构的代码,这些代码就是RTOS的portable层,
    43.         这部分代码位于 FreeRTOS/Source/Portable/[compiler]/[architecture] 。
    44.         |
    45.         +---[compiler]                //编译器用于创建port
    46.         |
    47.         +---[architecture]                //架构就是port代码最终要运行的平台
    48.         
    49. 1.4、为了有效管理内存,FreeRTOS也提供了堆(heap)操作相关的代码,此部分代码位于:
    50.         |
    51.         +---FreeRTOS/Source/portable/MemMang
    复制代码
    2.3 FreeRTOS V10.2.0 pack包的下载

    2.3.1、可以使用keil自带的Pack Installer,具体界面如下:
    11.png
    2.3.2、可以再通过如下链接下载:

    http://www.keil.com/pack/

    https://keilpack.azureedge.net/pack/ARM.CMSIS-FreeRTOS.10.2.0.pack

    2.3.3、FreeRTOS V10.2.0的安装

    直接双击pack文件包即可。

    3、FreeRTOS的移植操作

    3.1借助KEIL的RTE(Run-Time Enviroment)安装

    (1)创建新的项目;
    (2)配置运行时环境(RTE)时加入如下选项;
    (3)然后单击确定即可;
    注:上述操作简单,但代码编译时可能会出现一些error或warning需要针对性的处理一下。通常主要是修改FreeRTOSConfig.h文件中的一些宏定义。

    (A)如果实际项目中需要使用Timers,即在配置运行环境时加入了Timers选项,那么需要对FreeRTOSConfig.h中的configUSE_TIMERS宏做如下修改:
    //[Demon]0-->1 configUSE_TIMERS must be set to 1 to make the xTimerPendFunctionCall() function available.
    #define configUSE_TIMERS  1
    如果实际项目中不需要使用Timers,那么此宏不需要调整。
    (B)另外,针对不同Port再操作是如果使用非安全模式,那么需要对FreeRTOSConfig.h中的configENABLE_TRUSTZONE做如下修改:

    #define configENABLE_TRUSTZONE                0//[Demon]1-->0

    如果configENABLE_TRUSTZONE定义为1,那么则默认为打开TRUSTZONE功能(关于此功能的详细介绍,可以单独搜索确认)

    3.2手动方式移植FreeRTOS V10.2.0

    (1)新建项目
    (2)配置项目运行时环境时不加入于RTOS相关的选项
    (3)将FreeRTOS V10.2.0下的文件(源文件、头文件)加入到项目中,具体操作如下
       (A)加入系统内核源文件(主要是list.c/task.c/queue.c),这些文件在

       FreeRTOS 10.2.0\Source目录下

       (B)加入内存管理(heap相关)文件,heap1.c ~heap5.c

       \FreeRTOS 10.2.0\Source\portable\MemMang 目录下

       (C) 加入接口(Port)平台相关文件

       \FreeRTOS 10.2.0\Source\portable\GCC\ARM_CM33_NTZ\non_secure

        其中ARM_CM33_NTZ中的NTZ表示:No Trust Zone

       (D)通常需要加入的源文件主要有:
    12.png
    (E)需要加入的头文件如下
    FreeRTOS 10.2.0\Source\portable\GCC\ARM_CM33_NTZ\non_secure
          ==》portasm.h   and  portmacro.h
         2.\FreeRTOS 10.2.0\Config\ARMCM
          ==》FreeRTOSConfig.h文件
         3.FreeRTOS 10.2.0\Source\include
          ==》文件较多,不再列举
         4.\FreeRTOS 10.2.0\CMSIS\RTOS2\FreeRTOS\Include
           ==》freertos_evr.h文件
    (F)挂接中断
          在Cortex-M3硬件下,FreeRTOS使用SysTick作为系统节拍时钟,使用SVC和PendSVC进行上下文切换。异常中断服务代码位于port.c文件中,FreeRTOS的作者已经为各种架构的CPU写好了这些代码,可以直接拿来用,需要用户做的,仅仅是将这些异常中断入口地址挂接到启动代码中。

          在startup_ADuCMxxx.s中,使用IMPORT关键字声明要挂接的异常中断服务函数名,然后将:

             DCD     SVC_Handler            换成:   DCD     vPortSVCHandler
             DCD     PendSV_Handler         换成:   DCD     xPortPendSVHandler
             DCD     SysTick_Handler        换成:   DCD     xPortSysTickHandler
    (G)设置节拍时钟
          这里我们使用SysTick定时器作为系统的节拍时钟,设定每隔10ms产生一次节拍中断。由于FreeRTOS对移植做了非常多的工作,以至于我们只需要在FreeRTOSConfig.h中配置好以下两个宏定义即可:

    configCPU_CLOCK_HZ     (/*你的硬件平台CPU系统时钟,Fcclk*/)
    configTICK_RATE_HZ       ((portTickType)100)         
          第一个宏定义CPU系统时钟,也就是CPU执行时的频率。第二个宏定义FreeRTOS的时间片频率,这里定义为100,表明RTOS一秒钟可以切换100次任务,也就是每个时间片为10ms。

          在prot.c中,函数vPortSetupTimerInterrupt()设置节拍时钟。该函数根据上面的两个宏定义的参数,计算SysTick定时器的重装载数值寄存器,然后设置SysTick定时器的控制及状态寄存器,设置如下:使用内核时钟源、使能中断、使能SysTick定时器。另外,函数vPortSetupTimerInterrupt()由函数vTaskStartScheduler()调用,这个函数用于启动调度器。

    4、以上就是FreeRTOS V10.2.0的整个移植过程的简述,后续实际应用中如有此方面的应用,则会对此文章进行更新。

    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2022-1-4 14:25
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    172

    帖子

    0

    高级会员

    Rank: 4

    积分
    579
    最后登录
    2024-5-6
    发表于 2022-7-5 07:11:49 | 显示全部楼层
    学习了,谢谢!
    每天登陆学习一下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-7-28 08:50
  • 签到天数: 67 天

    [LV.6]常住居民II

    0

    主题

    203

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    328
    最后登录
    2022-7-28
    发表于 2022-7-5 09:02:47 | 显示全部楼层
    学习了 谢谢
    今天天气不错!签到!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-5-10 00:09 , Processed in 0.117939 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表