zoukankan      html  css  js  c++  java
  • 基于IAR平台FreeRTOS移植

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

    1.解压FreeRTOSV8.2.3到本地目录(FreeRTOS的源码在官网上有,目前是9.0.0版本,据说8版本稳定,但未做考证)

    2.FreeRTOSV8.2.3FreeRTOS中的Source文件夹复制到待移植的代码工程中,并且重新命名为“FreeRTOS

     

    3.IAR中建立FreeRTOS的文件域,FreeRTOS文件域下建立srcinc.

      

    4.添加FreeRTOS文件: 

     I)src文件域下,添加FreeRTOS文件夹中源文件

     

     II)src文件域下,添加FreeRTOSportableIARARM_CM4F中源文件

     

     III)src文件域下,添加FreeRTOS/portable/MemMang下的源文件 

     

    完成效果图:

     

      

    5.制作FreeRTOSConfig.h文件 

        由于ACH的核和STM32F4XX系列的核都是ARM CM4F的核,所以可以参考STM32F4XXFreeRTOSConfig.h的文档. 

    把源码中,FreeRTOSV8.2.3FreeRTOSDemoCORTEX_M4F_STM32F407ZG-SK中的FreeRTOSConfig.h复制到 待移植的工程目录中:ACH_170727FreeRTOSinclude

    FreeRTOSConfig.h添加到IAR工程中,FreeRTOS  inc文件域下。(这步仅仅为了编辑代码方便) 

    将待修改FreeRTOSConfig信息: 

    #define configUSE_IDLE_HOOK 1 

    #define configUSE_TICK_HOOK 1 

    #define configCHECK_FOR_STACK_OVERFLOW 2 

    #define configUSE_MALLOC_FAILED_HOOK     1 

    修改为: 

    #define configUSE_IDLE_HOOK 0 

    #define configUSE_TICK_HOOK 0 

    #define configCHECK_FOR_STACK_OVERFLOW 0 

    #define configUSE_MALLOC_FAILED_HOOK     0

    以下为ACH订制修改方案: 

    将:#define configMAX_PRIORITIES ( 5 ) 

       #define configTOTAL_HEAP_SIZE ( size_t ) ( 75 * 1024 ) ) 

    修改为: 

      #define configMAX_PRIORITIES (12) 

      #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 50 * 1024 ) ))

    6.添加编译路径 

    I)添加C文件编译路径 

      

    II)添加汇编文件编译路径 

      

    完成以上步骤,可以编译了,若编译没有错误,表示FreeRTOSconfig文件修改正确。 

    7.删除FreeRTOS中多余的库文件。

         ACH_170727FreeRTOSportable文件夹中,除了IAR MemMang保留,其他文件夹删除。 

     

      

    ACH_170727FreeRTOSportableIAR文件夹中,除了ARM_CM4F保留,其他文件夹删除。 

     

    8.引入系统时钟 

    GKI_SetSystemCoreClock函数中,把sulSystemClcok变量复制给SystemCoreClcok

     

    9.编写测试代码。 

    测试代码如下: 

    /* Scheduler includes. */ 

    #include <stdio.h> 

    #include "FreeRTOS.h" 

    #include "task.h" 

    #include "queue.h" 

    #include "semphr.h" 

    #define TASK1_PRIORITY  2 

    #define TASK2_PRIORITY  3 

    #define TASK3_PRIORITY  4 

    void vTask1( void *pvParameters ); 

    void vTask2( void *pvParameters ); 

    void vTask3( void *pvParameters ); 

    void FreeRTOS_test(void) 

    {

         printf("portTICK_PERIOD_MS = %d ", portTICK_PERIOD_MS); 

        xTaskCreate( vTask1, "Task1", 512, NULL, TASK1_PRIORITY, NULL );

        xTaskCreate( vTask2, "Task2", 512, NULL, TASK2_PRIORITY, NULL ); 

        xTaskCreate( vTask3, "Task3", 512, NULL, TASK3_PRIORITY, NULL ); 

        vTaskStartScheduler(); 

        GKI_Printf("FreeRTOS Failed "); 

    void vTask1(void *pvParameters)

        while (1) { 

            vTaskDelay(1000 / portTICK_PERIOD_MS);

             GKI_Printf("vTask1 ");

        } 

    }

      

    void vTask2(void *pvParameters)

        while (1) { 

            vTaskDelay(2000 / portTICK_PERIOD_MS); 

            GKI_Printf("vTask2 "); 

        } 

    }

     void vTask3(void *pvParameters)

    {

         while (1) { 

            vTaskDelay(3000 / portTICK_PERIOD_MS); 

            GKI_Printf("vTask3 ");

        }

    Uart0端可以看到vTask1 vTask2 vTask3 在指定的时间片上打印,表示FreeRTOS移植成功。

     

  • 相关阅读:
    json解析json字符串时候,数组必须对应jsonObjectArray,不能对应JsonObject。否则会解析错误。
    下载Tomcat时Tomcat网站上的core和deployer的区别
    maven中GroupID 和ArtifactID怎么写
    推送知识点3
    推送知识点2
    推送知识点注意事项
    spring mvc超强的json支持,你自己根本不需要额外的配置。spring mvc都给你配置好了!!!
    数据库中的父表和子表相当于代码中的父类和子类继承
    有两个地方,用到了javabean对象和属性字符串值之间的转换
    web接入层 传入参数的格式化及web返回值传出数据的参数格式化,都要统一
  • 原文地址:https://www.cnblogs.com/mfc1207/p/8616185.html
Copyright © 2011-2022 走看看