一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

R-Rhealstone框架使用教程

jf_NsPBt3VS ? 來源:風(fēng)火輪技術(shù)團(tuán)隊(duì) ? 2024-01-18 10:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本篇文章描述基于Rhealstone的系統(tǒng)實(shí)時(shí)性的測(cè)量基準(zhǔn)的框架--R-Rhealstone框架。

嵌入式軟件設(shè)計(jì)和集成中,實(shí)時(shí)多任務(wù)操作系統(tǒng)的性能分析是至關(guān)重要的,它需要保證應(yīng)用的時(shí)間限制得到滿足,即是運(yùn)行時(shí)間不能超過應(yīng)用的時(shí)間限制。為了選擇滿足用于特定應(yīng)用的嵌入式系統(tǒng)的一個(gè)適當(dāng)?shù)牟僮飨到y(tǒng),我們需要對(duì)操作系統(tǒng)服務(wù)進(jìn)行分析。這些操作系統(tǒng)服務(wù)是由形成性能指標(biāo)的參數(shù)確定的,既定的性能指標(biāo)包括上下文切換時(shí)間、任務(wù)搶占時(shí)間、中斷延遲時(shí)間、信號(hào)量混洗時(shí)間、死鎖解除時(shí)間、信息傳輸延遲。

關(guān)于實(shí)時(shí)操作系統(tǒng)對(duì)性能指標(biāo)進(jìn)行分析,是為了選擇滿足用于特定應(yīng)用的嵌入式系統(tǒng)的最優(yōu)的操作系統(tǒng)。

Rhealstone

Rhealstone是系統(tǒng)實(shí)時(shí)性的測(cè)量基準(zhǔn)之一,Rhealstone性能基準(zhǔn)程序是實(shí)時(shí)系統(tǒng)的六個(gè)關(guān)鍵操作的時(shí)間量進(jìn)行操作,這六個(gè)關(guān)鍵操作是:上下文切換時(shí)間、任務(wù)搶占時(shí)間、中斷延遲時(shí)間、信號(hào)量混洗時(shí)間、死鎖解除時(shí)間、信息傳輸延遲。這六項(xiàng)操作作為Rhealstone的六個(gè)組件,每個(gè)組件被單獨(dú)測(cè)量。然后將經(jīng)驗(yàn)結(jié)果合并為單一的測(cè)量值,即是Rhealstone值。

測(cè)量Rhealstone值方式:

序號(hào) 說明
方式 1 通用Rhealstone
方式 2 每個(gè)組件應(yīng)用于具體應(yīng)用程序的特定Rhealstone

Rhealstone性能基準(zhǔn)程的缺點(diǎn):

序號(hào) 說明
缺點(diǎn) 1 測(cè)量的是平均時(shí)間,而不是最壞值
缺點(diǎn) 2 后的結(jié)論是加權(quán)平均值,沒有給出確定權(quán)值的依據(jù)

R-Rhealstone框架

設(shè)計(jì)R-Rhealstone框架的目的:為了能讓對(duì)比的系統(tǒng)實(shí)時(shí)性的測(cè)量的一致性,必須保證同一個(gè)環(huán)境,解除差異性帶來測(cè)量干擾,所以R-Rhealstone框架提供了操作系統(tǒng)適配層,統(tǒng)一適配不同操作系統(tǒng)的各個(gè)接口,目的可以達(dá)到上層調(diào)用層次一致。

a8aed314-b520-11ee-8b88-92fbcf53809c.png

上下文切換時(shí)間

描述:

上下文切換時(shí)間也稱任務(wù)切換時(shí)間(task switching time),定義為系統(tǒng)在兩個(gè)獨(dú)立的、處于就緒態(tài)并且具有相同優(yōu)先級(jí)的任務(wù)之間切換所需要的時(shí)間。它包括三個(gè)部分,即保存當(dāng)前任務(wù)上下文的時(shí)間、調(diào)度程序選中新任務(wù)的時(shí)間和恢復(fù)新任務(wù)上下文的時(shí)間。切換所需的時(shí)間主要取決于保存任務(wù)上下文所用的數(shù)據(jù)結(jié)構(gòu)以及操作系統(tǒng)采用的調(diào)度算法的效率。產(chǎn)生任務(wù)切換的原因可以是資源可得,信號(hào)量的獲取等。任務(wù)切換是任一多任務(wù)系統(tǒng)中基本效率的測(cè)量點(diǎn),它是同步的,非搶占的,實(shí)時(shí)控制軟件實(shí)現(xiàn)了一種基于同等優(yōu)先級(jí)任務(wù)的時(shí)間片輪轉(zhuǎn)算法。影響任務(wù)切換的因素有:主機(jī)CPU的結(jié)構(gòu),指令集以及CPU特性。

