FreeRTOS|再次移植

描述

FreeRTOS系列推文很久之前就完结了, 最近在GD32进行相关移植, 发现还有更好的移植方案, 比起直接修改启动文件更加实用, 这里只简单做下介绍和总结;

第一步: 准备一个裸机工程文件, 最好配置了GPIO和串口, 因为这两个是最方便查看效果的;

第二步:把FreeRTOS的源码直接复制到工程目录下,这样就算没安装支持包都可以直接使用,也方便相关管理和维护:

GD32

第三步: 添加分组, 然后把相关源码添加进去:

GD32

注意: 配置文件可以在官方demo中找到:

GD32

第四步: 添加路径:

GD32

第五步: 在FreeRTOSConfig.h进行适当修改:

GD32

第六步: 屏蔽三个中断函数:

GD32

第七步: 编写任务函数:

 

#include "hal_led.h"
#include "hal_log.h"
#include "hal_usart.h"
#include "hal_printf.h"


#include "FreeRTOS.h"
#include "task.h"


#define START_TASK_PRIO 1         //任务优先级
#define START_STK_SIZE 128        //任务堆栈大小
TaskHandle_t StartTask_Handler;     //任务句柄
void start_task(void *pvParameters);//任务函数


#define LED0_TASK_PRIO 2      //任务优先级
#define LED0_STK_SIZE 50      //任务堆栈大小
TaskHandle_t LED0Task_Handler;    //任务句柄
void led0_task(void *p_arg);    //任务函数


// 外设初始化
void hal_device_init(void)
{
  hal_led_init();
  hal_log_init();
  hal_usart_init();
}




// 主循环
int main( void ) 
{
  // 设置系统中断优先级分组 4
  nvic_priority_group_set(NVIC_PRIGROUP_PRE0_SUB4);
  // 外设初始化
  hal_device_init();
  //创建开始任务
  xTaskCreate(
    (TaskFunction_t )start_task,    //任务函数
    (const char* )"start_task",      //任务名称
    (uint16_t )START_STK_SIZE,      //任务堆栈大小
    (void* )NULL,            //传递给任务函数的参数
    (UBaseType_t )START_TASK_PRIO,    //任务优先级
    (TaskHandle_t* )&StartTask_Handler  //任务句柄 
  );
  vTaskStartScheduler();  //开启调度
  while(1);
}




//开始任务函数
void start_task(void *pvParameters)
{
  taskENTER_CRITICAL();   //进入临界区
  //创建 LED0 任务
  xTaskCreate(
    (TaskFunction_t )led0_task, 
    (const char* )"led0_task", 
    (uint16_t )LED0_STK_SIZE, 
    (void* )NULL,
    (UBaseType_t )LED0_TASK_PRIO,
    (TaskHandle_t* )&LED0Task_Handler
  );
  vTaskDelete(StartTask_Handler); //删除开始任务
  taskEXIT_CRITICAL();   //退出临界区
}


//LED0 任务函数
void led0_task(void *pvParameters)
{
  while(1)
  {
    /* 测试精度*/
  if(RESET == gpio_input_bit_get(GPIOC, GPIO_PIN_6)){
    gpio_bit_write(GPIOC, GPIO_PIN_6, SET);
  }else{
    gpio_bit_write(GPIOC, GPIO_PIN_6, RESET);
  }
  usert_printf(USART0, "USART0
");
  vTaskDelay(1000);
  }
}

 

第八步: 看效果:

GD32

这种移植方案与以前的方案最大的不同就是不修改启动文件, 对于不懂汇编和启动文件的读者比较友好, 也比较推荐这种方案来使用FreeRTOS; 解决问题的方法千千万万, 选择自己喜欢的就好, 也没有什么不可。

  审核编辑:汤梓红

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分