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

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

3天内不再提示

FreeRTOS移植+点亮OLED任务线程

冬至子 来源:兆易创新GD32 MCU 作者:足球之路 2022-10-11 14:37 次阅读

准备工作:

下载了官方提供的手册、DEMO、固件包,并通读了一下(注意,MDK版本要求比较高!为了找个能用的Keil折腾了很久):

pYYBAGNE4BWATCH0AABs6gP8e0U942.png

制作裸机点灯代码

前面已经有‘探路者’把这部分做完了,我就不再叙述了,不过还是要自己动手移植一下,这样可以了解片子与f103等常用的芯片的区别。

添加FreeRTOS部分

这是第一次真正意义上自己独立移植了一次FreeRTOS^_^,没有遇到太多的障碍:

使用的FreeRTOS版本是正点原子f103光盘里面的,9.0版本

poYBAGNE4CeAP0h8AACuUKuhF_E043.png

解压缩后,只需要复制FreeRTOS,而用不到*-Plus:

poYBAGNE4DiASJXtAACZaNJCxFU587.png

FreeRTOS中,也有很多用不到的文件,请参考正点原子开源的FreeRTOS移植教程

需要注意的地方是GD32的中断都放在了gd32f3x0_it.c中,需要屏蔽2个中断空函数,进而直接调用freeRTOS内的同名函数:

pYYBAGNE4E6ALv1VAAFpuxqrufQ590.png

并在systick_handler中加入调用FreeRTOS的时钟函数:

void SysTick_Handler(void)
{
    //led_spark();
    delay_decrement();
    #if (INCLUDE_xTaskGetSchedulerState == 1)
        if (xTaskgetSchedulerState() != taskSCHEDULER_NOT_STARTED)
        {
    #endif
            xPortSysTickHandler();
    #if (INCLUDE_xTaskGetSchedulerState == 1)    
        }
    #endif
}

主要FreeRTOS的栈设置要合理:

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

Program Size: Code=6068 RO-data=6448 RW-data=112 ZI-data=4296

这样片子的可玩性还是挺高的。

移植正点原子OLED代码:

这部分代码逻辑比较简单,看下正点原子的教程都可以很快搞定:

主要修改了正点原子通过位带操作控制引脚改为使用GD的库函数:

                                      
//---------------------------OLED端口定义--------------------------                         
#define OLED_CS(x)  gpio_bit_write(GPIOB,GPIO_PIN_0,(FlagStatus)(x));
#define OLED_RST(x) gpio_bit_write(GPIOA,GPIO_PIN_5,(FlagStatus)(x));
#define OLED_DC(x)  gpio_bit_write(GPIOB,GPIO_PIN_1,(FlagStatus)(x));
#define OLED_WR(x)  gpio_bit_write(GPIOB,GPIO_PIN_4,(FlagStatus)(x));
#define OLED_RD(x)  gpio_bit_write(GPIOB,GPIO_PIN_5,(FlagStatus)(x));

最终完成移植:

pYYBAGNE4GCAJRa-AAFR5IG3k2w845.png

总结

现在芯片都比较成熟,性能都过剩,这款芯片提供的资料也都够用,对于上手使用比较方便。后面自己做一些手表、物联网产品,可以玩一下。




审核编辑:刘清

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

    关注

    119

    文章

    6200

    浏览量

    224200
  • FreeRTOS
    +关注

    关注

    12

    文章

    484

    浏览量

    62175
  • 裸机
    +关注

    关注

    0

    文章

    39

    浏览量

    6375
  • 中断函数
    +关注

    关注

    0

    文章

    13

    浏览量

    5287
收藏 人收藏

    评论

    相关推荐

    FreeRTOS系统使用xTaskCreate产生的任务与osThreadDef 产生的线程有什么不同?

    请教下是要 FreeRTOS系统, 使用 xTaskCreate 产生的任务 与 osThreadDef产生的线程有什么不同?
    发表于 04-29 07:20

    移植FreeRTOS-CLI时,发现CLI任务移植无法被执行怎么回事

    移植FreeRTOS-CLI时,发现CLI任务移植无法被执行,麻烦各位指教!谢谢stm32f103rct_freertos_demo.zi
    发表于 07-21 08:04

    请问CubeMX如何配置FreeRTOS跑多线程任务

    请问CubeMX如何配置FreeRTOS跑多线程任务
    发表于 02-14 06:39

    FreeRTOS下对lwIP的移植程序

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

    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><b class='flag-5'>任务</b>调度原理

    FreeRTOS任务如何创建和删除?

    FreeRTOS移植到Cortex-M3硬件平台的文章中,我们已经见过任务创建API,但那篇文章的重点在于如何移植FreeRTOS,本文将
    的头像 发表于 03-11 18:08 2932次阅读

    转发:stm32 移植 freertos

    转发:stm32 移植 freertos
    发表于 11-20 12:36 14次下载
    转发: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移植—基于STM32

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

    【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

    源码3、FreeRTOS移植操作三、在STM32下完成一个基于FreeRTOS的多任务程序1、任务要求2、
    发表于 12-06 21:06 40次下载
    初入<b class='flag-5'>FreeRTOS</b>

    基于FreeRTOS的STM32多任务程序

    基于FreeRTOS的STM32多任务程序一、材料准备二、 FreeRTOS移植FreeRTOS是什么F
    发表于 12-27 18:38 28次下载
    基于<b class='flag-5'>FreeRTOS</b>的STM32多<b class='flag-5'>任务</b>程序

    FreeRTOS系列第10篇---FreeRTOS任务创建和删除

    FreeRTOS移植到Cortex-M3硬件平台的文章中,我们已经见过任务创建API,但那篇文章的重点在于如何移植FreeRTOS,本文将
    发表于 01-26 17:56 13次下载
    <b class='flag-5'>FreeRTOS</b>系列第10篇---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任务</b>创建和删除

    FreeRTOS任务创建与删除

    FreeRTOS 中,每个执行线程都被称为”任务”。在嵌入式社区中,对此并没有一个公允的术语,但我更喜欢用”任务”而不是”线程”,因为从
    的头像 发表于 02-10 14:43 1374次阅读

    RA FreeRTOS任务创建

    随着嵌入式应用程序变得越来越复杂,单片机裸机开发已经无法满足工程师对于复杂程序的需求。于是具有多任务调度和实时响应特性的RTOS便越来越受工程师们青睐。瑞萨RA系列MCU兼容FreeRTOS系统
    的头像 发表于 07-12 10:00 706次阅读
    RA <b class='flag-5'>FreeRTOS</b><b class='flag-5'>任务</b>创建