国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

嵌入式實時操作系統(tǒng)的設計與開發(fā)(信號量學習)

這篇具有很好參考價值的文章主要介紹了嵌入式實時操作系統(tǒng)的設計與開發(fā)(信號量學習)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

信號量

除了臨界點機制、互斥量機制可實現(xiàn)臨界資源的互斥訪問外,信號量(Semaphore)是另一選擇。

信號量與互斥量的區(qū)別

  • 對于互斥量來說,主要應用于臨界資源的互斥訪問,并且能夠有效地避免優(yōu)先級反轉問題。
  • 對于信號量而言,它雖然也能用于臨界資源的互斥訪問,但是不能處理優(yōu)先級反轉問題。

也正因為信號量沒有考慮優(yōu)先級反轉問題,所以相對于互斥量來說是一種輕量級的實現(xiàn)方式,比互斥量耗費更少的CPU資源。
此外,信號量除了用于互斥,還可以用于處理不同線程之間的同步問題,而互斥量卻不行。

針對上述情況,有三種類型的信號量,按照功能來分,可以分為線程對臨界資源互斥訪問的互斥信號量、用于線程間同步的信號量、控制系統(tǒng)中臨界資源的多個實例使用的計數(shù)信號量。

用于同步的信號量其初始值在創(chuàng)建信號量時設置為0,表示同步事件尚未發(fā)生。
臨界資源互斥的信號量初始值為1,表明當前沒有任務獲取該信號量。
用于控制系統(tǒng)中臨界資源的多個實例使用的計數(shù)信號量其初始值為n,表明需要管理的實例個數(shù)最大數(shù)為n,這樣的信號量也稱為計數(shù)信號量。

以下例子,通過一個計數(shù)信號量和互斥信號量實現(xiàn)對一個有界緩沖使用的控制,這就是“生產者與消費者”問題。

  • 計數(shù)信號量FULL表示已經被填充了的數(shù)據(jù)項目。
  • 計數(shù)信號量EMPTY表示空閑數(shù)據(jù)項數(shù)目。
    以上的取值范圍均為(0,n-1),其初始值分別為0,n-1。
    由于有界緩沖區(qū)是共享資源,還需要一個互斥信號量MUTEX控制生產者線程與消費者線程對它的互斥訪問,其初始值為1。

創(chuàng)建信號量

acoral_evt_t *acoral_sem_create(unsigned int semNum)
{
	acoral_evt_t *evt;
	evt = acoral_alloc_evt();
	if (NULL == evt)
	{
		return NULL;
	}
	semNum = 1 - semNum;
	evt->count = semNum;
	evt->type = ACORAL_EVENT_SEM;
	evt->data = NULL;
	acoral_evt_init(evt);
	return evt;
}

初始化信號量。當靜態(tài)定義信號量而不是采用指針形式定義時,內存空間已經在定義時分配,此時應當調用初始化函數(shù)acoral_sem_init()對定義過的信號量進行初始化。

aCoralSemRetValEnum acoral_sem_init(acoral_evt_t *evt,unsigned int semNum)
{
	if(NULL == evt)
	{
		return SEM_ERR_NULL;
	}
	semNum = 1 - semNum;
	evt->count = semNum;
	evt->type = ACORAL_EVENT_SEM;
	evt->data = NULL;
	acoral_evt_init(evt);
	return SEM_SUCCED;
}

與互斥量初始化類似,就是為acoral_evt_t各個成員賦值。
這里需要提及的是count初始化,從傳入的參數(shù)semNum可知,該變量用來表示當前信號量所控制的臨界資源的實例的數(shù)量,但在具體實現(xiàn)時,并不是和大家想象的數(shù)字一樣,如1代表有1個資源,2代表有2個資源…
在實現(xiàn)時,實例數(shù)量是用“1-semNum”來表示的,此時0代表有1個資源,-1代表有兩個資源,1代表已經沒有資源,且有1個線程在等待該資源實例。

申請信號量。申請信號量時需要傳入兩個參數(shù):先前創(chuàng)建的信號量的地址,超時處理的時間。

