【野火®】i.MX RT1052评测——移植RT-Thread
跨界处理器
i.MX RT1052是i.MX RT系列芯片,是由 NXP 半导体公司推出的跨界处理器芯片,该系列下又包括i.MX RT1020、i.MX RT1050及 i.MX RT1060等子系列芯片。所谓“跨界”,是指它自身的定位既非传统的应用处理器也非传统的微控制器。
传统的应用处理器如手机主控芯片,它们通常采用 ARM 的 Cortex-A系列内核,配合
其芯片架构使得芯片能实现更高频率的运行。传统的微控制器也称为 MCU,它们通常采用
ARM 的 Cortex-M 系列内核,相对来说该内核对中断响应更快,所以具有良好的实时性,
但其芯片架构特别是集成片内闪存带来了生产技术限制和成本负担,从而限制了其性能。
而i.MX RT 系列芯片集成了两者的优点,它基于应用处理器的芯片架构,采用了微控制
器的内核 Cortex-M7,从而具有应用处理器的高性能及丰富的功能,又具备传统微控制器
的易用、实时及低功耗的特性。
野火i.MX RT1052
野火的i.MX RT1052核心板搭载了i.MX RT1025DVL6A芯片,Cortex-M7内核,主频高达600M。130个IO全部引出。集成32MB SDRAM、128MB NAND FLASH、32MB QSPI FLASH、2Kb EEPROM、LCD-RGB565 FPC接口、1个SWD调试接口、 1个uart 调试接口、1个电源LED、1个用户LED、 一个复位按键、1个MODE按键、 1个WAKEUP按键 和1个Microusb接口等资源。芯片I0共130个, 均通过0.8mm的BTB接口在背面引出,包括SEMC总线,方便我们扩展各种模块。
底板图片如下:
装在mini底板上的效果图,哎,杰杰还是很羡慕Pro底板的,资源丰富。连LCD都能放在板子上,而我的LCD就只能通过排线弄出来。
看看火哥核心板的风骚走线:
顶层
底层
这些走线骚气得一批,不过很多信号线都采用等长走线,保证了信号的稳定性,这个值得点赞!!!
i.MX RT1052的性能
介绍一下i.MX RT1052芯片的性能优点吧:
无需片内闪存
由于跨界处理器采用了应用处理器架构,具有大幅缩小的 SRAM 位单元,在跨界设计架构中,SRAM可以配置为具有“零等待”单周期访问的TCM,从而大幅提升系统性能。
高性能
具备高密度片内 TCM 或缓存的跨界处理器的缓存未命中率可低至 1-2%,因此能够提供明显高于 MCU 的有效性能。
低中断延迟
在协调对内部和外部硬件事件做出及时响应方面,中断在嵌入式系统中发挥了重要作用。在与用户交互的实时系统中,它们发挥的作用尤其重要,这是因为由用户输入触发的外部事件需要 CPU 做出可靠的低延迟即时响应。跨界处理器采用 MCU 内核构建,因此即使它们采用应用处理器架构,也延续了低中断延迟这一重要特性。跨界处理器的中断延迟最低可达到 10-20ns,而应用处理器的延迟通常长达 1毫秒。
高能效以及安全性。
野火i.MX RT1052工程
下面来说说固件库写的工程吧,按照火哥一贯舒服的代码风格
而且工程中含有不同版本的工程
正常来说,我们写代码不可能一次成功的,需要调试很久才出结果,可以通过ram_debug或者sdram_debug版本将程序快速加载到我们的开发板上的RT1052 芯片的内部 RAM 中或者是板载的SDRAM 芯片中,实现快速调试代码,但是RAM 空间小,适用于小程序调试,而板载的sdram则有32MB的空间,适用于大程序的调试。但是掉电则丢失这些程序,无法用在产品上,仅做调试用。
而下面两个版本,则可以作为产品的最终代码,将程序下载到NOR FLASH中,但是下载速度较慢,而且运行速度较SDRAM慢,杰杰猜测,我们或许应该可以将程序写为两段,在发布产品的时候,从NOR FLASH启动,运行NOR FLASH的第一段程序,将存在NOR FLASH的第二段程序加载到SDRAM/SRAM中运行,直到掉电。这样子就能提高速度了吧。
前面的前三个模式均采用低优化等级(-O0)优化,而_flexspi_nor_release版本则采用高优化(-O3)等级,以便节约程序空间,提高运行效率。(杰杰吐槽:就是编译有点久)。
温馨提示:如果不用mdk看代码的话,可以去掉“魔术棒”->Output -> Browse Information的√。然后可以使用source insight看代码,方便很多,至少比mdk好多了。
下个代码欣赏欣赏。
RT-Thread物联网操作系统
野火i.MX RT1052的程是移植了RT-Thread物联网操作系统的(还是要支持一下国产的操作系统的),来看看源码吧。
先介绍介绍RT-Thread物联网操作系统(以下简称rtt),操作系统是轻量级的,利用很小的资源完成实时操作系统的工作。
这些就是rtt的一些文件,bsp就是一些板级相关的东西,components就是一些组件,看英文单词都知道啦。然后就是src就是rtt的实现的源码,include就是一些头文件,而libcpu就是一些芯片的支持,tools就是一些rtt的工具,example还不会的别学嵌入式了。。。。。
看源码确实是一个很轻量级的操作系统,移植起来也是很简单,重点是火哥已经帮我们移植好啦,直接用吧,杰杰在学校rtt的过程中,发现跟一些操作系统还是有点不一样的,他的启动方式就在启动文件已经做好了。来看看:
在components.c中的148行:
1/* re-define main function */
2int $Sub$$main(void)
3{
4 rt_hw_interrupt_disable();
5 rtthread_startup();
6 return 0;
7}
先关中断,再做rtt的启动
1int rtthread_startup(void)
2{
3 rt_hw_interrupt_disable();
4 /* board level initalization
5 * NOTE: please initialize heap inside board initialization.
6 */
7 rt_hw_board_init();
8 /* show RT-Thread version */
9 rt_show_version();
10 /* timer system initialization */
11 rt_system_timer_init();
12 /* scheduler system initialization */
13 rt_system_scheduler_init();
14#ifdef RT_USING_SIGNALS
15 /* signal system initialization */
16 rt_system_signal_init();
17#endif
18 /* create init_thread */
19 rt_application_init();
20 /* timer thread initialization */
21 rt_system_timer_thread_init();
22 /* idle thread initialization */
23 rt_thread_idle_init();
24 /* start scheduler */
25 rt_system_scheduler_start();
26 /* never reach here */
27 return 0;
28}
里面有一些函数是我们自己实现的,比如开发板初始化:rt_hw_board_init,
rtt还是有点好玩的,对外开放了main嘛!我们一般写程序都在main.c中,所以,它又搞了个main_thread_entry线程(其实我更喜欢把这些称作任务,不过都一样啦,既然学了rtt,那就跟官方叫吧)
1void main_thread_entry(void *parameter)
2{
3 extern int main(void);
4 extern int $Super$$main(void);
5 /* RT-Thread components initialization */
6 rt_components_init();
7 /* invoke system main function */
8#if defined (__CC_ARM)
9 $Super$$main(); /* for ARMCC. */
10#elif defined(__ICCARM__) || defined(__GNUC__)
11 main();
12#endif
13}
这个函数是跳转到我们的main.c中的main。下面才是真正实现我们的代码的地方。
由于前面说了,rtt启动的时候,会将开发板相关资源初始化,所以,我们自己的main就不需要再初始化了,直接开启rtt的线程的创建与启动。
1lcd_thread = rt_thread_create("lcd",
2 lcd_thread_entry,
3 RT_NULL,
4 LCD_THREAD_STACK_SIZE,
5 LCD_THREAD_PRIORITY,
6 LCD_THREAD_TIMESLICE);
7 if (lcd_thread != RT_NULL) //创建成功
8 rt_thread_startup(lcd_thread); //启动线程
9 else
10return -1;
11相关宏定义:
12#define LCD_THREAD_PRIORITY 13 /* 优先级,数值越大,优先级越低 */
13#define LCD_THREAD_STACK_SIZE 1024 /* 线程栈大小,单位为字节 */
14#define LCD_THREAD_TIMESLICE 5 /* 线程时间片,单位为tick */
i.MX RT1052性能测试
既然是评测,当然得有性能的评测啦,一段使用(-O0)低级优化的整形数计算,在野火i.MX RT1052板载的SDRAM上仅跑了21.487秒。在STM32H743上面跑了21.479秒(400M的工作频率,打开CaChe(高速缓存)),而在stm32f103zet6上跑了9分57秒多。性能可见一斑了吧???如果不信可以自行测试,我可是等了几分钟就去刷牙了,回来还没跑完。。。。。
测试代码如下:(来源网络的测试代码)
1void Calculate()
2{
3 unsigned long x;
4 unsigned long a;
5 a=1;
6 for(x=0;x<4294967294;x++)
7 {
8 a=a+1;
9 }
10}
测试结果对比:
i.MX RT1052
STM32H743
stm32f103zet6
在性能上面,i.MX RT1052,估计是一般mcu无法跨越的存在了,性能真的是超级强悍的。看文章的网友可能有疑问了,明明400M主频的H7比1052快啊,在此杰杰回答一下,1052是在外部SDRAM上的程序,而H7在片内内存上。。。。而且重要的是工业级的1052仅需3.8美金,很便宜了。
据火哥测试,i.MX RT1052的刷屏速度也很快,1366*768分辨率的屏幕可以达到52HZ,而1280*800的屏幕则达到了60HZ,70MHZ左右的VCLK时钟,占用SDRAM的50%左右的数据吞吐量。
想要了解更多1052相关的东西,欢迎与杰杰联系
本次测试完结。
文章首发地址:野火i.MX RT1052开发板评测:移植RTT、与STM32H743性能对比
【野火®】i.MX RT1052评测——移植RT-Thread相关推荐
- RT Thread Free Modbus移植问题整理
RT Thread Free Modbus移植问题整理 问题描述: 在读写寄存器中,写数据正常,只能读1个寄存器的值,多个值会异常. 在移植过程中发现串口(或RS485)数据接收长度异常. 一.环境描 ...
- 正点原子delay函数移植到rt thread操作系统(HAL库)
正点原子教程中涉及到的操作系统只涉及了UCOS的教程,其中例程的system文件夹中的delay.c函数只是适配了UCOS. 下面将delay.c函数移植到rt thread中,使用的bsp是rt t ...
- 基于rt thread smart构建EtherCAT主站
我把源码开源到到了gitee,https://gitee.com/rathon/rt-thread-smart-soem 有兴趣的去可以下载下来跑一下 软件工程推荐用vscode 打开.rt thre ...
- rt thread studio使用QBOOT和片外flash实现OTA升级
我们这里要使用单片机外部flash作为OTA的下载分区,外部flash硬件连接关系 PB3-->SPI3_CLK PB4-->SPI3_MISO PB5-->SPI3_MOSI PE ...
- Yeelink平台使用——远程控制 RT Thread + LwIP+ STM32
1.前言 [2014年4月重写该博文] 经过若干时间的努力终于搞定了STM32+LwIP和yeelink平台的数据互通,在学习的过程中大部分时间花在以太网协议栈学习上,但是在RT Th ...
- RT Thread根据开发板制作BSP方法
之前一直不懂怎么使用RT Thread的软件包,感谢网上的大神,看了你们的博客后大概了解一些,在此做下记录.用RT Thread软件包需要RT Thread的系统,但是RT Thread和RT Thr ...
- NXP i.MX RT1052 连载之 MCU 简介【1】
一.i.MX 是何物? i.MX RT 系列芯片,是由 NXP 半导体公司推出的跨界处理理器芯片,该系列下又包括 i.MX RT1010. i.MX RT1015. i.MX RT1020. i.MX ...
- RT Thread利用STM32CUBEMX和RT Thread studio来创建模板工程
(1)RT Thread利用STM32CUBEMX来创建模板工程 1.参考文档: 基于 CubeMX 移植 RT-Thread Nano:RT-Thread 文档中心 注意:串口2必须使能异步模式(启 ...
- xpt 2046的触摸屏 rt thread设备驱动框架
1 基于rtt 开发触摸屏驱动 准备使用rtt 框架 , 驱动xpt 2046的触摸屏, 翻阅大量资料发现, 大部分文章强调的是时序图, 而且很多代码要么直接操作寄存器, 要么是io 口模拟, 只能用 ...
最新文章
- 多级反馈队列调度算法具体原理
- 让使用SQLite的.NET应用自适应32位/64位系统
- 计算机辅助教育会议,子会议1:学习科学、计算机辅助合作学习、智慧教育
- 探索JavaScript的关闭功能
- 打印速度快点的打印机_SLM推出了功能强大的新型金属3D打印机,速度快20倍
- 《深入浅出WPF》学习笔记之深入浅出话属性
- 大学生学图像处理计算机要求,重点大学计算机教材:数字图像处理
- 【性能测试】性能数据采集工具nmon安装使用及报告参数含义详解
- webpack5+vue3搭建h5项目模板-(一)-基础配置
- Chrome最新版本如何通过JS设置支持自动播放音频
- 酷软 正在连接服务器,酷软一直显示正在连接服务器...系统日志有大量错误信息...
- 内外网双网卡同时上网
- 4G多卡聚合路由器解决视频直播中的网络不稳定问题
- 个人网盘源码 本地网盘网站源码
- 外贸常用术语_常用的外贸术语及工具
- SEO应届生,如何快速的了解SEO?
- python3网络爬虫--爬取华为应用市场app数据(附源码)
- IDLE Help | 汉化
- 安全测试(五)Android APK软件安全 APP应用安全 手机软件安全 apk安全 apk反编译 应用日志窃取 apk漏洞 应用软件本身功能漏洞 高危权限泄密风险等 移动应用常规安全讲解
- 【上海 >>无锡】自驾两日游
热门文章
- Linux 使用 docker 安装 Nexus3 私服
- JavaWeb开发---B/S和C/S模式 tomcat服务器 Tomcat项目部署和发布 静态网页和动态网页 tomcat对web项目的目录要求 使用idea开发工具创建web项目 设置默认首页
- FreeSurfer预处理结果文件含义
- “操作无法完成,因为文件已在另一个程序中打开”怎么办?
- Docker、LXC、LXD这三种容器的区别
- 手机室内导航解决方案简介
- 好久不见的电信强制广告又来了。
- Python 实现AdaGrad和Adam拟合四次函数(随笔四)
- centOS下安装php7及扩展
- C语言实现方向余弦矩阵转旋转矢量