任務(wù)切換過程增加了應(yīng)用程序的額外負(fù)荷。CPU的內(nèi)部寄存器越多,額外負(fù)荷就越重。任務(wù)切換所需要的時(shí)間取決于CPU有多少寄存器要入棧。實(shí)時(shí)內(nèi)核的性能不應(yīng)該以每秒鐘能做多少次任務(wù)切換來評(píng)價(jià),RTOS中通常是1微秒左右。

流程:

原理:創(chuàng)建兩個(gè)同等優(yōu)先級(jí)的任務(wù),兩個(gè)任務(wù)相互切換多次,最后求平均值。

注意:①需要減去多次切換的循環(huán)時(shí)間(loop_overhead);②需要減去主動(dòng)讓CPU執(zhí)行時(shí)間(dir_overhead)

時(shí)間計(jì)算公式:

total_time:多次上下文切換總時(shí)間

loop_overhead:多次切換的循環(huán)時(shí)間

iterations:切換的次數(shù)

dir_overhead:調(diào)用讓出CPU接口的時(shí)間

a8bd3512-b520-11ee-8b88-92fbcf53809c.png

代碼:

#include"rst.h"
#include"rst_ipc.h"
#include"rst_btime.h"

staticfloatloop_overhead=0.0;
staticfloatdir_overhead=0.0;
staticfloattelapsed=0.0;

staticuint32_tcount1,count2;

staticrst_task_idrst_task1=NULL;
staticrst_task_idrst_task2=NULL;

staticrst_task_attrrst_task1_attr={
.name="task1",
#ifRST_BIG_NUM_HIGH_PRIORITY
.priority=RST_TASK_HIGHEST_PRIORITY-1,
#else
.priority=RST_TASK_HIGHEST_PRIORITY+1,
#endif
.stack_size=RST_TASK_STACK_SIZE,
};

staticrst_task_attrrst_task2_attr={
.name="task2",
#ifRST_BIG_NUM_HIGH_PRIORITY
.priority=RST_TASK_HIGHEST_PRIORITY-1,
#else
.priority=RST_TASK_HIGHEST_PRIORITY+1,
#endif
.stack_size=RST_TASK_STACK_SIZE,
};

staticvoidrst_task2_func(void*arg);

staticvoidrst_task1_func(void*arg)
{
rst_task_create(&rst_task2,rst_task2_func,NULL,&rst_task2_attr);
if(rst_task2==NULL)
{
RST_LOGE("RST:task2createfailed");
rst_task_delete(NULL);
return;
}
/*Yieldprocessorsosecondtaskcanstartupandrun*/
rst_task_yield();

for(count1=0;count1

任務(wù)搶占時(shí)間

描述:

搶占時(shí)間即系統(tǒng)將控制權(quán)從低優(yōu)先級(jí)的任務(wù)轉(zhuǎn)移到高優(yōu)先級(jí)任務(wù)所花費(fèi)的時(shí)間。為了對(duì)任務(wù)進(jìn)行搶占,系統(tǒng)必須首先識(shí)別引起高優(yōu)先級(jí)任務(wù)就緒的事件,比較兩個(gè)任務(wù)的優(yōu)先級(jí),最后進(jìn)行任務(wù)的切換,所以搶占時(shí)間中包括了任務(wù)切換時(shí)間。

它和任務(wù)切換有些類似,但是搶占時(shí)間通?;ㄙM(fèi)時(shí)間更長(zhǎng)。這是因?yàn)閳?zhí)行中首先要確認(rèn)喚醒事件,并評(píng)估正在運(yùn)行的任務(wù)和請(qǐng)求運(yùn)行的任務(wù)的優(yōu)先級(jí)高低,然后才決定是否切換任務(wù)。實(shí)質(zhì)上,所有的多處理任務(wù)可以在執(zhí)行期間動(dòng)態(tài)分配優(yōu)先級(jí),所以,搶占時(shí)間也是衡量實(shí)時(shí)性能的重要指標(biāo)。

