gd32e103加入freertos的步骤

     gd32E103的芯片比较强大,m4的内核,120mhz主频,跑freertos是没有问题的。作为一个轻量级的操作系统,FreeRTOS提供的功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。FreeRTOS内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,CPU总是让处于就绪态的、优先级最高的任务先运行。FreeRT0S内核同时支持轮换调度算法,系统允许不同的任务使用相同的优先级,在没有更高优先级任务就绪的情况下,同一优先级的任务共享CPU的使用时间。

下面讲具体步骤。

第一、把freertos的文件拷贝到工程目录下面。

第二、加入这4个头文件

/* Scheduler includes. */
#include    "FreeRTOS.h"
#include    "task.h"
#include    "queue.h"
#include    "semphr.h"

第三、打开freeRTOSConfig文件,对各个参数进行配置。我的配置如下

#define configUSE_PREEMPTION        1
#define configUSE_IDLE_HOOK            0
#define configUSE_TICK_HOOK            0
#define configCPU_CLOCK_HZ            ( ( unsigned long ) 120000000 )    
#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
第四步:设置中断优先级组

          nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0);

       必须这样设置,否则运行不正常。

第五步: 

 修改systick_config函数

void systick_config(void)
{
    #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)     
    SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 Full Access */ 
    #endif 
    
    
    /* setup systick timer for 1000Hz interrupts */
    if (SysTick_Config(SystemCoreClock / 1000U)){
        /* capture error */
        while (1){
        }
    }
    /* configure the systick handler priority */
    NVIC_SetPriority(SysTick_IRQn, 0x00U);
}

#define xPortPendSVHandler     PendSV_Handler
#define vPortSVCHandler     SVC_Handler
#define xPortSysTickHandler SysTick_Handler

重新定向这个3个函数,保证指向新的函数,去掉以前旧的函数。

这个很好理解,就是操作系统的心跳函数。

第六步

前面的工作做完了,就可以在主函数里面启动操作系统了。

启动部分如下

 xTaskCreate((TaskFunction_t )start_task,            //????
                (const char*    )"start_task",          //????
                (uint16_t       )configMINIMAL_STACK_SIZE,        //??????
                (void*          )NULL,                  //??????????
                (UBaseType_t    )tskIDLE_PRIORITY + 3,       //?????
                (TaskHandle_t*  )&StartTask_Handler);   //????              
      vTaskStartScheduler();          //??????
      while (1);

初始化任务,里面可以用来初始化数据,同时启动你想启动的任务。这个小小的系统就运行起来了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
引用提到,GD32E103芯片是一款比较强大的芯片,其内核为M4,主频为120MHz。因此,在GD32E103芯片上运行FreeRTOS是没有问题的。FreeRTOS是一个轻量级的操作系统,提供了任务管理、时间管理、信号量、消息队列、内存管理等功能,可以满足较小系统的需求。FreeRTOS内核支持优先级调度算法,任务可以根据重要程度被赋予一定的优先级,CPU会优先执行优先级最高的任务。同时,FreeRTOS还支持轮换调度算法,允许不同优先级的任务共享CPU使用时间。 引用列出了在使用FreeRTOS时需要包含的头文件,其中包括FreeRTOS.h、task.h、queue.h和semphr.h。这些头文件提供了使用FreeRTOS所需的任务、队列和信号量的定义和函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span> #### 引用[.reference_title] - *1* [GD32E103 Keil 环境下在 FreeRTOS 任务中使用浮点运算报 HardFault 异常的问题](https://blog.csdn.net/dianqicyuyan/article/details/124378189)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* *4* [gd32e103加入freertos步骤](https://blog.csdn.net/hua_ren79/article/details/118522104)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值