基于 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》》》》》
基于 Keil MDK 移植 RT-Thread Nano RTOS到华大半导体HC32F030J8TA相关推荐
- 基于GD32F103C8T6添加RT Thread nano设备框架并添加串口设备(以控制台console( uart0 )为例)
最近没事琢磨了一下使用设备框架的问题.因为将串口注册到设备框架可以应用十分丰富的软件包. 于是就整理了一下手上的工程,重新将工程梳理了一遍. 像这样是十分清爽了,其中RTOS是操作系统源代码 并且学习 ...
- 控制IRQ和FIQ中断的编译器内部函数 - 基于Keil MDK
置顶/星标公众号,不错过每一条消息 本文是一篇偏向底层的内容. 1.写在前面 编译器内部函数__disable_irq.__enable_irq.__disable_fiq和__enable_fiq用 ...
- RT Thread根据开发板制作BSP方法
之前一直不懂怎么使用RT Thread的软件包,感谢网上的大神,看了你们的博客后大概了解一些,在此做下记录.用RT Thread软件包需要RT Thread的系统,但是RT Thread和RT Thr ...
- Keil MDK 将升级为 Keil Studio,你想要的黑色主题来了,附手把手使用教程
关注+星标公众号,不错过精彩内容 编排 | strongerHuang 微信公众号 | 嵌入式专栏 看到标题,你是不是很吃惊? 是的,你没看错,Keil或将迎来一次全新的升级. 本文带你认识Keil ...
- 基于keil环境下mm32f327单片机rtthread的移植
基于keil环境下mm32f327单片机rtthread的移植 文章目录 基于keil环境下mm32f327单片机rtthread的移植 前言 一.所需资源 二.创建工程目录 三.复制所需文件到相应文 ...
- 基于rt thread smart构建EtherCAT主站
我把源码开源到到了gitee,https://gitee.com/rathon/rt-thread-smart-soem 有兴趣的去可以下载下来跑一下 软件工程推荐用vscode 打开.rt thre ...
- RT Thread Free Modbus移植问题整理
RT Thread Free Modbus移植问题整理 问题描述: 在读写寄存器中,写数据正常,只能读1个寄存器的值,多个值会异常. 在移植过程中发现串口(或RS485)数据接收长度异常. 一.环境描 ...
- Keil MDK基于标准外设库创建工程和目录图文教程
欢迎大家浏览更多高清视频演示 STM32的开发不像FPGA的开发那样,一切都几乎要从零开始做.STM32的厂商基于ARM创建了非常完善的标准外设库的库函数,开发者只需要调用这些库函数即可完成自己需要的 ...
- 基于IAP和Keil MDK的远程升级设计
写在前面:三周之前,我突然想写一个远程升级的程序.那个时候我只是大概知道IAP的意思是在应用编程,但怎么编,我还一无所知.我给自己定下一个个阶段目标,从最基础的代码一点点写起,解决一个又一个的问题.三 ...
最新文章
- python中json的使用
- 计算机实现减法学习心得
- 汇编语言 在存储单元中显示字符串
- 分布式事务框架 seata-golang 通信模型详解
- Spring Cloud Gateway介绍(一)
- 在阿里淘系6个月能有哪些收获成长?
- 当飞猪遇上 Serverless | 云原生 Talk
- C#LeetCode刷题之#26-删除排序数组中的重复项(Remove Duplicates from Sorted Array)
- 【Java】环境变量配置
- php 的sentmail支持ssl吗_php 的swoole 和websocket 连接wss
- 【ENVI遥感影像分类】 监督、非监督分类
- 安卓系统 国内谷歌服务器,在国内使用搭载安卓原生态系统谷歌手机,会是一种什么体验?...
- 2021-4-22-Python自动化31期-day01作业答案
- 系统自带的微软拼音输入法,在输入字母和数字的时候,间隔变大,输入中文没事的 问题。
- 如何在简中版 MathType 安装过程中,就能输入产品密匙?
- 物理机下安装 VMware ESXi 6.7
- 蓝牙耳机哪种通话效果最好?通话质量最好的蓝牙耳机盘点
- 使用 腾讯云搭建一个个人博客
- CentOS7安装apache2并启动
- cubemax设置中断优先级
热门文章
- 西软前台系统使用中常见问题与基本概念
- C4D R22插件SolidAngle Cinema 4D To Arnold for mac(C4DtoA阿诺德渲染工具)
- 解决windows应用商店Microsoft Store无法联网问题 错误代码0x80072F7D
- Android位置模拟并实现 —— 逆向钉钉打卡Xposed Plugin
- 软件系统维护是一项不吸引人的工作_“京极接口大师——链接一切软件系统和设备【智能制造吧】...
- CentOS安装BBR加速
- 一道不一样的前端架构师最终面试题
- epf配色方案如何导入到Eclipse
- jqweui.com
- 1、学ARM前必读文章