流程:

原理:創(chuàng)建兩個(gè)任務(wù),任務(wù)1優(yōu)先級(jí)比任務(wù)2優(yōu)先級(jí)低,兩個(gè)任務(wù)進(jìn)行搶占多次,最后求平均值。

注意:①需要減去多次任務(wù)搶占的循環(huán)時(shí)間(loop_overhead);②需要減去掛起任務(wù)所需要的時(shí)間(dir_overhead)

時(shí)間計(jì)算公式:

total_time:多次任務(wù)搶占總時(shí)間

loop_overhead:多次任務(wù)搶占的循環(huán)時(shí)間

iterations:任務(wù)搶占的次數(shù)

switch_overhead:掛起任務(wù)所需要的時(shí)間

a8cb3216-b520-11ee-8b88-92fbcf53809c.png

代碼:

#include"rst.h"
#include"rst_ipc.h"
#include"rst_btime.h"

staticfloatloop_overhead=0.0;
staticfloatswitch_overhead=0.0;
staticfloattelapsed=0.0;

staticuint32_tcount;

staticrst_task_idrst_task1=NULL;
staticrst_task_idrst_task2=NULL;

staticrst_task_attrrst_task1_attr={
.name="task1",
#ifRST_BIG_NUM_HIGH_PRIORITY
.priority=RST_TASK_HIGHEST_PRIORITY-3,
#else
.priority=RST_TASK_HIGHEST_PRIORITY+3,
#endif
.stack_size=RST_TASK_STACK_SIZE,
};

staticrst_task_attrrst_task2_attr={
.name="task2",
#ifRST_BIG_NUM_HIGH_PRIORITY
.priority=RST_TASK_HIGHEST_PRIORITY-1,
#else
.priority=RST_TASK_HIGHEST_PRIORITY+1,
#endif
.stack_size=RST_TASK_STACK_SIZE,
};

staticvoidrst_task2_func(void*arg);

