请选择 进入手机版 | 继续访问电脑版
查看: 71|回复: 2

[原创] 【飞凌RT1052】+4.关于Free RTOS以及系统移植工程

[复制链接]
  • TA的每日心情
    擦汗
    9 小时前
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    8

    主题

    93

    帖子

    1

    金豆

    中级会员

    Rank: 3Rank: 3

    积分
    294
    最后登录
    2018-11-17
    发表于 2018-11-8 19:54:50 | 显示全部楼层 |阅读模式
    【飞凌RT1052】+4.创建自己的实时操作系统工程模板
    一,嵌入式实时操作系统
    按对外部事件的响应能力来分类,嵌入式操作系统有分时操作系统和实时操作系统。如果操作系统能使计算机系统及时的响应外部事件请求,并能控制所有实时设备和实时任务协调运行,且能在一个规定的时间内完成对事件的处理,那么这种系统就称为实时操作系统(RTOS)。 按时间的正确程度来分,实时操作系统又分为硬件的实时操作系统和软件的实时操作系统。系统必须在极其严格的时间内完成的任务叫做硬件的实时操作系统,如果不是很严格的话就是软件的实时操作系统。 分时操作系统就是按时间片轮转完成各个任务。
    二,FreeRTOS特点

    批注 2018-11-08 190645.jpg


         以上是官方截图,总结一些就是开源免费,商业使用的话不需要用户公开源代码,也不存在任何版权问题,是当前小型嵌入式操作系统市场使用率最高的。下面是2017年最新的嵌入式市场调查报告:
    17年嵌入式系统市场调查.jpg

    17年嵌入式市场调查.jpg


    三,移植过程

           1,在官方网页下载源代码:下载完成之后是一个.exe文件,双击就可以解压完成。

    批注 2018-11-08 191026.jpg

    批注 2018-11-08 191223.jpg


    2,解压完成之后:我们将freeRTOS中Source源代码copy到工程模板的rtos文件夹:

    批注 2018-11-08 191622.jpg

    批注 2018-11-08 191523.jpg

    批注 2018-11-08 191504.jpg

    批注 2018-11-08 191739.jpg

    3,在MDK中建立rtos/source,rtos/port   一个是FreeRTOS源代码,负责系统的运行,Port是软件与硬件的接口。

    批注 2018-11-08 192043.jpg

                  Source代码只需要在rtos文件夹下添加就可以了,port需要根据不同的平台(M3,M4,M7,A8)选择不同的文件,由于RT1052芯片是M7内核的,所以我们选择RVDS下的ARM_CM7下的文件,还有MemMang下的内存管理文件,这里选择heap_4.c这个文件,如果你对这五种内存分配方案的有什么不同点的话,可以点击下面的readme这个网页查看不同点,这里贴一下我在freertos官网看到的关于内存的信息:

    批注 2018-11-08 192337.jpg

    批注 2018-11-08 193103.jpg

    批注 2018-11-08 193120.jpg

    批注 2018-11-08 193543.jpg

    批注 2018-11-08 193909.jpg

    批注 2018-11-08 193955.jpg

    4,在MDK中添加文件夹路径:

    批注 2018-11-08 194040.jpg


    5,编译,可以发现还会有一个错误:..\rtos\include\FreeRTOS.h(56): error:  #5: cannot open source input file "FreeRTOSConfig.h": No such file or directory

    批注 2018-11-08 194242.jpg


    这是关于FREERTOS的配置文件,这里我们可以使用正点原子的配置,其实都是相差无几的,但是他的注释比较好,这里贴一下代码:

    1. #ifndef FREERTOS_CONFIG_H
    2. #define FREERTOS_CONFIG_H

    3. #if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
    4.     #include <stdint.h>
    5.     extern uint32_t SystemCoreClock;
    6. #endif


    7. /***************************************************************************************************************/
    8. /*                                        FreeRTOS基础配置配置选项                                              */
    9. /***************************************************************************************************************/
    10. #define configUSE_PREEMPTION                                        0                       //1使用抢占式内核,0使用协程
    11. #define configUSE_TIME_SLICING                                        1                                                //1使能时间片调度(默认式使能的)
    12. #define configUSE_PORT_OPTIMISED_TASK_SELECTION        0                       //1启用特殊方法来选择下一个要运行的任务
    13.                                                                         //一般是硬件计算前导零指令,如果所使用的
    14.                                                                         //MCU没有这些硬件指令的话此宏应该设置为0!
    15. #define configUSE_TICKLESS_IDLE                                        0                       //1启用低功耗tickless模式
    16. #define configUSE_QUEUE_SETS                                        0                       //为1时启用队列
    17. #define configCPU_CLOCK_HZ                                                (SystemCoreClock)       //CPU频率
    18. #define configTICK_RATE_HZ                                                (1000)                  //时钟节拍频率,这里设置为1000,周期就是1ms
    19. #define configMAX_PRIORITIES                                        (32)                    //可使用的最大优先级
    20. #define configMINIMAL_STACK_SIZE                                ((unsigned short)130)   //空闲任务使用的堆栈大小
    21. #define configMAX_TASK_NAME_LEN                                        (16)                    //任务名字字符串长度

    22. #define configUSE_16_BIT_TICKS                                        0                       //系统节拍计数器变量数据类型,
    23.                                                                         //1表示为16位无符号整形,0表示为32位无符号整形
    24. #define configIDLE_SHOULD_YIELD                                        1                       //为1时空闲任务放弃CPU使用权给其他同优先级的用户任务
    25. #define configUSE_TASK_NOTIFICATIONS            1                       //为1时开启任务通知功能,默认开启
    26. #define configUSE_MUTEXES                                                1                       //为1时使用互斥信号量
    27. #define configQUEUE_REGISTRY_SIZE                                8                       //不为0时表示启用队列记录,具体的值是可以
    28.                                                                         //记录的队列和信号量最大数目。
    29. #define configCHECK_FOR_STACK_OVERFLOW                        0                       //大于0时启用堆栈溢出检测功能,如果使用此功能
    30.                                                                         //用户必须提供一个栈溢出钩子函数,如果使用的话
    31.                                                                         //此值可以为1或者2,因为有两种栈溢出检测方法。
    32. #define configUSE_RECURSIVE_MUTEXES                                1                       //为1时使用递归互斥信号量
    33. #define configUSE_MALLOC_FAILED_HOOK                        0                       //1使用内存申请失败钩子函数
    34. #define configUSE_APPLICATION_TASK_TAG                        0                       
    35. #define configUSE_COUNTING_SEMAPHORES                        1                       //为1时使用计数信号量

    36. /***************************************************************************************************************/
    37. /*                                FreeRTOS与内存申请有关配置选项                                                */
    38. /***************************************************************************************************************/
    39. #define configSUPPORT_DYNAMIC_ALLOCATION        1                       //支持动态内存申请
    40. #define configTOTAL_HEAP_SIZE                                        ((size_t)(46*1024))     //系统所有总的堆大小

    41. /***************************************************************************************************************/
    42. /*                                FreeRTOS与钩子函数有关的配置选项                                              */
    43. /***************************************************************************************************************/
    44. #define configUSE_IDLE_HOOK                                                0                       //1,使用空闲钩子;0,不使用
    45. #define configUSE_TICK_HOOK                                                0                       //1,使用时间片钩子;0,不使用

    46. /***************************************************************************************************************/
    47. /*                                FreeRTOS与运行时间和任务状态收集有关的配置选项                                 */
    48. /***************************************************************************************************************/
    49. #define configGENERATE_RUN_TIME_STATS                0                       //为1时启用运行时间统计功能
    50. #define configUSE_TRACE_FACILITY                                1                       //为1启用可视化跟踪调试
    51. #define configUSE_STATS_FORMATTING_FUNCTIONS        1                       //与宏configUSE_TRACE_FACILITY同时为1时会编译下面3个函数
    52.                                                                         //prvWriteNameToBuffer(),vTaskList(),
    53.                                                                         //vTaskGetRunTimeStats()
    54.                                                                         
    55. /***************************************************************************************************************/
    56. /*                                FreeRTOS与协程有关的配置选项                                                  */
    57. /***************************************************************************************************************/
    58. #define configUSE_CO_ROUTINES                                 0                       //为1时启用协程,启用协程以后必须添加文件croutine.c
    59. #define configMAX_CO_ROUTINE_PRIORITIES         ( 2 )                   //协程的有效优先级数目

    60. /***************************************************************************************************************/
    61. /*                                FreeRTOS与软件定时器有关的配置选项                                            */
    62. /***************************************************************************************************************/
    63. #define configUSE_TIMERS                                        1                               //为1时启用软件定时器
    64. #define configTIMER_TASK_PRIORITY                        (configMAX_PRIORITIES-1)        //软件定时器优先级
    65. #define configTIMER_QUEUE_LENGTH                        5                               //软件定时器队列长度
    66. #define configTIMER_TASK_STACK_DEPTH                (configMINIMAL_STACK_SIZE*2)    //软件定时器任务堆栈大小

    67. /***************************************************************************************************************/
    68. /*                                FreeRTOS可选函数配置选项                                                      */
    69. /***************************************************************************************************************/
    70. #define INCLUDE_xTaskGetSchedulerState          1                       
    71. #define INCLUDE_vTaskPrioritySet                        1
    72. #define INCLUDE_uxTaskPriorityGet                        1
    73. #define INCLUDE_vTaskDelete                                        1
    74. #define INCLUDE_vTaskCleanUpResources                1
    75. #define INCLUDE_vTaskSuspend                                1
    76. #define INCLUDE_vTaskDelayUntil                                1
    77. #define INCLUDE_vTaskDelay                                        1
    78. #define INCLUDE_eTaskGetState                                1
    79. #define INCLUDE_xTimerPendFunctionCall                1

    80. /***************************************************************************************************************/
    81. /*                                FreeRTOS与中断有关的配置选项                                                  */
    82. /***************************************************************************************************************/
    83. #ifdef __NVIC_PRIO_BITS
    84.         #define configPRIO_BITS                       __NVIC_PRIO_BITS
    85. #else
    86.         #define configPRIO_BITS                       4                  
    87. #endif

    88. #define configLIBRARY_LOWEST_INTERRUPT_PRIORITY                        15                      //中断最低优先级
    89. #define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY        5                       //系统可管理的最高中断优先级
    90. #define configKERNEL_INTERRUPT_PRIORITY                 ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
    91. #define configMAX_SYSCALL_INTERRUPT_PRIORITY         ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )

    92. /***************************************************************************************************************/
    93. /*                                FreeRTOS与中断服务函数有关的配置选项                                          */
    94. /***************************************************************************************************************/
    95. #define xPortPendSVHandler         PendSV_Handler
    96. #define vPortSVCHandler         SVC_Handler
    97. #define xPortSysTickHandler SysTick_Handler

    98. #endif /* FREERTOS_CONFIG_H */
    复制代码


    你可以在rtos文件夹新建一个FreeRTOSConfig.h文件,将上面的代码直接copy进入。

    四,这时基本上就已经移植完成了,我们在main.c中将

    1. #include "FreeRTOS.h"
    2. #include "task.h"
    复制代码
    添加进入。根据Free RTOS的API指南新建四个任务,名字随便命名,具体可以看一下的我的模板。 Project_FreeRTOS_Tem.zip (2.98 MB, 下载次数: 1)
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    前天 15:36
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    233

    主题

    908

    帖子

    0

    金豆

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    1326
    最后登录
    2018-11-16
    发表于 2018-11-9 10:11:41 | 显示全部楼层
    给楼主点个赞
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    9 小时前
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    8

    主题

    93

    帖子

    1

    金豆

    中级会员

    Rank: 3Rank: 3

    积分
    294
    最后登录
    2018-11-17
     楼主| 发表于 2018-11-9 10:23:40 | 显示全部楼层

    感谢管管
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

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

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

    GMT+8, 2018-11-17 19:30 , Processed in 0.131182 second(s), 17 queries , MemCache On.

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

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