《《《《《正文》》》》》
作者:李彬彬
时间: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》》》》》