staticvoidrst_task1_func(void*arg)
{
/*Startuptask2,getpreempted*/
rst_task_create(&rst_task2,rst_task2_func,NULL,&rst_task2_attr);
if(rst_task2==NULL)
{
RST_LOGE("RST:task2createfailed");
rst_task_delete(NULL);
return;
}
switch_overhead=rst_benchmark_time_read();

rst_benchmark_time_init();
/*Benchmarkcode*/
for(count=0;count

中斷延遲時(shí)間

描述:

中斷延遲時(shí)間是指從接收到中斷信號(hào)到操作系統(tǒng)做出響應(yīng),并完成進(jìn)入中斷服務(wù)例程所需要的時(shí)間。多任務(wù)操作系統(tǒng)中,中斷處理首先進(jìn)入一個(gè)中斷服務(wù)的總控程序,然后才進(jìn)入驅(qū)動(dòng)程序的ISR。

中斷延遲時(shí)間=最大關(guān)中斷時(shí)間+硬件開始處理中斷到開始執(zhí)行中斷服務(wù)例程第一條指令之間的時(shí)間。

硬件開始處理中斷到開始執(zhí)行中斷服務(wù)例程的第一條指令之間的時(shí)間由硬件決定,所以,中斷延遲時(shí)間的長(zhǎng)短主要取決于最大關(guān)中斷的時(shí)間。硬實(shí)時(shí)操作系統(tǒng)的關(guān)中斷時(shí)間通常是幾微秒,而Linux最壞可達(dá)幾毫秒。

流程:

原理:創(chuàng)建一個(gè)任務(wù),任務(wù)執(zhí)行主動(dòng)觸發(fā)中斷,執(zhí)行完中斷服務(wù)程序返回,統(tǒng)計(jì)其時(shí)間。

注意:①需要減去讀取時(shí)間接口的耗時(shí)時(shí)間(timer_overhead);

時(shí)間計(jì)算公式:

isr_enter_time:多次任務(wù)搶占總時(shí)間

iterations:任務(wù)搶占的次數(shù)

timer_overhead:讀取時(shí)間接口的耗時(shí)時(shí)間

a8d9fbe8-b520-11ee-8b88-92fbcf53809c.png

代碼:

#include"rst.h"
#include"rst_ipc.h"
#include"rst_btime.h"

staticfloattimer_overhead=0.0;
staticfloatisr_enter_time=0.0;

staticrst_task_idrst_task1=NULL;

staticrst_task_attrrst_task1_attr={
.name="task1",
#ifRST_BIG_NUM_HIGH_PRIORITY
.priority=RST_TASK_LOWEST_PRIORITY+1,
#else
.priority=RST_TASK_LOWEST_PRIORITY-1,
#endif
.stack_size=RST_TASK_STACK_SIZE,
};

staticvoidrst_isr_handler(void*param)
{
isr_enter_time=rst_benchmark_time_read();
}

staticvoidrst_task1_func(void*arg)
{
rst_isr_install(RST_ISR_NUM,rst_isr_handler,NULL);

/*Benchmarkcode*/
rst_benchmark_time_init();
/*goestoIsr_handler*/
rst_isr_trigger(RST_ISR_NUM);

RST_PRINT_TIME(
"R-Rhealstone:interruptlatencytime",
isr_enter_time,
1,/*OnlyRhealstonethatisn'tanaverage*/
timer_overhead,
0
);
rst_task_delete(NULL);
}

rst_statusrst_interrupt_latency_init(void)
{
rst_task_create(&rst_task1,rst_task1_func,NULL,&rst_task1_attr);
if(rst_task1==NULL)
{
RST_LOGE("RST:task1createfailed");
returnRST_ERROR;
}

rst_benchmark_time_init();
rst_benchmark_time_read();
rst_benchmark_time_init();
timer_overhead=rst_benchmark_time_read();

returnRST_OK;
}

信號(hào)量混洗時(shí)間

描述:

信號(hào)量混洗時(shí)間(semaphore shuffling time),是指從一個(gè)任務(wù)釋放信號(hào)量到另一個(gè)等待該信號(hào)量的任務(wù)被激活的時(shí)間延遲。在RTOS中,通常有許多任務(wù)同時(shí)競(jìng)爭(zhēng)某一共享資源,基于信號(hào)量的互斥訪問保證了任一時(shí)刻只有一個(gè)任務(wù)能夠訪問公共資源。信號(hào)量混洗時(shí)間反映了與互斥有關(guān)的時(shí)間開銷,因此也是衡量RTOS實(shí)時(shí)性能的一個(gè)重要指標(biāo)。

流程:

原理:創(chuàng)建一個(gè)信號(hào)量和兩個(gè)相同優(yōu)先級(jí)的任務(wù)。代碼需要執(zhí)行兩次,第一次信號(hào)量不介入調(diào)度,計(jì)算任務(wù)切換的時(shí)間,第二次多次循環(huán),信號(hào)量接入調(diào)度,信號(hào)量在兩個(gè)任務(wù)中ping-pong執(zhí)行,計(jì)算總時(shí)間。

注意:①需要減去任務(wù)切換的時(shí)間(switch_overhead);

時(shí)間計(jì)算公式:

telapsed:多次信號(hào)量混洗總時(shí)間

iterations:信號(hào)量混洗的次數(shù)

switch_overhead:切換的時(shí)間

a8e89d38-b520-11ee-8b88-92fbcf53809c.png

代碼:

#include"rst.h"
#include"rst_ipc.h"
#include"rst_btime.h"

staticfloatswitch_overhead=0.0;
staticfloattelapsed=0.0;

staticuint32_tcount=0;
staticuint32_tsem_exe=1;

staticrst_task_idrst_task1=NULL;
staticrst_task_idrst_task2=NULL;

staticrst_sem_idrst_sem=NULL;

staticrst_task_attrrst_task1_attr={
.name="task1",
#ifRST_BIG_NUM_HIGH_PRIORITY
.priority=RST_TASK_HIGHEST_PRIORITY-1,
#else
.priority=RST_TASK_HIGHEST_PRIORITY+1,
#endif
.stack_size=RST_TASK_STACK_SIZE,
};

staticrst_task_attrrst_task2_attr={
.name="task2",
#ifRST_BIG_NUM_HIGH_PRIORITY
.priority=RST_TASK_HIGHEST_PRIORITY-1,
#else
.priority=RST_TASK_HIGHEST_PRIORITY+1,
#endif
.stack_size=RST_TASK_STACK_SIZE,
};

staticvoidrst_task2_func(void*arg);

staticvoidrst_task1_func(void*arg)
{
/*Startuptask2,yieldsoitcanrun*/
rst_task_create(&rst_task2,rst_task2_func,NULL,&rst_task2_attr);
if(rst_task2==NULL)
{
RST_LOGE("RST:task2createfailed");
rst_task_delete(NULL);
return;
}
rst_task_yield();

/*Benchmarkcode*/
for(;count

死鎖解除時(shí)間

描述:

死鎖解除時(shí)間(deadlock breaking time),即系統(tǒng)解開處于死鎖狀態(tài)的多個(gè)任務(wù)所需花費(fèi)的時(shí)間。死鎖解除時(shí)間反映了RTOS解決死鎖的算法的效率。

流程:

原理:創(chuàng)建一個(gè)信號(hào)量和三個(gè)任務(wù),優(yōu)先級(jí)排序:任務(wù)1 < 任務(wù)2 < 任務(wù)3。代碼需要執(zhí)行兩次,第一次信號(hào)量不介入調(diào)度,計(jì)算任務(wù)3切換到任務(wù)2,任務(wù)2切換到任務(wù)1得時(shí)間(即從高優(yōu)先級(jí)切換到低優(yōu)先級(jí)得時(shí)間),第二次多次循環(huán),信號(hào)量接入調(diào)度,任務(wù)3死鎖,任務(wù)2喚醒任務(wù)1,任務(wù)1解除死鎖,通過統(tǒng)計(jì)多次,求平均值。

注意:①需要減去任務(wù)切換的時(shí)間(switch_overhead);

時(shí)間計(jì)算公式:

telapsed:多次死鎖解除總時(shí)間

iterations:死鎖解除的次數(shù)

switch_overhead:任務(wù)切換的時(shí)間

lock_overhead:調(diào)用信號(hào)量持有接口所需要得時(shí)間

a8f4038a-b520-11ee-8b88-92fbcf53809c.png

代碼:

#include"rst.h"
#include"rst_ipc.h"
#include"rst_btime.h"

staticfloatswitch_overhead=0.0;
staticfloatlock_overhead=0.0;
staticfloattelapsed=0.0;

staticuint32_tcount=0;
staticuint32_tsem_exe=1;

staticrst_task_idrst_task1=NULL;
staticrst_task_idrst_task2=NULL;
staticrst_task_idrst_task3=NULL;

staticrst_sem_idrst_sem=NULL;

staticrst_task_attrrst_task1_attr={
.name="task1",
#ifRST_BIG_NUM_HIGH_PRIORITY
.priority=RST_TASK_HIGHEST_PRIORITY-1,
#else
.priority=RST_TASK_HIGHEST_PRIORITY+1,
#endif
.stack_size=RST_TASK_STACK_SIZE,
};

staticrst_task_attrrst_task2_attr={
.name="task2",
#ifRST_BIG_NUM_HIGH_PRIORITY
.priority=RST_TASK_HIGHEST_PRIORITY-3,
#else
.priority=RST_TASK_HIGHEST_PRIORITY+3,
#endif
.stack_size=RST_TASK_STACK_SIZE,
};

staticrst_task_attrrst_task3_attr={
.name="task3",
#ifRST_BIG_NUM_HIGH_PRIORITY
.priority=RST_TASK_HIGHEST_PRIORITY-5,
#else
.priority=RST_TASK_HIGHEST_PRIORITY+5,
#endif
.stack_size=RST_TASK_STACK_SIZE,
};

staticvoidrst_task1_func(void*arg)
{
/*AlltaskshavehadtimetostartuponceTA01isrunning*/

/*Benchmarkcode*/
rst_benchmark_time_init();
for(count=0;count

信息傳輸延遲

描述:

信息傳輸延遲(datagram throuShput time),指一個(gè)任務(wù)通過調(diào)用RTOS的消息隊(duì)列,把數(shù)據(jù)傳送到另一個(gè)任務(wù)去時(shí),每秒可以傳送的字節(jié)數(shù)。

流程:

原理:創(chuàng)建一個(gè)消息隊(duì)列和兩個(gè)任務(wù),優(yōu)先級(jí)排序:任務(wù)1 < 任務(wù)2。任務(wù)1負(fù)責(zé)發(fā)送數(shù)據(jù),任務(wù)2負(fù)責(zé)接收數(shù)據(jù),執(zhí)行多次,求平均值

注意:①需要減去調(diào)用消息隊(duì)列接收函數(shù)的時(shí)間(receive_overhead);

時(shí)間計(jì)算公式:

telapsed:多次信息傳輸總時(shí)間

iterations:死鎖解除的次數(shù)

loop_overhead:多次循環(huán)的時(shí)間

receive_overhead:調(diào)用消息隊(duì)列接收函數(shù)的時(shí)間

a901de6a-b520-11ee-8b88-92fbcf53809c.png

代碼:

#include"rst.h"
#include"rst_ipc.h"
#include"rst_btime.h"

#defineRST_QUEUE_BUFF_SIZE4

staticfloatloop_overhead=0.0;
staticfloatreceive_overhead=0.0;
staticfloattelapsed=0.0;

staticuint32_tcount;

staticrst_task_idrst_task1=NULL;
staticrst_task_idrst_task2=NULL;

staticrst_queue_idrst_queue=NULL;

staticintqueue_buff[RST_QUEUE_BUFF_SIZE]={0};

staticrst_task_attrrst_task1_attr={
.name="task1",
#ifRST_BIG_NUM_HIGH_PRIORITY
.priority=RST_TASK_HIGHEST_PRIORITY-3,
#else
.priority=RST_TASK_HIGHEST_PRIORITY+3,
#endif
.stack_size=RST_TASK_STACK_SIZE,
};

staticrst_task_attrrst_task2_attr={
.name="task2",
#ifRST_BIG_NUM_HIGH_PRIORITY
.priority=RST_TASK_HIGHEST_PRIORITY-1,
#else
.priority=RST_TASK_HIGHEST_PRIORITY+1,
#endif
.stack_size=RST_TASK_STACK_SIZE,
};

staticvoidrst_task2_func(void*arg);

staticvoidrst_task1_func(void*arg)
{
/*Putamessageinthequeuesorecieveoverheadcanbefound.*/
rst_queue_send(rst_queue,
(constvoid*)queue_buff,
(uint32_t)sizeof(queue_buff),
(rst_time_t)RST_WAIT_FOREVER);

/*Startupsecondtask,getpreempted*/
rst_task_create(&rst_task2,rst_task2_func,NULL,&rst_task2_attr);
if(rst_task2==NULL)
{
RST_LOGE("RST:task2createfailed");
rst_task_delete(NULL);
return;
}

for(;count

RTOS對(duì)比結(jié)論

對(duì)比環(huán)境說明

項(xiàng) 說明
芯片 芯片型號(hào):stm32f401
芯片架構(gòu):Cortex-M4
主頻:84 MHz
開發(fā)環(huán)境 KEIL 5.x
工具鏈 ARMCC

對(duì)比結(jié)果說明

對(duì)比項(xiàng) RT-Thread LiteOS FreeRTOS TobudOS
上下文切換 2.594596 us 6.739740 us 1.049049 us 2.343343
任務(wù)搶占 7.360721 us 7.603206 us 2.715431 us 4.523046 us
中斷延遲 2.000000 us 1.000000 us 1.000000 us 1.000000 us
信號(hào)量混洗 23.829000 us 25.588000 us 19.496000 us 18.451000 us
死鎖解除 18.108000 us 18.074000 us 21.522000 us 31.606000 us
信息傳輸延遲 7.749499 us 7.390782 us 7.298597 us 3.446894 us

總結(jié)

作者測(cè)試過程采用定時(shí)器計(jì)數(shù)器是1us,精度上有所欠缺,策略結(jié)果大致對(duì)比

中斷延時(shí)部分,RT-Thread的中斷是有框架的,而LiteOS和FreeRTOS直接使用STM32的HAL庫,時(shí)間差異在框架的耗時(shí)

FreeRTOS在本次的對(duì)比的優(yōu)勢(shì)比較明顯,除了死鎖解除稍微遜色一點(diǎn),其他的持平或由于RT-Thread和LiteOS

LiteOS在本次對(duì)比表現(xiàn)最差,尤其是上下文切換的耗時(shí)是RT-Thread和FreeRTOS的2~3倍。

說明:該框架目前已經(jīng)適配作為RT-Thread的軟件包,可以通過軟件包體驗(yàn)其功能

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5434

    瀏覽量

    124434
  • 嵌入式系統(tǒng)
    +關(guān)注

    關(guān)注

    41

    文章

    3682

    瀏覽量

    131365
  • RTOS
    +關(guān)注

    關(guān)注

    24

    文章

    851

    瀏覽量

    121154
  • 實(shí)時(shí)操作系統(tǒng)

    關(guān)注

    1

    文章

    202

    瀏覽量

    31332

原文標(biāo)題:如何選擇RTOS?使用R-Rhealstone框架評(píng)估

文章出處:【微信號(hào):風(fēng)火輪技術(shù)團(tuán)隊(duì),微信公眾號(hào):風(fēng)火輪技術(shù)團(tuán)隊(duì)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    英特爾(R)動(dòng)態(tài)平臺(tái)和散熱框架解決方案ESIF(8.1.10600.150)類型錯(cuò)誤?

    我的電腦只是隨機(jī)進(jìn)入sllep,因?yàn)閲@最后一個(gè)主要的Windows 10更新...發(fā)生這種情況后我發(fā)現(xiàn)錯(cuò)誤英特爾(R)動(dòng)態(tài)平臺(tái)和熱框架:ESIF(8.1.10600.150)類型:錯(cuò)誤英特爾(R
    發(fā)表于 11-05 11:14

    LiteOS通信模組教程04-深度剖析LiteOS的AT框架

    本帖最后由 小熊派開源社區(qū) 于 2020-2-26 09:11 編輯 1. AT客戶端框架在之前的三篇教程中,我們都是直接使用串口助手發(fā)送AT指令與模組通信,本篇教程就來探索一下
    發(fā)表于 02-26 09:03

    JS應(yīng)用開發(fā)框架組件

    JS應(yīng)用開發(fā)框架組件簡(jiǎn)介目錄接口使用相關(guān)倉簡(jiǎn)介JS應(yīng)用開發(fā)框架,是OpenHarmony為開發(fā)者提供的一套開發(fā)OpenHarmony JS應(yīng)用的開發(fā)框架。其組成如下所示:圖 1 JS應(yīng)用開發(fā)
    發(fā)表于 04-23 18:05

    什么是框架?為什么要有框架

    前言什么是框架?程序框架其實(shí)就類似一個(gè)文件大綱或者模板。因?yàn)閷懗绦蚓秃皖愃朴趯懳恼?,如果沒有大綱或者模板那么你寫起來就會(huì)比較費(fèi)勁。而。為什么要有框架?節(jié)約時(shí)間,減少錯(cuò)誤。因?yàn)閷?duì)于一種類型的程序它們
    發(fā)表于 11-09 07:38

    ARM時(shí)鐘框架與編程實(shí)現(xiàn)概述

    明顯的提升。本次學(xué)習(xí)使用的開發(fā)板為:JZ2440ARM版本為:AMR9一、時(shí)鐘框架概述1.框架結(jié)構(gòu)在講解如何通過程序改變芯片的運(yùn)行時(shí)鐘頻率之前,先搞清楚ARM9時(shí)鐘框架,如下圖所示為S3C2440芯片
    發(fā)表于 05-25 17:31

    基于SSH框架的圖書管理應(yīng)用框架研究張敏

    基于SSH框架的圖書管理應(yīng)用框架研究_張敏
    發(fā)表于 03-17 08:00 ?0次下載

    微軟發(fā)布開源框架驅(qū)動(dòng)程序模塊新框架

    為了方便開發(fā)人員為Windows編寫驅(qū)動(dòng)程序,微軟昨天發(fā)布了一個(gè)開源框架驅(qū)動(dòng)程序模塊框架(DMF)。這個(gè)新框架將允許開發(fā)人員編寫簡(jiǎn)單和結(jié)構(gòu)化的Windows驅(qū)動(dòng)程序框架(WDF)驅(qū)動(dòng)程
    發(fā)表于 08-22 11:37 ?1308次閱讀

    漫談MCU程序框架

    話題1、真的有一種框架是完美的嗎?現(xiàn)在的回答: 沒有一種萬能的框架,只有針對(duì)不同的場(chǎng)景選擇最合適的框架?話題2、如何構(gòu)建一個(gè)基礎(chǔ)框架??...
    發(fā)表于 10-28 13:05 ?14次下載
    漫談MCU程序<b class='flag-5'>框架</b>

    用于實(shí)例分割的Mask R-CNN框架

    是應(yīng)用于每個(gè) RoI 的小型 FCN,以像素到像素的方式預(yù)測(cè)分割掩碼。鑒于 Faster R-CNN 框架,Mask R-CNN 易于實(shí)現(xiàn)和訓(xùn)練,這有助于廣泛的靈活架構(gòu)設(shè)計(jì)。此外,掩碼分支僅增加了少量
    的頭像 發(fā)表于 04-13 10:40 ?3061次閱讀

    八種主流深度學(xué)習(xí)框架的介紹

    、MXNet、PaddlePaddle、Deeplearning4j、ONNX等。 框架名稱:TensorFlow 主要維護(hù)方:Google 支持的語言:C++/Python/Java/R框架名稱
    的頭像 發(fā)表于 04-26 18:45 ?9443次閱讀

    智能上位機(jī)框架

    框架這個(gè)詞,我相信大家都不陌生,C#框架有很多,主流的框架有Json.NET、NPOI、Log4Net、NLog、SuperWebSocket、 SuperSocket、Quartz.NET等等
    發(fā)表于 05-08 11:02 ?2次下載
    智能上位機(jī)<b class='flag-5'>框架</b>

    fastapi框架原理及應(yīng)用

    Starlette 是目前測(cè)試最快的 Python 框架。只有 Uvicorn 超越了它,Uvicorn 不是框架,而是服務(wù)器。   Starlette 提供了所有基本的 Web 微框架功能。但是它不提供自動(dòng)數(shù)據(jù)驗(yàn)證,序列化或
    發(fā)表于 07-18 11:30 ?1100次閱讀

    深度學(xué)習(xí)框架是什么?深度學(xué)習(xí)框架有哪些?

    深度學(xué)習(xí)框架是什么?深度學(xué)習(xí)框架有哪些?? 深度學(xué)習(xí)框架是一種軟件工具,它可以幫助開發(fā)者輕松快速地構(gòu)建和訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)模型。與手動(dòng)編寫代碼相比,深度學(xué)習(xí)框架可以大大減少開發(fā)和調(diào)試的時(shí)
    的頭像 發(fā)表于 08-17 16:03 ?3471次閱讀

    如何選擇RTOS?使用R-Rhealstone框架評(píng)估

    文章描述基于Rhealstone的系統(tǒng)實(shí)時(shí)性的測(cè)量基準(zhǔn)的框架--R-Rhealstone框架。 在嵌入式軟件設(shè)計(jì)和集成中,實(shí)時(shí)多任務(wù)操作系統(tǒng)的性能分析是至關(guān)重要的,它需要保證應(yīng)用的時(shí)間
    的頭像 發(fā)表于 02-20 13:54 ?1419次閱讀
    如何選擇RTOS?使用<b class='flag-5'>R-Rhealstone</b><b class='flag-5'>框架</b>評(píng)估

    框架 - Fusheng R970 RoHS/Halogen測(cè)試報(bào)告

    電子發(fā)燒友網(wǎng)站提供《鉛框架 - Fusheng R970 RoHS/Halogen測(cè)試報(bào)告.pdf》資料免費(fèi)下載
    發(fā)表于 01-31 09:33 ?0次下載
    鉛<b class='flag-5'>框架</b> - Fusheng <b class='flag-5'>R</b>970 RoHS/Halogen測(cè)試報(bào)告