[方案相关] 华大HC32F460系列搭建FreeRTOS记录

[复制链接]
 楼主| 雨果喝水 发表于 2021-11-29 15:54 | 显示全部楼层 |阅读模式
前言
最近的芯片荒让人十分难受,不少人都开始查看中国国产的芯片,其中MCU比较大的就是华大与兆易、雅特力等厂商,他们各有优劣,因为笔者最近看重了华大的AOS系统,暂时还没有来得及使用,但是还是将最小系统搭建起来了。这里记录一下软件方面的实现。

前情提要:

本文写下时间线中的各个版本号:

ddl:1.3.1

FreeRTOS:10.4.3

User Manual:1.21

技能        熟练度
数据结构        了解
0x10 准备工作
下列的清单中描述了笔者发现了的需要使用的库与相关的资料

华大的最新ddl库
FreeRTOS最新库文件
华大最新的IDE支持包(如果需要IDE)
用户手册

 楼主| 雨果喝水 发表于 2021-11-29 15:55 | 显示全部楼层
0x11 华大的ddl库
华大的ddl库直接可以在官网1上面找到,截止当前完成的时间,ddl最新版本号为1.3.1。

而IDE支持包和用户手册都可以在下载界面下找到。

ddl库内在当前版本下有一个小BUG,可以直接修改,这个bug将在下文中提到。
 楼主| 雨果喝水 发表于 2021-11-29 15:55 | 显示全部楼层
0x21 FreeRTOS最新的文件
官网2上的最新库使用即可,但是需要注意的是,当前的FreeRTOS并没有使用到华大相关MCU的example,所以我们需要自己实现一个example。
 楼主| 雨果喝水 发表于 2021-11-29 15:56 | 显示全部楼层
0x20 环境配置
笔者使用了keil进行配置。在IAR下的配置也是大同小异。可以参考实现。

keil内集成了HC相关的部分调试相关的配置。

IAR则需要在9+的版本下才会有很多的HC相关支持。
 楼主| 雨果喝水 发表于 2021-11-29 15:57 | 显示全部楼层
 楼主| 雨果喝水 发表于 2021-11-29 15:58 | 显示全部楼层
随后的实现仅需要选中CMSIS即可。这里可以选择只用lib而不用src,因为关于FPU的部分开关需要依赖的部分文件这里可能没有。
 楼主| 雨果喝水 发表于 2021-11-29 16:00 | 显示全部楼层
 楼主| 雨果喝水 发表于 2021-11-29 16:03 | 显示全部楼层
随后在内部的编译器设置下选择相关的头文件环境。
4683861a488ae7a51f.png
 楼主| 雨果喝水 发表于 2021-11-29 16:03 | 显示全部楼层
这里的参数可能根据各种情况下的实际配置改变,还是需要因地制宜的添加或者是删除。

随后需要增加相关的标签
 楼主| 雨果喝水 发表于 2021-11-29 16:04 | 显示全部楼层
 楼主| 雨果喝水 发表于 2021-11-29 16:05 | 显示全部楼层
  1. HC32F46x,USE_DEVICE_DRIVER_LIB,ARM_MATH_CM4


这里就是HC32F460相关的参数。其中ARM_MATH_CM4是正常情况下不需要使用的,但是如果使用了DSP相关的库源码,则需要使用这个宏标签。

到这里,基本上就可以完成当前的编译。
 楼主| 雨果喝水 发表于 2021-11-29 16:06 | 显示全部楼层
0x30 FreeRTOS加入
首先将其解压并放置在规定的位置。