acoralSemRetValEnum acoral_sem_pend(acoral_evt_t *evt, unsigned int timeout)
{
	acoral_thread_t *cur = acoral_cur_thread;
	if(acoral_intr_nesting)
	{
		return SEM_ERR_INTR;
	}
	if(NULL == evt)
	{
		return SEM_ERR_NULL;
	}
	if(ACORAL_EVENT_SEM != evt->type)
	{
		return SEM_ERR_TYPE;
	}

	//計算信號量處理
	acoral_enter_critical();
	/*判斷是否還有可用資源,從前面的介紹可知,這里的SEM_RES_AVAI其實就是0,如果count數(shù)目小于等于0,代表有資源實例。如果count大于0,代表在等待的有多少個線程。如果有可用的資源實例,讓count的數(shù)目加一后退出,表示成功申請信號量。*/
	if((char)evt->count <= SEM_RES_AVAI)
	{
		evt->count++;
		acoral_exit_critical();
		return SEM_SUCCED;
	}
	//如果無可用的資源實例,讓count的數(shù)目加一后,再將自身掛起,重新調度線程
	evt->count++;
	acoral_unrdy_thread(cur);
	if(timeout > 0)
	{
		cur->delay = TIME_TO_TICKS(timeout);
		timeout_queue_add(cur);
	}
	acoral_evt_queue_add(evt, cur);
	acoral_exit_critical();
	acoral_sched();
	acoral_enter_critical();

	//如果某個線程等待某個資源實例而又無法獲取,它將被掛起,而若它希望被掛起的時間小于一個設定值timeout,還需將TCB的成員更新為timeout,并掛載到延遲隊列中,如果延遲時間到,將進行相應處理
	if(timeout > 0 && cur->Delay <= 0)
	{
		evt->count--;
		acoral_evt_queue_Del(cur);
		acoral_exit_critical();
		return SEM_ERR_TIMEOUT;
	}
	timeout_queue_del(cur);
	acoral_exit_critical();
	return SEM_SUCCED;
}

釋放信號量

acoralSemRetValEnum acoral_sem_post(acoral_evt_t *evt)
{
	acoral_thread_t *thread;

	/* 參數(shù)檢測*/
	if (NULL == evt)
	{
		return SEM_ERR_NULL; /* error*/
	}
	if (ACORAL_EVENT_SEM != evt->type)
	{
		return SEM_ERR_TYPE;
	}

	acoral_enter_critical();
	if((char)evt->count <= SEM_RES_NOVAI)
	{
		evt->count--;
		acoral_exit_critical();
		return SEM_SUCCED;
	}
	evt->count--;
	thread = acoral_evt_high_thread(evt);
	if(thread == NULL)
	{
		acoral_print("Err Sem post\n");
		acoral_Exit_critical();
		return SEM_ERR_UNDEF;
	}
	timeout_queue_del(thread);
	acoral_evt_queue_del(thread);
	acoral_rdy_thread(thread);
	acoral_exit_critical();
	acoral_sched();
	return SEM_SUCCED;
}

同步機制

信號量機制不僅可以實現(xiàn)臨界資源互斥訪問,控制系統(tǒng)中臨界資源多個實例的使用,還可以用于維護線程之間、線程和中斷之間的同步。

當信號量用來實現(xiàn)同步時,其初始值為0,如一個線程正等待某個I/O操作,當該I/O操作完成后,中斷服務程序發(fā)出信號量,該線程得到信號量后才能繼續(xù)往下執(zhí)行。
某個線程將一直處于等待狀態(tài),除非獲取了其它線程發(fā)給它的信號量。

用于互斥的信號量初始值在創(chuàng)建時設置為1,此時1-semNum=0,是小于等于0的,表明當前沒有線程獲取該信號量。
而用于同步的信號量初始值在信號量創(chuàng)建時設置為0,此時1-semNum=1,是大于1的,表明同步尚未發(fā)生。

同步信號量的實現(xiàn)和互斥信號量是一樣的,只是創(chuàng)建時傳入的參數(shù)決定了是用于同步還是用于互斥。文章來源地址http://www.zghlxwxcb.cn/news/detail-719887.html

