电子发烧友 电子发烧友
  • 首页
  • 技术
    可编程逻辑
    MEMS/传感技术
    嵌入式技术
    模拟技术
    控制/MCU
    处理器/DSP
    存储技术
    EMC/EMI设计
    电源/新能源
    测量仪表
    制造/封装
    RF/无线
    接口/总线/驱动
    EDA/IC设计
    光电显示
    连接器
    PCB设计
    LEDs
    汽车电子
    医疗电子
    人工智能
    可穿戴设备
    军用/航空电子
    工业控制
    触控感测
    智能电网
    音视频及家电
    通信网络
    机器人
    vr|ar|虚拟现实
    安全设备/系统
    移动通信
    便携设备
    物联网
    区块链
    HarmonyOS
    RISC-V MCU
    光伏
    ChatGPT
    IGBT
    充电桩
    氮化镓
    BLDC
    逆变器
    5G
    电机控制
  • 资源
    技术文库
    新品速递
    电路图
    元器件知识
    电子百科
    最新技术文章
  • 下载
    在线工具
    常用软件
    电子书
    datasheet
  • 专栏
    电子说
    专栏
  • 社区
    论坛
    问答
    小组
    技术专栏
    社区之星
    试用中心
    HarmonyOS技术社区
    2023电子工程师大会
  • 研究院
  • 活动
    设计大赛
    硬创大赛
    社区活动
    线下会议
    在线研讨会
    小测验
  • 学院
    直播
    课程
  • 视频
  • 企业号
  • 华秋智造
  • 工具
    PCB在线检查
    datasheet查询
    选型替代查询
    免费样品申请
    免费评测试用
    工程师专区
    技术子站
0
  • 聊天消息
  • 系统消息
  • 评论与回复
查看更多
查看更多
查看更多
  • 0

    关注
  • 0

    粉丝
  • 0

    动态
VIP于 到期 续费
  • 个人中心
  • 内容管理
  • 积分兑换
    当前积分:
  • 修改资料
  • 退出登录
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心
发布
  • 发文章

  • 发资料

  • 发帖

  • 提问

  • 发视频

创作活动
下载中心
  • 推荐
  • 分类
  • 资料
  • 软件
  • 工具
  • 排行榜
  • DataSheet

完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>

3天内不再提示

从安装到使用,RT-Thread Nano最全教程看完不信你还不会使用

RTThread物联网操作系统 来源:未知 作者:佚名 2017-09-26 06:39 次阅读
小编 说RT-Thread Nano发布以来,小编收到不少 开发者询问RT-Thread Nano的配套 教程实例,官方发布过一篇: 从裸机开始,创建一个RT-Thread Nano系统工程,但对广大开发者来说还是远远不够,幸得RT-Thread开发者燕十三大作一篇讲解实战 RT-Thread Nano ,算是手把手教学了。嗯,连我这个不懂技术的小白看了也会了。欢迎给RT-Thread投稿,获赠RT-Thread T恤一件。

征稿 | 你写不写,福利就在这里~~

何为RT-Thread Nano?大家知道, Keil5以后采用pack形式管理 芯片及各种相关组件的。RT-Thread Nano就是通过Keil pack方式发布,在保持原有RT-Thread基本功能的情况下,实现了极小的Flash和 Ram占用。默认配置下,Flash可小至2.5K, Ram可以小至1K。

目前pack包含有kernel、shell(msh)、device drivers三部分功能,这3个功能可按实际使用情况按需加载。本次使用的主芯片为 GD32F150C8T6,资源为Flash:64K,RAM:8K。

一、RT-Thread Nano Pack 下载安装

1.在Keil5主界面上点击“Pack Install”按钮,即可进入Pack Install界面

图1:Keil5主界面

2.在Pack Install界面下,RT-Thread Pack在右边栏中。如未下载,可点击“Install”下载;如已安装,版本有更新,将提示“Update”可更新。

图2:RT-ThreadPack下载

3.如在图2界面“Packs”栏中未发现“RT-Thread”,可先在菜单“Packs”下点击“Check f or Updates”。Update完成后,将可看到RT-Thread Pack。

图3:Pack Update

4.Pack下载完成后,Keil将自动弹出Pack安装界面,按步骤依次完成安装。

二、裸机最小系统工程建立

