基于 Keil MDK 移植 RT-Thread Nano RTOS到华大半导体HC32F030J8TA

图片


《《《《《正文》》》》》

作者:李彬彬

时间:2021/12/20

微信公众号:airX嵌入式

公司项目合作联系方式:公众号留言/微信15988346472


图片

前言

本文介绍如何基于 Keil MDK 开发环境移植 RT-Thread Nano RTOS实时系统到华大半导体hc32f030j8ta,并以一个基于HC32F030J8TA芯片的LED基础工程作为示例进行讲解。(源码文档及相关资料可通过文章最后地址获取,含高清pdf版)

1、准备工作

· 准备一份基础的HC32F030J8TA裸机源码,如一份HC32F030J8TA的 LED 指示灯闪烁示例代码。

· 在 KEIL 上安装 RT-Thread Nano Pack。

1-1基础工程准备:

在移植 之前,我们需要准备一个能正常运行的裸机工程。作为示例,本文使用的是基于HC32F030J8TA的一个GPIO输出实例。程序如下:

图片

 

例子获取地址,看最后的共享百度云盘!!!

1-2 Nano Pack安装

方法一:在 IDE 内安装

打开 MDK 软件,点击工具栏的 Pack Installer 图标:

如下图,在pack里找到Packs,找到RT-Thread,点击Install,等待安装完成!

图片

图片

方法二:手动安装

从官网上下载安装包,然后解压安装,如下图:

图片

2、添加RT-Thread Nano到工程

将上面通过编译的裸机工程打开,在Manage Run-Time Environment里,按下图步骤操作;

图片

在 Manage Rum-Time Environment 里 "Software Component" 栏找到 RTOS,Variant 栏选择 RT-Thread,然后勾选 kernel,点击 "OK" 就添加 RT-Thread 内核到工程了。(若没有RTOS 重启mdk就会有)

图片

现在可以在 Project 看到 RT-Thread RTOS 已经添加进来了,展开 RTOS,可以看到添加到工程的文件:

图片

3、移植RT-Thread Nano

3-1中断与异常处理

编译添加rtos的系统的工程,会显示几个重复定义函数的错误提示,一个是$Sub$$mani(void)函数,一个是HardFault_Handler() ,我们把原工程的这2个函数注释掉,如下图;如果此时对工程进行编译,没有出现函数重复定义的错误,则不用做修改。总之有重定义的,就删除原工程的,保留rt-thread的函数定义;

图片

图片

3-2系统时钟配置

需要在 board.c 中实现 系统时钟配置(为 MCU、外设提供工作时钟)与 os tick  的配置 (为操作系统提供心跳 / 节拍)。

由于 SysTick_Handler() 中断服务例程由用户在 board.c 中重新实现,做了系统 OS Tick,所以还需要删除工程里中原本已经实现的 SysTick_Handler() ,避免在编译时产生重复定义。如果此时对工程进行编译,没有出现函数重复定义的错误,则不用做修改。

图片

3-3内存堆初始化

系统内存堆的初始化在 board.c 中的 rt_hw_board_init() 函数中完成,内存堆功能是否使用取决于宏 RT_USING_HEAP 是否开启,RT-Thread Nano 默认不开启内存堆功能,这样可以保持一个较小的体积,不用为内存堆开辟空间。

图片

4、编写LED闪烁应用

下面写一个2个LED输出周期翻转的测试代码!!!

1. 头文件载入 <rtthread.h> 。

2. 在 main() 中先初始化硬件底层GPIO,然后启动线程。

3. 将延时函数替换为 RT-Thread 提供的延时函数 rt_thread_mdelay()。该函数会引起系统调度,切换到其他线程运行,体现了线程实时性的特点。

图片

4-1硬件初始化函数

初始化GPIO输出控制Led1,led2;

图片

4-2创建2个线程

图片

4-3定义线程函数

图片

4-4注册线程及启动线程

图片

4-5结果显示

可以看到是LED1、LED2几乎是同时进行电平切换的!

图片

4-6 Note

rt_thread_mdelay()函数是让出CPU控制权的延时,因此会实现2个LED输出是同时进行翻转的样子,就好像是同时进行的2个线程!!!

与裸机 LED 闪烁应用代码的不同

裸机LED延时时,CPU是一直在等待,而RTOS的延时是交出CPU控制权,这样在一个线程延时的时候,就会去执行另一个优先级的线程,这样就好像同时在运行线程!!!

5、配置RT-Thread Nano

用户可以根据自己的需要通过修改 rtconfig.h 文件里面的宏定义配置相应功能。

RT-Thread Nano 默认未开启宏 RT_USING_HEAP,故只支持静态方式创建任务、信号量等对象。若要通过动态方式创建对象则需要在 rtconfig.h 文件里开启 RT_USING_HEAP 宏定义。

MDK 的配置向导 configuration Wizard 可以很方便的对工程进行配置,Value 一栏可以选中对应功能及修改相关值,等同于直接修改配置文件 rtconfig.h。

图片

6、百度云资料地址

链接:https://pan.baidu.com/s/1v1uRfv0IjklcemPyzgJedg 

提取码关注公众号,发送1234获取提取码!!


《《《《《END》》》》》

图片

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值