首頁 > 評測 > 野火i.MX RT1052開發(fā)板評測:移植RTT、與STM32H743性能對比
野火i.MX RT1052開發(fā)板評測:移植RTT、與STM32H743性能對比
- [導(dǎo)讀]
- i.MX RT系列一經(jīng)推出就受到了市場廣泛關(guān)注,不少第三方也馬不停蹄地進行開發(fā)板等配套開發(fā)資源的開發(fā)。本文對野火 i.MX RT1052開發(fā)板進行了評測,主要評測項目為:板載資源分析、RTT移植以及與STM32H743的性能對比測試。
這些就是rtt的一些文件,bsp就是一些板級相關(guān)的東西,components就是一些組件,看英文單詞都知道啦。然后就是src就是rtt的實現(xiàn)的源碼,include就是一些頭文件,而libcpu就是一些芯片的支持,tools就是一些rtt的工具,example還不會的別學(xué)嵌入式了。。。。。
看源碼確實是一個很輕量級的操作系統(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;
}
}
STM32H743
stm32f103zet6
在性能上面, 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
- 我要投稿
-
歡迎入駐,開放投稿
-
人均百萬?英偉達中國員工收入曝光! 2024-08-29
-
《黑神話:悟空》玩家硬盤升級攻略:提升游戲體驗,暢享3A大作 2024-08-29
-
數(shù)睿數(shù)據(jù)參加《系統(tǒng)與軟件工程 低代碼開發(fā)平臺通用技術(shù)要求》國家標(biāo)準(zhǔn)編制 2024-08-29
- NRF52810藍牙數(shù)字耳機找人定制
預(yù)算:¥30005天前
- 125KW模塊式PCS軟硬件外包開發(fā)
預(yù)算:¥1100000015小時前
- 12V汽車啟動電源項目BMS設(shè)計
預(yù)算:¥50000023小時前
- 數(shù)據(jù)可視化軟件 開發(fā)
預(yù)算:¥5000023小時前
- PLC項目調(diào)試修改
預(yù)算:¥100001天前
- 起動電機控制器開發(fā)
預(yù)算:¥1100001天前