1.本次工程使用的是芯片是GD32F150C8T6,64KFlash、8KRam。Keil5下开发须先在官网下载Keil Pack (Gig aDevice.GD32F1x0_DFP.pack),并正确安装。

2.先按照裸机Keil工程流程搭建工程,为测试Flash及Ram大小,最小工程只包含必须的Libraries文件,main函数也未作任何多余处理。

图4:GD32F150C8T6最小工程

3.编译完成后,默认配置Flash:1112字节、Ram:2144字节

4.修改默认启动文件startup_gd32f1x0.s定义堆和栈大小:默认堆为0x400,栈为0x400。后续我们将采用RT-Thread管理内存堆,所有堆设置为0;栈可按照main函数应用需求调整为0x100或以上。

图5:启动文件栈和堆修改

启动文件修改后,Ram大小为352字节

图6:修改堆和栈后Flash和栈占用大小

三、kernel加载与应用

1.加载RT-Thread Kernel:在主界面点击“ManageRun- Time Environment”按钮即可进入加载页。

图7:ManageRun-Time Environment

在“ RTOS”一栏中选中“RT-Thread”,并在列表中选中“kernel”,当前版本为2.1.2。

图8:RT-Thread kernel选择

2.确定后,keil界面上会加载RT-Thread的kernel文件,更根据当前选择芯片类型加入已移植完成的M3芯片内核代码、配置文件等。

图9:RT-Thread kernel文件

其中:

Kernel文件包括:

  • clock.c

  • components.c

  • device.c

  • idle.c

  • ipc.c

  • irq.c

  • kserv ice.c

  • mem.c

  • object.c

  • scheduler.c

  • thread.c

  • timer.c

Cortex-m3芯片内核移植代码:

  • cpuport.c

  • con text_rvds.s

应用代码及配置文件:

  • board.c

  • rtconfig.h

3.此时再次编译工程,编译器会提示有函数被重复定义了。需按照如下方式做一些修改:

a) 修改gd32f10x_it.c文件,删除如下函数:

  • void HardFault_Handler(void)

  • void PendSV_Handler(void)

  • void SysTick_Handler(void)

b) 按照board.c上的说明,依次完成如下操作:

图10:board.c修改流程说明

  • 修改24行:#include “gd32f1x0.h”

  • 修改48行:在rt_hw_board_init()函数内开启SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);

  • 修改66行:voidSysTick_Handler(void)

4.修改main.c:

  • 加入#include

  • 在while循环中加入rt_thread_dealy(100);

5.再次编译顺利通过,下载至芯片运行可看到main函数中每1s可中断一次。RT-Thread任务调度器已经正常运行。

图11:RT-Thread正常运行

通过查看.map文件可获取当前各文件资源占用情况。在未开启任何优化的情况下,可以看到RT-Thread内核各文件资源占用情况。

图12:资源占用表

6.可在main函数内添加RT-Thread支持的任务、 定时器信号量等功能。Nano默认rtconfig.h配置只支持静态任务、信号量创建。在静态模式下,不能使用rt_thread_create/rt_thread_delete/rt_sem_create/rt_sem_delete/rt_malloc/rt_free与动态创建、删除有关的 接口。如需动态创建,需开启RT_USING_HEAP项,详见本篇第五部分:《RT-Thread配置》

四、RT-Thrad启动流程分析

这次创建的keil工程虽然应用了RT-Thread 嵌入式 操作系统,但开发流程无不带os开发几乎没有差别。都是将main作为入口,完成 硬件初始化、应用代码添加,而且可以直接应用RT-Thread的各种功能完成 产品开发。但是我们没有添加RT-Thread相关初始化、启动等代码到我们的工程里面,但实际情况是调度器已经正常运行了,这是怎么实现的呢?

01

RT-Thread入口

我们可以在components.c文件的140行看到#ifdef RT_USING_USER_MAIN宏定义判断,这个宏是定义在rtconfig.h文件内的,而且处于开启状态。同时我们可以在146行看到#if defined (__CC_ ARM)的宏定义判断,__CC_ARM就是指keil的交叉编译器名称。

我们可以在这里看到定义了2个函数:$$ Sub$$main()和$$Super$$main()函数;这里通过$$Sub$$main()函数在程序就如主程序之前插入一个例程,实现在不改变源代码的情况下扩展函数功能。链接器通过调用$$Sub$$Main()函数取代main(),然后通过$$Super$$main再次回到main()