到了這里,關于嵌入式實時操作系統(tǒng)的設計與開發(fā)(信號量學習)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【小黑嵌入式系統(tǒng)第十課】μC/OS-III概況——實時操作系統(tǒng)的特點、基本概念(內核&任務&中斷)、與硬件的關系&實現(xiàn)

    【小黑嵌入式系統(tǒng)第十課】μC/OS-III概況——實時操作系統(tǒng)的特點、基本概念(內核&任務&中斷)、與硬件的關系&實現(xiàn)

    上一課: 【小黑嵌入式系統(tǒng)第九課】PSoC 5LP第一個實驗——LED、字符型LCD顯示實驗 下一課: 【小黑嵌入式系統(tǒng)第十一課】μC/OS-III程序設計基礎(一)——任務設計、任務管理(創(chuàng)建基本狀態(tài)內部任務)、任務調度、系統(tǒng)函數(shù) 一. 凡從事嵌入式系統(tǒng)開發(fā)工作的人,必須對嵌入

    2024年02月05日
    瀏覽(25)
  • 嵌入式操作系統(tǒng)(嵌入式學習)

    嵌入式操作系統(tǒng)(嵌入式學習)

    嵌入式操作系統(tǒng)是一種專門設計和優(yōu)化用于嵌入式系統(tǒng)的操作系統(tǒng)。它是在資源受限的嵌入式設備上運行的操作系統(tǒng),如微控制器、嵌入式處理器和系統(tǒng)芯片等。 嵌入式操作系統(tǒng)的主要目標是提供對硬件資源的有效管理和對應用程序的調度,以實現(xiàn)系統(tǒng)的可靠性、實時性和效

    2024年02月10日
    瀏覽(22)
  • 嵌入式操作系統(tǒng)--籃球記分計時系統(tǒng)

    嵌入式操作系統(tǒng)--籃球記分計時系統(tǒng)

    題目:籃球記分計時系統(tǒng) 一 ? 實訓任務 利用Qt-Creator編程設計一個籃球記分計時界面開發(fā)系統(tǒng),實現(xiàn)24秒一節(jié)次的倒計時籃球記 分牌。 二 ? 實訓要求 1 、基本要求 (1)按照題目要求使用Qt編程,獨立設計系統(tǒng)所需界面,實現(xiàn)24秒倒計時的籃球記分計 時界面開發(fā)系統(tǒng)。 (2)

    2024年02月09日
    瀏覽(18)
  • ToBeWritten之嵌入式操作系統(tǒng)

    ToBeWritten之嵌入式操作系統(tǒng)

    也許每個人出生的時候都以為這世界都是為他一個人而存在的,當他發(fā)現(xiàn)自己錯的時候,他便開始長大 少走了彎路,也就錯過了風景,無論如何,感謝經歷 轉移發(fā)布平臺通知:將不再在CSDN博客發(fā)布新文章,敬請移步知識星球 感謝大家一直以來對我CSDN博客的關注和支持,但

    2023年04月08日
    瀏覽(20)
  • 主流嵌入式操作系統(tǒng)有哪些

    主流嵌入式操作系統(tǒng)有哪些

    嵌入式操作系統(tǒng)EOS(Embedded OperatingSystem)是一種用途廣泛的系統(tǒng)軟件,過去它主要應用于工業(yè)控制和國防系統(tǒng)領域。常見的嵌入式操作系統(tǒng)有wince、PALM OS、linux、Android、FreeRTOS。 WINDOWS CE是微軟開發(fā)的一個開放的、可升級的32位嵌入式操作系統(tǒng),是基于掌上型電腦類的電子設備操

    2024年02月06日
    瀏覽(17)
  • 【小黑嵌入式系統(tǒng)第二課】嵌入式系統(tǒng)的概述(二)——外圍設備、處理器、ARM、操作系統(tǒng)

    【小黑嵌入式系統(tǒng)第二課】嵌入式系統(tǒng)的概述(二)——外圍設備、處理器、ARM、操作系統(tǒng)

    上一課: 【小黑嵌入式系統(tǒng)第一課】嵌入式系統(tǒng)的概述(一)——概念、特點、發(fā)展、應用 下一課: 【小黑嵌入式系統(tǒng)第三課】嵌入式系統(tǒng)硬件平臺(一)——概述、總線、存儲設備(RAMROMFLASH) 前些天發(fā)現(xiàn)了一個巨牛的人工智能學習網(wǎng)站,通俗易懂,風趣幽默,忍不住分享

    2024年02月08日
    瀏覽(23)
  • 【嵌入式操作系統(tǒng)】實驗2:GPIO編程及應用

    【嵌入式操作系統(tǒng)】實驗2:GPIO編程及應用

    熟悉STM32 模塊的GPIO硬件連接; 掌握GPIO初始化配置; 掌握GPIO控制板上LED燈編程; 熟練KEIL 工程的配置,編譯,調試,下載。 操作系統(tǒng):WINDOWS 10 開發(fā)工具:Keil 4,UartAssists 實驗設備:125K RFID讀寫器模塊、JLink在線調試器、電源、PC ??運行程序后,LED燈D7、D8按照全熄滅、亮

    2024年02月09日
    瀏覽(24)
  • C語言嵌入式系統(tǒng)編程注意事項之內存操作

    C語言嵌入式系統(tǒng)編程注意事項之內存操作

    在嵌入式系統(tǒng)的編程中,常常要求在特定的內存單元讀寫內容,匯編有對應的MOV指令,而除C/C++以外的其它編程語言基本沒有直接訪問絕對地址的能力 數(shù)據(jù)指針 在嵌入式系統(tǒng)的編程中,常常要求在特定的內存單元讀寫內容,匯編有對應的MOV指令,而除C/C++以外的其它編程語言

    2024年02月09日
    瀏覽(25)
  • 從何著手OpenHarmony?從這里開始認識嵌入式開源鴻蒙操作系統(tǒng)

    從何著手OpenHarmony?從這里開始認識嵌入式開源鴻蒙操作系統(tǒng)

    首先,我們需要知道HarmonyOS與OpenHarmony是不同的概念,我們需要知道它們的區(qū)別: ????????HarmonyOS是華為獨家開發(fā)的,但華為在2020、2021年分兩次 將HarmonyOS的基礎能力全部捐獻給了開放原子開源基金會,形成了OpenHarmony開源項目 ,華為對開源鴻蒙沒有控制權,當然華為仍將

    2024年02月04日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包