查看: 339|回复: 0

CW32移植FreeRTOS

[复制链接]
  • TA的每日心情

    2024-11-15 16:19
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    292

    主题

    26

    回帖

    2978

    积分

    管理员

    积分
    2978
    发表于 2024-11-12 09:28:02 | 显示全部楼层 |阅读模式
    一、下载FreeRTOS

            FreeRTOS下载地址

    1、进入官网,选择V9.0.0版本进入



    2、选择FreeRTOSv9.0.0.zip下载,点进去等待数秒钟后自动下载



    3、将下载后的文件解压,我们需要的是里面一个名为FreeRTOS的文件夹



    二、移植FreeRTOS

    1、我们需要打开一个例程来移植FreeRTOS,并在该工程下创建一个FreeROTS的文件夹



    2、在新建的FreeRTOS文件夹里面再创建三个文件夹:src、port、include



    3、将刚才下载的FreeRTOSv9.0.0\FreeRTOS\Source里面的.c文件复制到新建的FreeRTOS\src文件夹下面



    4、将刚才下载的FreeRTOSv9.0.0\FreeRTOS\Source\portable里面的RVDS跟MemMang文件夹复制到新建的FreeRTOS\port文件夹下面



    5、将刚才下载的FreeRTOSv9.0.0\FreeRTOS\Source\include里面的所有文件复制到新建的FreeRTOS\include文件夹下面



    6、因为使用的是CW32L083VxTx StartKit REV01开发板,接下来找到刚才下载的FreeRTOSv9.0.0\FreeRTOS\Demo里面的CORTEX_STM32F103_Keil文件夹,将FreeRTOSConfig.h文件复制到新建的FreeRTOS\include文件夹下面



    7、打开工程的Manage Project Items,添加FreeRTOS\port,并为其添加FreeRTOS\port\MemMang里面的heap_4.c和FreeRTOS\port\RVDS\ARM_CM0里面的port.c文件



    8、添加FreeRTOS,并为其添加FreeRTOS\src里面的6个.c文件



    9、点击魔术棒,将相关的头文件路径添加进来




    10、修改FreeRTOSConfig.h文件

    #define configUSE_PREEMPTION                1
    #define configUSE_IDLE_HOOK                        0
    #define configUSE_TICK_HOOK                        0
    #define configCPU_CLOCK_HZ                        ( ( unsigned long ) 48000000 )      
    #define configTICK_RATE_HZ                        ( ( TickType_t ) 1000 )
    #define configMAX_PRIORITIES                ( 5 )
    #define configMINIMAL_STACK_SIZE        ( ( unsigned short ) 128 )
    #define configTOTAL_HEAP_SIZE                ( ( size_t ) ( 4 * 1024 ) )
    #define configMAX_TASK_NAME_LEN                ( 16 )
    #define configUSE_TRACE_FACILITY        0
    #define configUSE_16_BIT_TICKS                0
    #define configIDLE_SHOULD_YIELD                1

    #define xPortPendSVHandler                         PendSV_Handler
    #define vPortSVCHandler                                SVC_Handler
    11、打开interrupts_cw32l083.c文件,添加头文件,实现SysTick_Handler(void)函数,屏蔽掉SVC_Handler(void)和PendSV_Handler(void)函数




    void SysTick_Handler(void)
    {
            #if (INCLUDE_xTaskGetSchedulerState)
                    if(xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)
                    {
            #endif
                            xPortSysTickHandler();
            #if (INCLUDE_xTaskGetSchedulerState)
                    }
                    #endif
    }




    至此就算移植结束了,接下来测试一下移植是否成功

    三、代码测试

    修改main.c,实现led1跟led2闪烁

    #include "../inc/main.h"
    #include "FreeRTOS.h"
    #include "task.h"

    #define LED_GPIO_PORT CW_GPIOC
    #define LED_GPIO_PINS GPIO_PIN_3 | GPIO_PIN_2

    void Led1Funtion(void* param);
    void Led2Funtion(void* param);

    int32_t main(void)
    {
        GPIO_InitTypeDef GPIO_InitStruct = {0};

        __RCC_GPIOC_CLK_ENABLE();

        GPIO_InitStruct.IT = GPIO_IT_NONE;
        GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
        GPIO_InitStruct.Pins = LED_GPIO_PINS;

        GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);
          
            TaskHandle_t xHandleLed1;
            TaskHandle_t xHandleLed2;
          
            xTaskCreate(Led1Funtion,"LED1", 100, NULL, 1, &xHandleLed1);
            xTaskCreate(Led2Funtion,"LED2", 100, NULL, 1, &xHandleLed2);
          
            vTaskStartScheduler();
          
            return 0;
    }
    void Led1Funtion(void* param)
    {
            while(1)
            {
                    PC03_TOG();
                    vTaskDelay(100);
            }
    }
    void Led2Funtion(void* param)
    {
            while(1)
            {
                    PC02_TOG();
                    vTaskDelay(100);
            }
    }

    ————————————————

                                版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    原文链接:https://blog.csdn.net/weixin_72801483/article/details/134026794

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

    本版积分规则

    友情链接:

    返回顶部 返回列表