这里需要注意的是,必须要将portable下的文件按照当前需要的型号与核心进行修改,笔者这里留下了M4相关的参数。
 楼主| 雨果喝水 发表于 2021-11-29 16:07 | 显示全部楼层
  1. #define configUSE_PREEMPTION                        1
  2. #define configUSE_IDLE_HOOK                                0
  3. #define configUSE_TICK_HOOK                                0
  4. #define configCPU_CLOCK_HZ                                ( SystemCoreClock )
  5. #define configTICK_RATE_HZ                                ( ( TickType_t ) 10*1000 )   //200,000k/10k = 20,000k
  6. #define configMAX_PRIORITIES                        ( 5 )
  7. #define configMINIMAL_STACK_SIZE                ( ( unsigned short ) 130 )
  8. #define configTOTAL_HEAP_SIZE                        ( ( size_t ) ( 75 * 1024 ) )
  9. #define configMAX_TASK_NAME_LEN                        ( 10 )
  10. #define configUSE_TRACE_FACILITY                1
  11. #define configUSE_16_BIT_TICKS                        0
  12. #define configIDLE_SHOULD_YIELD                        1
  13. #define configUSE_MUTEXES                                1
  14. #define configQUEUE_REGISTRY_SIZE                8
  15. #define configCHECK_FOR_STACK_OVERFLOW  0
  16. #define configUSE_RECURSIVE_MUTEXES                1
  17. #define configUSE_MALLOC_FAILED_HOOK        0
  18. #define configUSE_APPLICATION_TASK_TAG        1
  19. #define configUSE_COUNTING_SEMAPHORES        1
  20. #define configGENERATE_RUN_TIME_STATS        0
 楼主| 雨果喝水 发表于 2021-11-29 16:08 | 显示全部楼层
随后在最后的几行宏定义修改完成:
 楼主| 雨果喝水 发表于 2021-11-29 16:08 | 显示全部楼层
  1. /* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
  2. standard names. */
  3. #define vPortSVCHandler SVC_Handler//SVC_IrqHandler
  4. #define xPortPendSVHandler PendSV_Handler//PendSV_IrqHandler
  5. #define xPortSysTickHandler SysTick_Handler//SysTick_IrqHandler

 楼主| 雨果喝水 发表于 2021-11-29 16:09 | 显示全部楼层
这里还需要将hc32f46x_interrupts.c内部的相关接口去除。否则直接使用SVC_IrqHandler接口替换掉vPortSVCHandler也可以。
 楼主| 雨果喝水 发表于 2021-11-29 16:11 | 显示全部楼层
0x40 一个小问题
在合并两者的时候,笔者发现了一个小问题。修改完成后在这里稍稍记录一下:

在hc32f46x_clk.h中
 楼主| 雨果喝水 发表于 2021-11-29 16:12 | 显示全部楼层
  1. /**
  2. *******************************************************************************
  3. ** \brief  The system clock source.
  4. **
  5. ******************************************************************************/
  6. typedef enum en_clk_sys_source
  7. {
  8.      ClkSysSrcHRC                   = 0u,   ///< The system clock source is HRC.
  9.      ClkSysSrcMRC                   = 1u,   ///< The system clock source is MRC.
  10.      ClkSysSrcLRC                   = 2u,   ///< The system clock source is LRC.
  11.      ClkSysSrcXTAL                  = 3u,   ///< The system clock source is XTAL.
  12.      ClkSysSrcXTAL32                = 4u,   ///< The system clock source is XTAL32.
  13.      CLKSysSrcMPLL                  = 5u,   ///< The system clock source is MPLL.
  14. }en_clk_sys_source_t;

 楼主| 雨果喝水 发表于 2021-11-29 16:12 | 显示全部楼层
CLKSysSrcMPLL修改和上述的风格并未一致,可以选择修改成ClkSysSrcMPLL即可。
请叫我污春 发表于 2022-5-13 11:09 | 显示全部楼层
雨果喝水 发表于 2021-11-29 16:12
CLKSysSrcMPLL修改和上述的风格并未一致,可以选择修改成ClkSysSrcMPLL即可。

楼主这样移植能顺利跑起来不
您需要登录后才可以回帖 登录 | 注册

本版积分规则

89

主题

1212

帖子

0

粉丝
快速回复 返回顶部 返回列表