#if defined (__CC_ARM)

extern int $Super$$main(void);

/* re-define main function */

int $Sub$$main(void)

{

rt_hw_interrupt_disable();

rtthread_startup();

return 0;

}

在$$Sub$$main函数内调用了rt_hw_interrutp_disable()和rtthread_startup()两个函数。熟悉RT-Thread开发流程的,一看就知道这是标准的RT-Thread的启动入口。

其中:

  • rt_hw_interrupt_disable():关中断操作,

  • rtthread_startup():完成systick配置、timer初始化/启动、idle任务创建、应用线程初始化、调度器启动等工作。

int rtthread_startup(void)

{

rt_hw_interrupt_disable();

/* board level initalization

* NOTE: please initialize heap insideboard initialization.

*/

rt_hw_board_init();

/* show RT-Thread version */

rt_show_version();

/* timer system initialization */

rt_system_timer_init();

/* scheduler system initialization */

rt_system_scheduler_init();

/* create init_thread */

rt_application_init();

/* timer thread initialization */

rt_system_timer_thread_init();

/* idle thread initialization */

rt_thread_idle_init();

/* start scheduler */

rt_system_scheduler_start();

/* never re ach here */

return 0;

}

  • rt_hw_board_init():该函数定义在board.c文件内,需要修改systick配置

  • rt_system_timer_init()/rt_system_timer_thread_init():timer初始化/启动

  • rt_thread_idle_init():idle任务创建

  • rt_application_init():应用线程初始化

  • rt_system_scheduler_start():调度器启动

02

应用线程入口

rt_application_init()

void rt_application_init(void)

{

rt_thread_t tid;

#ifdef RT_USING_HEAP

tid = rt_thread_create("main",main_thread_entry, RT_NULL,

RT_MAIN_THREAD_STACK_SIZE,RT_THREAD_PRIORITY_MAX / 3, 20);

RT_ASSERT(tid != RT_NULL);

#else

rt_err_t result;

tid = &main_thread;

result = rt_thread_init(tid,"main", main_thread_entry, RT_NULL,main_stack, sizeof(main_stack),RT_THREAD_PRIORITY_MAX / 3, 20);

RT_ASSERT(result == RT_EOK);

#endif

rt_thread_startup(tid);

}

在这里,我们可以看到应用线程创建了一个名为main_thread_entry的任务,并且已经启动了该任务。我们再次来看一下man_thread_entry任务。

/* the system main thread */

void main_thread_entry(void*parameter)

{

extern int main(void);

extern int $Super$$main(void);

/* RT-Thread components initialization */

rt_components_init();

/* invoke system main function */

#if defined (__CC_ARM)

$Super$$main(); /* for ARMCC. */

#elif defined(__ICCARM__) ||defined(__GNUC__)

main();

#endif

}

man_thread_entry任务完成了2个工作:调用rt_components_init()、进入应用代码真正的main函数。

在这里我们看到了$$Super$$main()的调用,在前面我们讲了调用该函数可用来回到main()的。

图13:RT-Thread初始化及启动流程

从以上分析可以,正是由于在rtconfig.h内开启了RT_USING_USER_MAIN选项,编译器在main之前插入了$$Sub$$main(),完成了RT-Thread初始化及调度器启动工作。并且通过创建main_thread_entry任务,并通过$$Super$$main()回到main()函数。这样看来main()函数其实只是RT-Thread的一个任务,该任务的优先级为 RT_THREAD_PRIORITY_MAX / 3,任务栈为RT_MAIN_THREAD_STACK_SIZE。

图14:RT_USING_USER_MAIN选项

五、RT-Thread配置(rtconfig.h)

RT-Thread是一个高度可配置的嵌入式实时操作系统,配置通过rtconfig.h文件实现。Nano就是在rtconfig.h配置下实现了2.5KFlash,1KRam的内核应用,但是由于Nano未开启RT_USING_HEAP选项,故只支持静态方式创建任务及信号量。下面分步开启rtconfig.h配置常用选项。

01

RT_USING_HEAP:开启heap

根据芯片型号在board.c第37行,修改SARM_SIZE大小,默认为8,GD32F150C8T6正好也为8K。

图15:SRAM_SIZE配置

