www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

首頁 > 評測 > 野火i.MX RT1052開發(fā)板評測:移植RTT、與STM32H743性能對比

野火i.MX RT1052開發(fā)板評測:移植RTT、與STM32H743性能對比

  • 作者:杰杰
  • 來源:21ic
  • [導(dǎo)讀]
  • i.MX RT系列一經(jīng)推出就受到了市場廣泛關(guān)注,不少第三方也馬不停蹄地進行開發(fā)板等配套開發(fā)資源的開發(fā)。本文對野火 i.MX RT1052開發(fā)板進行了評測,主要評測項目為:板載資源分析、RTT移植以及與STM32H743的性能對比測試。

image9.png

這些就是rtt的一些文件,bsp就是一些板級相關(guān)的東西,components就是一些組件,看英文單詞都知道啦。然后就是src就是rtt的實現(xiàn)的源碼,include就是一些頭文件,而libcpu就是一些芯片的支持,tools就是一些rtt的工具,example還不會的別學(xué)嵌入式了。。。。。

image10.png

看源碼確實是一個很輕量級的操作系統(tǒng),移植起來也是很簡單,重點是火哥已經(jīng)幫我們移植好啦,直接用吧,杰杰在學(xué)校rtt的過程中,發(fā)現(xiàn)跟一些操作系統(tǒng)還是有點不一樣的,他的啟動方式就在啟動文件已經(jīng)做好了。來看看:

在components.c中的148行

/* re-define main function */

int $Sub$$main(void)

{

rt_hw_interrupt_disable();

rtthread_startup();

return 0;

}

先關(guān)中斷,再做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;

}

里面有一些函數(shù)是我們自己實現(xiàn)的,比如開發(fā)板初始化:rt_hw_board_init,

rtt還是有點好玩的,對外開放了main嘛!我們一般寫程序都在main.c中,所以,它又搞了個main_thread_entry線程(其實我更喜歡把這些稱作任務(wù),不過都一樣啦,既然學(xué)了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

}

這個函數(shù)是跳轉(zhuǎn)到我們的main.c中的main。下面才是真正實現(xiàn)我們的代碼的地方。

由于前面說了,rtt啟動的時候,會將開發(fā)板相關(guān)資源初始化,所以,我們自己的main就不需要再初始化了,直接開啟rtt的線程的創(chuàng)建與啟動。

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) //創(chuàng)建成功

rt_thread_startup(lcd_thread); //啟動線程

else

return -1;

相關(guān)宏定義:

#define LCD_THREAD_PRIORITY 13 /* 優(yōu)先級,數(shù)值越大,優(yōu)先級越低 */

#define LCD_THREAD_STACK_SIZE 1024 /* 線程棧大小,單位為字節(jié) */

#define LCD_THREAD_TIMESLICE 5 /* 線程時間片,單位為tick */

然后就是lcd_thread_entry線程的實現(xiàn)了,這個自己定義就好啦。

既然是評測,當(dāng)然得有性能的評測啦,一段使用(-O0)低級優(yōu)化的整形數(shù)計算,在野火 i.MX RT1052板載的SDRAM上僅跑了21.487秒。在STM32H743上面跑了21.479秒(400M的工作頻率,打開CaChe(高速緩存)),而在stm32f103zet6上跑了9分57秒多。性能可見一斑了吧???如果不信可以自行測試,我可是等了幾分鐘就去刷牙了,回來還沒跑完。。。。。

測試代碼如下:(來源網(wǎng)絡(luò)的測試代碼)

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無法跨越的存在了,性能真的是超級強悍的?次恼碌木W(wǎng)友可能有疑問了,明明400M主頻的H7比1052快啊,在此杰杰回答一下,1052是在外部SDRAM上的程序,而H7在片內(nèi)內(nèi)存上,而且H7開了cache,能不快嗎,如果這點小程序在1052的片內(nèi)內(nèi)存上跑,絕對飛起。。。。。但是用上這么強的芯片,絕對不會只干這點小程序的活的,到時候跑GUI,你就發(fā)現(xiàn)速度了。

據(jù)火哥測試, i.MX RT1052的刷屏速度也很快,1366*768分辨率的屏幕可以達到52HZ,而1280*800的屏幕則達到了60HZ,70MHZ左右的VCLK時鐘,占用SDRAM的50%左右的數(shù)據(jù)吞吐量。

  • 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!

網(wǎng)友評論

  • 聯(lián)系人:巧克力娃娃
  • 郵箱:board@21ic.com
  • 我要投稿
  • 歡迎入駐,開放投稿

熱門標(biāo)簽
項目外包 more+