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

作者:李彬彬

时间: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相关推荐

  1. 基于GD32F103C8T6添加RT Thread nano设备框架并添加串口设备(以控制台console( uart0 )为例)

    最近没事琢磨了一下使用设备框架的问题.因为将串口注册到设备框架可以应用十分丰富的软件包. 于是就整理了一下手上的工程,重新将工程梳理了一遍. 像这样是十分清爽了,其中RTOS是操作系统源代码 并且学习 ...

  2. 控制IRQ和FIQ中断的编译器内部函数 - 基于Keil MDK

    置顶/星标公众号,不错过每一条消息 本文是一篇偏向底层的内容. 1.写在前面 编译器内部函数__disable_irq.__enable_irq.__disable_fiq和__enable_fiq用 ...

  3. RT Thread根据开发板制作BSP方法

    之前一直不懂怎么使用RT Thread的软件包,感谢网上的大神,看了你们的博客后大概了解一些,在此做下记录.用RT Thread软件包需要RT Thread的系统,但是RT Thread和RT Thr ...

  4. Keil MDK 将升级为 Keil Studio,你想要的黑色主题来了,附手把手使用教程

    关注+星标公众号,不错过精彩内容 编排 | strongerHuang 微信公众号 | 嵌入式专栏 看到标题,你是不是很吃惊? 是的,你没看错,Keil或将迎来一次全新的升级. 本文带你认识Keil ...

  5. 基于keil环境下mm32f327单片机rtthread的移植

    基于keil环境下mm32f327单片机rtthread的移植 文章目录 基于keil环境下mm32f327单片机rtthread的移植 前言 一.所需资源 二.创建工程目录 三.复制所需文件到相应文 ...

  6. 基于rt thread smart构建EtherCAT主站

    我把源码开源到到了gitee,https://gitee.com/rathon/rt-thread-smart-soem 有兴趣的去可以下载下来跑一下 软件工程推荐用vscode 打开.rt thre ...

  7. RT Thread Free Modbus移植问题整理

    RT Thread Free Modbus移植问题整理 问题描述: 在读写寄存器中,写数据正常,只能读1个寄存器的值,多个值会异常. 在移植过程中发现串口(或RS485)数据接收长度异常. 一.环境描 ...

  8. Keil MDK基于标准外设库创建工程和目录图文教程

    欢迎大家浏览更多高清视频演示 STM32的开发不像FPGA的开发那样,一切都几乎要从零开始做.STM32的厂商基于ARM创建了非常完善的标准外设库的库函数,开发者只需要调用这些库函数即可完成自己需要的 ...

  9. 基于IAP和Keil MDK的远程升级设计

    写在前面:三周之前,我突然想写一个远程升级的程序.那个时候我只是大概知道IAP的意思是在应用编程,但怎么编,我还一无所知.我给自己定下一个个阶段目标,从最基础的代码一点点写起,解决一个又一个的问题.三 ...

最新文章

  1. python中json的使用
  2. 计算机实现减法学习心得
  3. 汇编语言 在存储单元中显示字符串
  4. 分布式事务框架 seata-golang 通信模型详解
  5. Spring Cloud Gateway介绍(一)
  6. 在阿里淘系6个月能有哪些收获成长?
  7. 当飞猪遇上 Serverless | 云原生 Talk
  8. C#LeetCode刷题之#26-删除排序数组中的重复项(Remove Duplicates from Sorted Array)
  9. 【Java】环境变量配置
  10. php 的sentmail支持ssl吗_php 的swoole 和websocket 连接wss
  11. 【ENVI遥感影像分类】 监督、非监督分类
  12. 安卓系统 国内谷歌服务器,在国内使用搭载安卓原生态系统谷歌手机,会是一种什么体验?...
  13. 2021-4-22-Python自动化31期-day01作业答案
  14. 系统自带的微软拼音输入法,在输入字母和数字的时候,间隔变大,输入中文没事的 问题。
  15. 如何在简中版 MathType 安装过程中,就能输入产品密匙?
  16. 物理机下安装 VMware ESXi 6.7
  17. 蓝牙耳机哪种通话效果最好?通话质量最好的蓝牙耳机盘点
  18. 使用 腾讯云搭建一个个人博客
  19. CentOS7安装apache2并启动
  20. cubemax设置中断优先级

热门文章

  1. 西软前台系统使用中常见问题与基本概念
  2. C4D R22插件SolidAngle Cinema 4D To Arnold for mac(C4DtoA阿诺德渲染工具)
  3. 解决windows应用商店Microsoft Store无法联网问题 错误代码0x80072F7D
  4. Android位置模拟并实现 —— 逆向钉钉打卡Xposed Plugin
  5. 软件系统维护是一项不吸引人的工作_“京极接口大师——链接一切软件系统和设备【智能制造吧】...
  6. CentOS安装BBR加速
  7. 一道不一样的前端架构师最终面试题
  8. epf配色方案如何导入到Eclipse
  9. jqweui.com
  10. 1、学ARM前必读文章