0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FreeRTOS|再次移植

玩转单片机 来源:玩转单片机 作者: noah 2022-12-06 09:36 次阅读

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

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

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

a9fa2714-74b2-11ed-8abf-dac502259ad0.png

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

aa318a24-74b2-11ed-8abf-dac502259ad0.png

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

aa61cc66-74b2-11ed-8abf-dac502259ad0.png

第四步:添加路径:

aa9b3f28-74b2-11ed-8abf-dac502259ad0.png

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

aabe74e8-74b2-11ed-8abf-dac502259ad0.png

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

aaf4b526-74b2-11ed-8abf-dac502259ad0.png

第七步:编写任务函数:

#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);
  }
}

第八步:看效果:

ab280dd6-74b2-11ed-8abf-dac502259ad0.png

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

审核编辑:汤梓红

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

    关注

    1

    文章

    379

    浏览量

    28127
  • 源码
    +关注

    关注

    8

    文章

    640

    浏览量

    29192
  • FreeRTOS
    +关注

    关注

    12

    文章

    484

    浏览量

    62155
  • GD32
    +关注

    关注

    7

    文章

    403

    浏览量

    24339

原文标题:FreeRTOS|再次移植

文章出处:【微信号:玩转单片机,微信公众号:玩转单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FreeRTOS下对lwIP的移植程序

    FreeRTOS下对 lwIP的移植程序。
    发表于 10-29 10:58 11次下载

    FreeRTOS移植到MAPS-资料汇总

    FreeRTOS已成功移植于超过35种架构的MCU中运行,本文以MAPS-K22开发板为例,介绍了将FreeRTOS移植于NXP Kientis 系列MCU中的步骤,希望能对想学习RT
    发表于 12-24 18:36 6次下载

    freertos移植教程_freertos任务调度原理

    移植之前,我们首先要获取到FreeRTOS的官方的源码包。
    发表于 04-16 09:16 1.2w次阅读
    <b class='flag-5'>freertos</b><b class='flag-5'>移植</b>教程_<b class='flag-5'>freertos</b>任务调度原理

    嵌入式操作系统FREERTOS移植.

    嵌入式操作系统FREERTOS移植.(济南嵌入式开发招聘)-嵌入式操作系统FREERTOS移植                 
    发表于 07-30 12:01 15次下载
    嵌入式操作系统<b class='flag-5'>FREERTOS</b>的<b class='flag-5'>移植</b>.

    转发:stm32 移植 freertos

    转发:stm32 移植 freertos
    发表于 11-20 12:36 14次下载
    转发:stm32 <b class='flag-5'>移植</b> <b class='flag-5'>freertos</b>

    STM32移植FreeRTOS(图文实操)

    目录一、Freertos1、前后台系统2、可剥夺型内核3、Freertos系统简介二、FreeRTOS移植1.在基础工程种新建Freertos
    发表于 11-21 19:06 9次下载
    STM32<b class='flag-5'>移植</b><b class='flag-5'>FreeRTOS</b>(图文实操)

    IAR移植FreeRTOS

    IAR移植FreeRTOS之前写了移植在MDK的文章,之后试着移植到IAR上(IAR的在线调试功能用着比MDK顺手,在线调试实时查看大型数组也不会卡死,MDK查看数组若是太大会很卡)。
    发表于 12-03 10:36 15次下载
    IAR<b class='flag-5'>移植</b><b class='flag-5'>FreeRTOS</b>

    freeRTOS使用笔记一(移植篇)

    freeRTOS使用笔记一(移植篇)
    发表于 12-03 14:06 18次下载
    <b class='flag-5'>freeRTOS</b>使用笔记一(<b class='flag-5'>移植</b>篇)

    英飞凌infineon-XMC4500,移植FreeRTOS

    英飞凌infineon-XMC4500,移植FreeRTOS
    发表于 12-03 16:06 14次下载
    英飞凌infineon-XMC4500,<b class='flag-5'>移植</b><b class='flag-5'>FreeRTOS</b>

    FreeRTOS移植—基于STM32

    FreeRTOS移植—基于STM32
    发表于 12-04 12:51 18次下载
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>移植</b>—基于STM32

    FreeRTOS-stm32f407移植

    FreeRTOS-stm32f407移植需要准备的内容FreeRTOS移植步骤1、添加FreeRTOS源码1)复制源码内容2)删除porta
    发表于 12-04 13:36 9次下载
    <b class='flag-5'>FreeRTOS</b>-stm32f407<b class='flag-5'>移植</b>

    【STM32】FreeRTOS移植

    00. 目录文章目录00. 目录01. 简介02. 预备工作03. FreeRTOS移植04. SYSTEM文件修改05. 测试程序设计06. 附录07. 参考01. 简介我们已经了解
    发表于 12-04 14:06 14次下载
    【STM32】<b class='flag-5'>FreeRTOS</b><b class='flag-5'>移植</b>

    Freertos移植中 “FreeRTOSConfig.h“ 的配置

    Freertos移植中 “FreeRTOSConfig.h“ 的配置
    发表于 12-04 14:06 10次下载
    <b class='flag-5'>Freertos</b> 的<b class='flag-5'>移植</b>中 “FreeRTOSConfig.h“ 的配置

    FreeRTOS操作系统移植文件

    FreeRTOS操作系统移植文件,不会官网下载的,可以这里下载
    发表于 08-28 14:58 1次下载

    FreeRTOS移植

    FreeRTOS包含Demo例程和内核源码(比较重要,我们就需要提取该目录下的大部分文件)。 **Source**文件夹里面包含的是FreeRTOS内核的源代码,我们移植FreeRTOS
    的头像 发表于 02-14 09:34 1142次阅读
    <b class='flag-5'>FreeRTOS</b>的<b class='flag-5'>移植</b>