开启RT_USING_HEAP选项后,在board.c的rt_hw_board_init()内将调用rt_system_heap_init()

#if defined(RT_USING_USER_MAIN)&& defined(RT_USING_HEAP)

rt_system_heap_init((void*)HEAP_BEGIN,(void*)SRAM_END);

#endif

其中:

SRAM_END:根据宏定义为0x20000000 +SRAM_SIZE * 1024

HEAP_BEGIN:

图16:HEAP_BEGIN定义

其中Image$$RW_IRAM1$$ZI$$Limit是链接器导出符号,表示ZI段的结束地址。

配置完成后,就可通过动态创建任务、信号量等方式开发软件了。

02

RT_USING_TIMER_SOFT:开启软件定时器

Nano默认配置未开启软件定时器功能。开启软件定时器功能后,可创建多个软件定时器,定时器精度为Systick触发精度。

图17:软件定时器开启

- End -


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • rt_thread
    rt_thread
    +关注

    关注

    2

    文章

    13

    浏览量

    14636

原文标题:手把手教你实战RT-Thread Nano,不信都这样了你还不会

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    RT-Thread最新推出Nano极简版

    RT-Thread适时推出第一个RT-Thread Nano极简版,适用于家电、消费电子、医疗设备、工控等领域大量使用的32位ARM入门级MCU的场合,支持多任务处理、信号量和邮箱等相对完整的实时操作系统特性。
    发表于 07-31 11:35 5318次阅读

    移植RT-Thread nano到CW32L083

    移植RT-Thread Nano到CW32L083开发板上,并成功运行。
    的头像 发表于 07-03 09:04 2.2w次阅读
    移植<b class='flag-5'>RT-Thread</b> <b class='flag-5'>nano</b>到CW32L083

    i.MX RT1170:VGLite移植RT-Thread Nano过程讲解(下)

    上篇介绍了如何移植 RT-Thread Nano 内核与 Finsh 控制台到 RT1170。本篇继续介绍如何将 NXP 官方的 VGLite API 移植到 RT-Thread
    的头像 发表于 11-09 11:22 820次阅读

    手把手教你实战RT-Thread Nano不信都这样了还不会

    手把手教你实战RT-Thread Nano不信都这样了还不会
    发表于 11-23 10:30

    基于 Keil MDK 移植 RT-Thread Nano

    Pack 了。另外,如果需要安装其他版本,则需要展开 RealThread::RT-Thread,进行选择。 方法二:手动安装 我们也可以官网下载
    发表于 03-29 06:58

    RT-Thread Nano 简介

    RT-Thread Nano 是一个极简版的硬实时内核,它是由 C 语言开发,采用面向对象的编程思维,具有良好的代码风格,是一款可裁剪的、抢占式实时多任务的 RTOS。其内存资源占用极小,功能包括
    发表于 05-14 10:22

    基于 Keil MDK 移植 RT-Thread Nano

    ,进行选择。方法二:手动安装我们也可以官网下载安装文件,RT-Thread Nano 离线安装
    发表于 05-14 10:32

    基于 CubeMX 移植 RT-Thread Nano

    RT-Thread Nano pack 安装包进行安装。在基础工程中添加 RT-Thread Nano
    发表于 05-14 16:09

    RT-Thread Studio 上使用 RT-Thread Nano

    本文介绍了如何在 RT-Thread Studio 上使用 RT-Thread Nano,并以创建 stm32f103RB 的 Nano 工程为例。准备工作
    发表于 05-18 15:59

    基于 Keil MDK 移植 RT-Thread Nano

    ,进行选择。方法二:手动安装我们也可以官网下载安装文件,RT-Thread Nano 离线安装
    发表于 05-19 18:15

    pack的安装rt-thread的使用

    的F407探索者,软件是Keil 5.26, RT-Threadnano 3.1.3,参考的是《正点原子RT-Thread环境快速搭建入门教程》。nano pack有两种
    发表于 08-24 06:50

    【国产MCU系列】在 HK32F030 上移植 RT-Thread Nano

    如需下载相关开源资料请点击阅读原文这是一个航顺 HK32F030 的 RT-Thread Nano 移植示例,记录了在 Keil 裸机工程的基础上进行 RT-Thread Nano
    发表于 11-21 18:51 42次下载
    【国产MCU系列】在 HK32F030 上移植 <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>

    RT-Thread Nano入门学习笔记

    RT-Thread Nano入门学习笔记
    发表于 11-26 12:36 20次下载
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>入门学习笔记

    基于 Keil MDK 移植 RT-Thread Nano

    本文介绍如何基于 Keil MDK 移植 RT-Thread Nano ,并以一个 stm32f103 的基础工程作为示例进行讲解。 RT-Thread Nano 已集成在 Keil
    发表于 01-26 17:04 16次下载
    基于 Keil MDK 移植 <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>

    如何创建RT-Thread Nano工程

    本文将尝试使用国产的嵌入式实时操作系统RT-Thread,相比较于FreeRTOS,RT-Thread还是有很多有点的,比如有Fish命令行界面,国产开源免费,Nano版本代码量极小,移植起来非常
    的头像 发表于 03-19 12:13 3677次阅读

    精选推荐

    更多
    • 文章
    • 资料
    • 帖子
    • 飞凌嵌入式FET6254-C核心板为智能运动控制系统强力赋能

      飞凌嵌入式
      11小时前
      158 阅读
    • 鸿蒙生态设备超10亿!原生鸿蒙发布,国产操作系统实现自主可控

      章鹰观察
      13小时前
      488 阅读
    • 康谋分享 | AD/ADAS的性能概览:在AD/ADAS的开发与验证中“大海捞针”!

      康谋自动驾驶
      16小时前
      215 阅读
    • 明明我说的是25G信号,你却让我看12.5G的损耗?

      海马硬件
      16小时前
      370 阅读
    • 从原理到计算到设计,1200字手把手教你学会用运放搭建差分放大电路

      硬件那点事儿
      17小时前
      460 阅读
    • 电子设计实用经验

      在路途
      34.7 MB
      免费
      0下载
    • Netgen二/三维四面体网格生成器

      duke刘
      3.51 MB
      2积分
      1下载
    • Vector Netflix主机性能监视工具

      杨火亭
      0.28 MB
      免费
      0下载
    • TabSiPlus Source Insight外挂插件

      李斌
      1.28 MB
      2积分
      2下载
    • DIY arduino UNO防护罩

      陈勇
      0.96 MB
      2积分
      1下载
    • 【社区工程师专题系列第七期】没有兴趣推动是不会有成就的——李海

      ElecFans小喇叭
      1天前
      150 阅读
    • Banana Pi BPI-R3路由器开发板运行 OrayOS物联网系统

      sinovoip
      1天前
      225 阅读
    • 嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-串口通讯编程示例之串口硬件原理

      jf_13411809
      1天前
      319 阅读
    • 《DNK210使用指南 -CanMV版 V1.0》第二十六章 摄像头图像捕获实验

      jf_85110202
      1天前
      367 阅读
    • AGM32VF407如何支持SDIO?最大SD卡容量支持到多少?

      jf_61020569
      1天前
      383 阅读

    推荐专栏

    更多

      玻璃钢生产厂家安庆道路护栏玻璃钢花盆台州玻璃钢仿铜雕塑定制供应菏泽广场玻璃钢雕塑定制安徽泡沫玻璃钢雕塑玻璃钢花盆如何种植深圳家用玻璃钢雕塑摆件焦作镜面玻璃钢彩绘雕塑定做湘潭长沙玻璃钢雕塑定制设计太原玻璃钢雕塑漆深圳仿铜玻璃钢雕塑厂家揭阳景区玻璃钢雕塑价格新郑玻璃钢卡通雕塑酒泉玻璃钢雕塑工程成都户外玻璃钢雕塑价格玻璃钢校园雕塑制作宣城树箱玻璃钢雕塑公司淮安商场大厅美陈鞍山玻璃钢美人鱼雕塑台湾玻璃钢海豚雕塑价格周口玻璃钢大型不锈钢城市雕塑丽水创意玻璃钢雕塑海南卡通玻璃钢动漫雕塑玻璃钢雕塑厂家直销重庆人物玻璃钢雕塑价位深圳特色商场美陈销售厂家沈阳仿铜玻璃钢雕塑生产厂家广东景区玻璃钢雕塑优势海口玻璃钢卡通雕塑陕西玻璃钢景观雕塑维修翻新广州欧式玻璃钢人物雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

      玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化