91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

R-Rhealstone框架使用教程

jf_NsPBt3VS ? 來源:風火輪技術團隊 ? 2024-01-18 10:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

Rhealstone

Rhealstone是系統(tǒng)實時性的測量基準之一,Rhealstone性能基準程序是實時系統(tǒng)的六個關鍵操作的時間量進行操作,這六個關鍵操作是:上下文切換時間、任務搶占時間、中斷延遲時間、信號量混洗時間、死鎖解除時間、信息傳輸延遲。這六項操作作為Rhealstone的六個組件,每個組件被單獨測量。然后將經(jīng)驗結果合并為單一的測量值,即是Rhealstone值。

測量Rhealstone值方式:

序號 說明
方式 1 通用Rhealstone
方式 2 每個組件應用于具體應用程序的特定Rhealstone

Rhealstone性能基準程的缺點:

序號 說明
缺點 1 測量的是平均時間,而不是最壞值
缺點 2 后的結論是加權平均值,沒有給出確定權值的依據(jù)

R-Rhealstone框架

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

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

上下文切換時間

描述:

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

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

流程:

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

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

時間計算公式:

total_time:多次上下文切換總時間

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

iterations:切換的次數(shù)

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

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

任務搶占時間

描述:

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

它和任務切換有些類似,但是搶占時間通常花費時間更長。這是因為執(zhí)行中首先要確認喚醒事件,并評估正在運行的任務和請求運行的任務的優(yōu)先級高低,然后才決定是否切換任務。實質(zhì)上,所有的多處理任務可以在執(zhí)行期間動態(tài)分配優(yōu)先級,所以,搶占時間也是衡量實時性能的重要指標。

流程:

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

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

時間計算公式:

total_time:多次任務搶占總時間

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

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

switch_overhead:掛起任務所需要的時間

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

中斷延遲時間

描述:

中斷延遲時間是指從接收到中斷信號到操作系統(tǒng)做出響應,并完成進入中斷服務例程所需要的時間。多任務操作系統(tǒng)中,中斷處理首先進入一個中斷服務的總控程序,然后才進入驅(qū)動程序的ISR。

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

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

流程:

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

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

時間計算公式:

isr_enter_time:多次任務搶占總時間

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

timer_overhead:讀取時間接口的耗時時間

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;
}

信號量混洗時間

描述:

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

流程:

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

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

時間計算公式:

telapsed:多次信號量混洗總時間

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

switch_overhead:切換的時間

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

死鎖解除時間

描述:

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

流程:

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

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

時間計算公式:

telapsed:多次死鎖解除總時間

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

switch_overhead:任務切換的時間

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

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),指一個任務通過調(diào)用RTOS的消息隊列,把數(shù)據(jù)傳送到另一個任務去時,每秒可以傳送的字節(jié)數(shù)。

流程:

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

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

時間計算公式:

telapsed:多次信息傳輸總時間

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

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

receive_overhead:調(diào)用消息隊列接收函數(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對比結論

對比環(huán)境說明

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

對比結果說明

對比項 RT-Thread LiteOS FreeRTOS TobudOS
上下文切換 2.594596 us 6.739740 us 1.049049 us 2.343343
任務搶占 7.360721 us 7.603206 us 2.715431 us 4.523046 us
中斷延遲 2.000000 us 1.000000 us 1.000000 us 1.000000 us
信號量混洗 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

總結

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

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

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

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

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

審核編輯:湯梓紅

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

    關注

    31

    文章

    5608

    瀏覽量

    130013
  • 嵌入式系統(tǒng)

    關注

    41

    文章

    3747

    瀏覽量

    133660
  • RTOS
    +關注

    關注

    25

    文章

    866

    瀏覽量

    123041
  • 實時操作系統(tǒng)

    關注

    1

    文章

    206

    瀏覽量

    31960

原文標題:如何選擇RTOS?使用R-Rhealstone框架評估

文章出處:【微信號:風火輪技術團隊,微信公眾號:風火輪技術團隊】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

    我的電腦只是隨機進入sllep,因為圍繞最后一個主要的Windows 10更新...發(fā)生這種情況后我發(fā)現(xiàn)錯誤英特爾(R)動態(tài)平臺和熱框架:ESIF(8.1.10600.150)類型:錯誤英特爾(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應用開發(fā)框架組件

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

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

    前言什么是框架?程序框架其實就類似一個文件大綱或者模板。因為寫程序就和類似于寫文章,如果沒有大綱或者模板那么你寫起來就會比較費勁。而。為什么要有框架?節(jié)約時間,減少錯誤。因為對于一種類型的程序它們
    發(fā)表于 11-09 07:38

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

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

    基于SSH框架的圖書管理應用框架研究張敏

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

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

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

    漫談MCU程序框架

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

    用于實例分割的Mask R-CNN框架

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

    八種主流深度學習框架的介紹

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

    智能上位機框架

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

    fastapi框架原理及應用

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

    深度學習框架是什么?深度學習框架有哪些?

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

    如何選擇RTOS?使用R-Rhealstone框架評估

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

    框架 - Fusheng R970 RoHS/Halogen測試報告

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