Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
内核学习营
RTT VS RTT Nano
发布于 2020-03-13 11:51:47 浏览:3418
订阅该版
初探RTT全功能和 nano版本的源码对比 nano相对于全功能版本有一定的删减,来找一下区别和删减部分 ![1.png](/uploads/202003/13/115939vdu9ru44gljurarv.png) 逐个文件夹进行分析! - 根目录 从根目录的上来说,直观的来说,nano没有Kconfig文件,少了 tools文件夹(当然还有examples样例文件夹,不过这个不重要); Kconfig是因为全功能版本的RTT有点类Linux的源码结构,而nano的目录结构被砍的比较多,支持类似的插件式访问(我是这样理解的,nano就是一个简单的用户文件夹,提供了RTT的基本机构;而RTT是完整的,具有完整工具链结构和各种功能,我们所需要做的是从众多的功能中,挑选适合自己板子的,自己所想要的功能,然后生成工程); - BSP(RTT VS RTT Nano) 两个版本都有bsp文件夹;其中是RTT各个板子,不同的芯片做的移植; 正好这两天在Pandora上移植了RTT和RTT_Nano源码,那就主要分析一下Pandora: ![2.png](/uploads/202003/13/120003hm6s6hxmoljh3sss.png) 看上去差异很大,一部原因是因为nano使用CubeMx生成的,而RTT通过env工具scons生成的; 1).RTT中的applications是用户程序文件夹,用户所写的程序代码;对应于Pandora在src文件夹中;![3.png](/uploads/202003/13/114935tvoqv0putkup4qpo.png) (SConscript类似于Linux中的Makefile脚本文件,主要功能是结合Kconfig文件来编译裁剪内核;RTT的Kconfig与Linux的功能相同,每个文件下都存在) 2).RTT Board 文件夹中 ![4.png](/uploads/202003/13/114951z59oi2dkmz6d6o5m.png) CubeMX_config文件夹中保存的是cubemx工具生成的文件,在nano中由于工程就是用cubemx创建的cubemx的配置文件在根目录;RTT中的Linker_script文件夹保存着生成工程时的链接文件,主要是stm32l475ve芯片的flash,ram的地址和大小;ports中是一些自定义的驱动文件例如lcd液晶驱动,sd卡的驱动等等;接下去的board.c文件里面放的是pandora时钟初始化程序,对应的RTT_Nano的位置在`\Pandora\Middlewares\Third_Party\RealThread_RTOS_RT-Thread\bsp`下也有相应的board文件; 3).bulid文件夹是RTT工程生成时产生的对象文件(也就是.o文件),nano中的对应文件在MDK_ARM文件下可以找到; 4).RTT_Nano中的Middlewares是在cubemx生成工程的时候往里添加additional software所加入的RTT_nano的kernel; 5).RTT中的packages,通过menuconfig添加的RTT样例程序 - components(退回到根目录的第二个文件) ![5.png](/uploads/202003/13/115041s70enqym3xcnfqnn.png) 这里区别就大了;nano中只有FinSH(是 RT-Thread 的命令行组件);RTT中顺着文件夹列表可以看到,源码中自带了分布式文件系统,打开进入file system可以看到RTT支持的各种文件系统;drivers中可以看到RTT中已有包含了音频 can总线 i2c 麦克风 串口 spi usb 看门狗 等等的驱动; 还有net网络的驱动,libc中包含了一些文件支持库,VBus组件是RT-Thread与RT-Thread,或者RT-Thread与Linux沟通的交换数据的工具; - documentation和docs文件夹分别是RTT和RTT_Nano的一些必要文件和图片说明 - include ![6.png](/uploads/202003/13/115100v74umjq4ddh1us49.png) 这里的include文件夹无论RTT全功能还是nano都是一样的包括libc里也都是一样的;包含着RTT系必要的库文件; 但是同名的库文件中,又有一些不一样 1).rthw.h中;在终端接口和输出接口多了对smp的支持 ```c #ifdef RT_USING_SMP rt_base_t rt_hw_local_irq_disable(); void rt_hw_local_irq_enable(rt_base_t level); #define rt_hw_interrupt_disable rt_cpus_lock #define rt_hw_interrupt_enable rt_cpus_unlock #else rt_base_t rt_hw_interrupt_disable(void); void rt_hw_interrupt_enable(rt_base_t level); #endif /*RT_USING_SMP*/ /* * Context interfaces */ #ifdef RT_USING_SMP void rt_hw_context_switch(rt_ubase_t from, rt_ubase_t to, struct rt_thread *to_thread); void rt_hw_context_switch_to(rt_ubase_t to, struct rt_thread *to_thread); void rt_hw_context_switch_interrupt(void *context, rt_ubase_t from, rt_ubase_t to, struct rt_thread *to_thread); #else void rt_hw_context_switch(rt_ubase_t from, rt_ubase_t to); void rt_hw_context_switch_to(rt_ubase_t to); void rt_hw_context_switch_interrupt(rt_ubase_t from, rt_ubase_t to); #endif /*RT_USING_SMP*/ ``` 同时多了在使用smp的时候多了自旋锁的功能定义,已经第二cpu启动和idle的功能实现; 2).rdef.h中的区别 RTT比nano多了跟多的基本类型的定义; ```c /** * The object type can be one of the follows with specific * macros enabled: * - Thread * - Semaphore * - Mutex * - Event * - MailBox * - MessageQueue * - MemHeap * - MemPool * - Device * - Timer * - Module * - Unknown * - Static */ ``` 除此,双方对进程,信号量,邮件,事件等等的宏定义都是一样的 3).rthread.h ```c #ifdef RT_USING_SMP void rt_scheduler_ipi_handler(int vector, void *param); #endif ``` 在任务调任中增加了对多处理的实现;此外,当RT_USING_SMP这个宏定义的时候,RTT中还对spinlock自旋锁做了基本函数的实现; - libcpu ![7.png](/uploads/202003/13/115126e44gb14zrtt7gfj3.png) libcpu中是两个系统对cpu架构的支持情况,nano中只有arm 和risc-v;而RTT中就多了有,xlinux mips nios等等 - src ![8.png](/uploads/202003/13/115141o6plbyhhpu5fipbo.png) RTT全功能中比nano多了device signal两个文件,device是用于发现设备和初始化设备的;signal适用于对初始化信号的,包含了系列对使用signal的支撑函数; - tools 此外,RTT还多了一个tools文件夹,其中是RTT对各种编译工具的支持,类似GCC vs2012 eclipse等等。
查看更多
1
个回答
默认排序
按发布时间排序
crystal266
2022-02-18
嵌入式
?????
撰写答案
登录
注册新账号
关注者
0
被浏览
3.4k
关于作者
水蜜桃菌
这家伙很懒,什么也没写!
提问
9
回答
10
被采纳
0
关注TA
发私信
相关问题
1
【内核学习】rtthread内核移植记录-STM32F103ZET6-HAL库
2
《内核学习营》+水一方+自用STM32F103VC 板RT-Thread内核移植分享
3
《内核学习营》+水一方+项目中创建标准的 RT-Thread工程
4
内核学习营+坦然+探索者stm32f407板子RT-thread循环点亮led灯
5
<内核学习营>+坦然+探索者stm32f407板子RT-thread串口字符点灯
6
<内核学习营>+坦然+探索者stm32f407板子RT-thread的pwm点灯实验
7
<内核学习营>+坦然+探索者stm32f407板子RT-thread串口实验
8
<内核学习营>+坦然+野火stm32f103板子RT-thread读写SD卡实验
9
<内核学习营>+坦然+探索者stm32f407板子RT-thread的RTC闹钟实验
10
【内核学习营】+王秀峰+led_rgb
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
rt-thread 小内存算法源码分析
2
env中添加lvgl软件包后,keil编译包--c99错误
3
【NXP-MCXA153】 定时器驱动移植
4
GD32F450 看门狗驱动适配
5
【NXP-MCXA153】看门狗驱动移植
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
freemodbus
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
keil_MDK
msh
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
7
个答案
2
次被采纳
a1012112796
18
个答案
1
次被采纳
红枫
8
个答案
1
次被采纳
Ryan_CW
5
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
本月文章贡献
YZRD
3
篇文章
6
次点赞
catcatbing
3
篇文章
6
次点赞
lizimu
2
篇文章
12
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部