首页 > 评测 > 野火i.MX RT1052开发板评测:移植RTT、与STM32H743性能对比

野火i.MX RT1052开发板评测:移植RTT、与STM32H743性能对比

  • 作者:杰杰
  • 来源:21ic
  • [导读]
  • i.MX RT系列一经推出就受到了市场广泛关注,不少第三方也马不停蹄地进行开发板等配套开发资源的开发。本文对野火 i.MX RT1052开发板进行了评测,主要评测项目为:板载资源分析、RTT移植以及与STM32H743的性能对比测试。

image9.png

这些就是rtt的一些文件,bsp就是一些板级相关的东西,components就是一些组件,看英文单词都知道啦。然后就是src就是rtt的实现的源码,include就是一些头文件,而libcpu就是一些芯片的支持,tools就是一些rtt的工具,example还不会的别学嵌入式了。。。。。

image10.png

看源码确实是一个很轻量级的操作系统,移植起来也是很简单,重点是火哥已经帮我们移植好啦,直接用吧,杰杰在学校rtt的过程中,发现跟一些操作系统还是有点不一样的,他的启动方式就在启动文件已经做好了。来看看:

在components.c中的148行

/* re-define main function */

int $Sub$$main(void)

{

rt_hw_interrupt_disable();

rtthread_startup();

return 0;

}

先关中断,再做rtt的启动

int rtthread_startup(void)

{

rt_hw_interrupt_disable();

/* board level initalization

* NOTE: please initialize heap inside board 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();

#ifdef RT_USING_SIGNALS

/* signal system initialization */

rt_system_signal_init();

#endif

/* 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 reach here */

return 0;

}

里面有一些函数是我们自己实现的,比如开发板初始化:rt_hw_board_init,

rtt还是有点好玩的,对外开放了main嘛!我们一般写程序都在main.c中,所以,它又搞了个main_thread_entry线程(其实我更喜欢把这些称作任务,不过都一样啦,既然学了rtt,那就跟官方叫吧)

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

}

这个函数是跳转到我们的main.c中的main。下面才是真正实现我们的代码的地方。

由于前面说了,rtt启动的时候,会将开发板相关资源初始化,所以,我们自己的main就不需要再初始化了,直接开启rtt的线程的创建与启动。

lcd_thread = rt_thread_create("lcd",

lcd_thread_entry,

RT_NULL,

LCD_THREAD_STACK_SIZE,

LCD_THREAD_PRIORITY,

LCD_THREAD_TIMESLICE);

if (lcd_thread != RT_NULL) //创建成功

rt_thread_startup(lcd_thread); //启动线程

else

return -1;

相关宏定义:

#define LCD_THREAD_PRIORITY 13 /* 优先级,数值越大,优先级越低 */

#define LCD_THREAD_STACK_SIZE 1024 /* 线程栈大小,单位为字节 */

#define LCD_THREAD_TIMESLICE 5 /* 线程时间片,单位为tick */

然后就是lcd_thread_entry线程的实现了,这个自己定义就好啦。

既然是评测,当然得有性能的评测啦,一段使用(-O0)低级优化的整形数计算,在野火 i.MX RT1052板载的SDRAM上仅跑了21.487秒。在STM32H743上面跑了21.479秒(400M的工作频率,打开CaChe(高速缓存)),而在stm32f103zet6上跑了9分57秒多。性能可见一斑了吧???如果不信可以自行测试,我可是等了几分钟就去刷牙了,回来还没跑完。。。。。

测试代码如下:(来源网络的测试代码)

void Calculate()

{

unsigned long x;

unsigned long a;

a=1;

for(x=0;x<4294967294;x++)

{

a=a+1;

}

}

image11.png

 i.MX RT1052

image12.png

STM32H743

image13.png

stm32f103zet6

image14.png

在性能上面, i.MX RT1052,估计是一般mcu无法跨越的存在了,性能真的是超级强悍的。看文章的网友可能有疑问了,明明400M主频的H7比1052快啊,在此杰杰回答一下,1052是在外部SDRAM上的程序,而H7在片内内存上,而且H7开了cache,能不快吗,如果这点小程序在1052的片内内存上跑,绝对飞起。。。。。但是用上这么强的芯片,绝对不会只干这点小程序的活的,到时候跑GUI,你就发现速度了。

据火哥测试, i.MX RT1052的刷屏速度也很快,1366*768分辨率的屏幕可以达到52HZ,而1280*800的屏幕则达到了60HZ,70MHZ左右的VCLK时钟,占用SDRAM的50%左右的数据吞吐量。

  • 本文系21ic原创,未经许可禁止转载!

网友评论