女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當(dāng)前位置:首頁(yè) > > strongerHuang
[導(dǎo)讀]有深入理解RTOS原理,或閱讀過(guò)RTOS源碼的同學(xué)應(yīng)該知道:RTOS實(shí)現(xiàn)任務(wù)間通信通常是由一系列指針進(jìn)行操作實(shí)現(xiàn)的。

有深入理解RTOS原理,或閱讀過(guò)RTOS源碼的同學(xué)應(yīng)該知道:RTOS實(shí)現(xiàn)任務(wù)間通信通常是由一系列指針進(jìn)行操作實(shí)現(xiàn)的。


任務(wù)間通信的“有效數(shù)據(jù)”,其實(shí)也是由指針指向一個(gè)“變量”或“數(shù)組”實(shí)現(xiàn)的。

1.信號(hào)量

信號(hào)量,本質(zhì)是傳遞一個(gè)“事件”。比如:任務(wù)A完成發(fā)送數(shù)據(jù),通過(guò)信號(hào)量通知任務(wù)B。


OSSemPost(EventSem_SendOK);

我們主要想傳遞完成發(fā)送數(shù)據(jù)這個(gè)“事件,進(jìn)一步分析,其實(shí)就是一個(gè)“標(biāo)志”或“變量”。


2.隊(duì)列

隊(duì)列和信號(hào)量原理類(lèi)似有點(diǎn)類(lèi)似,只是這里是“變量”。比如:串口接收完成一幀數(shù)據(jù),通過(guò)隊(duì)列發(fā)送給任務(wù)B.


OSQPost(UARTRcvQueue, RcvBuf);

相比信號(hào)量,隊(duì)列傳遞的數(shù)據(jù)量更大,隊(duì)列傳遞的有效數(shù)據(jù)一般是“數(shù)組”。


還有郵箱,與隊(duì)列類(lèi)似,可以理解為“二維數(shù)組”。


寫(xiě)到這里,你會(huì)發(fā)現(xiàn),不管信號(hào)量,還是隊(duì)列,底層本質(zhì)也是傳遞“變量”“數(shù)組”。


那么問(wèn)題來(lái)了:RTOS任務(wù)間通信為什么不用全局變量?


這個(gè)問(wèn)題比較常見(jiàn),也看到在我的技術(shù)交流群有討論,所以就簡(jiǎn)單來(lái)分享一下看法。


全局變量有什么問(wèn)題?

RTOS任務(wù)間通信為什么不用全局變量?原因在于使用全局變量存在諸多弊端。

1.搶占問(wèn)題
兩個(gè)或多個(gè)任務(wù),都要去“使用”同一個(gè)全局變量,如果不添加任何“互斥”措施,必定會(huì)存在搶占的問(wèn)題。

2.代碼規(guī)范問(wèn)題
整個(gè)項(xiàng)目只有少數(shù)幾個(gè)全局變量沒(méi)什么問(wèn)題,如果是整個(gè)項(xiàng)目有幾十個(gè),甚至幾百個(gè)全局變量,你覺(jué)得這樣的代碼,后面好維護(hù)嗎?

經(jīng)過(guò)多次迭代,代碼只會(huì)越來(lái)越難理解,越來(lái)越難閱讀。

3.耦合性問(wèn)題
全局變量會(huì)導(dǎo)致分層不合理與模塊化編程相違背,你的全局變量沒(méi)有歸屬,既不是任務(wù)A,也不是模塊A,最終可能“任人宰割”導(dǎo)致“夭折”。

4.安全性問(wèn)題
有一句話怎么說(shuō)的呢,全局變量是項(xiàng)目的“罪魁禍?zhǔn)住保?/span>項(xiàng)目做大之后,一旦有小修改,可能就會(huì)引發(fā)大Bug.


全局變量還有很多弊端,這里就不一一描述了,總之一點(diǎn):慎用全局變量。

當(dāng)然,以上描述的問(wèn)題(弊端)都是基于項(xiàng)目中存在多個(gè)變量的情況,如果項(xiàng)目只有1、2個(gè)全局變量,這種不在本文討論范圍之內(nèi)。

信號(hào)量、隊(duì)列通信原理

大部分RTOS的信號(hào)量、隊(duì)列都是使用指針、結(jié)構(gòu)體、數(shù)組等,結(jié)合系統(tǒng)進(jìn)行“封裝”,使任務(wù)間通信更加有效、安全,同時(shí)也遵循“高內(nèi)聚低耦合”的原則。

比如ucos的信號(hào)量post:
INT8U OSSemPost (OS_EVENT *pevent){#if OS_CRITICAL_METHOD == 3u /* Allocate storage for CPU status register      */ OS_CPU_SR  cpu_sr = 0u;#endif #if OS_ARG_CHK_EN > 0u if (pevent == (OS_EVENT *)0) { /* Validate 'pevent'                             */ return (OS_ERR_PEVENT_NULL); }#endif if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type                     */ return (OS_ERR_EVENT_TYPE); } OS_ENTER_CRITICAL(); if (pevent->OSEventGrp != 0u) { /* See if any task waiting for semaphore         */ /* Ready HPT waiting on event                    */ (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM, OS_STAT_PEND_OK); OS_EXIT_CRITICAL(); OS_Sched(); /* Find HPT ready to run                         */ return (OS_ERR_NONE); } if (pevent->OSEventCnt < 65535u) { /* Make sure semaphore will not overflow         */ pevent->OSEventCnt++; /* Increment semaphore count to register event   */ OS_EXIT_CRITICAL(); return (OS_ERR_NONE); } OS_EXIT_CRITICAL(); /* Semaphore value has reached its maximum       */ return (OS_ERR_SEM_OVF);}


我們需要傳遞的有效信息雖然只有一個(gè)變量,但它會(huì)做“臨界區(qū)”管理,以及預(yù)判一些錯(cuò)誤的情況等。


最后,RTOS源碼也可以算是一個(gè)優(yōu)秀的項(xiàng)目,特別是目前普及率比較高、裝機(jī)量比較多的RTOS,比如μC/OS、FreeRTOS、RT-Thread、ThreadX等。


最最后,有時(shí)間的小伙伴可以閱讀一下RTOS源碼,RTOS內(nèi)核我推薦μC/OS,閱讀源碼能讓你掌握一些軟件架構(gòu)的知識(shí),也能讓你明白一些開(kāi)發(fā)過(guò)程種常見(jiàn)的問(wèn)題。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

在嵌入式系統(tǒng)開(kāi)發(fā)中,實(shí)時(shí)操作系統(tǒng)(RTOS)的任務(wù)調(diào)度算法直接影響系統(tǒng)的響應(yīng)速度和資源利用率。時(shí)間片輪轉(zhuǎn)(Round-Robin, RR)作為一種經(jīng)典的公平調(diào)度算法,通過(guò)為每個(gè)任務(wù)分配固定時(shí)間片實(shí)現(xiàn)多任務(wù)并發(fā)執(zhí)行。本文將...

關(guān)鍵字: 實(shí)時(shí)操作系統(tǒng) RTOS C語(yǔ)言

在計(jì)算機(jī)編程領(lǐng)域,指針是C/C++等語(yǔ)言中強(qiáng)大而靈活的工具,而指針?biāo)阈g(shù)則是挖掘指針潛力的關(guān)鍵技術(shù)之一。其中,利用偏移量進(jìn)行數(shù)組操作是指針?biāo)阈g(shù)的典型應(yīng)用,它能顯著提升代碼的執(zhí)行效率,為高性能計(jì)算開(kāi)辟新路徑。

關(guān)鍵字: 指針?biāo)阈g(shù) 指針 C語(yǔ)言

RTOS :RTOS的核心優(yōu)勢(shì)在于其實(shí)時(shí)性。它采用搶占式調(diào)度策略,確保高優(yōu)先級(jí)任務(wù)能夠立即獲得CPU資源,從而在最短時(shí)間內(nèi)完成處理。RTOS的實(shí)時(shí)性是通過(guò)嚴(yán)格的時(shí)間管理和任務(wù)調(diào)度算法實(shí)現(xiàn)的,能夠滿足對(duì)時(shí)間敏感性要求極高的...

關(guān)鍵字: Linux RTOS

在實(shí)時(shí)操作系統(tǒng)(RTOS)開(kāi)發(fā)中,C語(yǔ)言憑借其底層控制能力和高效性,成為實(shí)現(xiàn)任務(wù)調(diào)度、中斷處理和資源管理的核心工具。RTOS的核心挑戰(zhàn)在于滿足嚴(yán)格的實(shí)時(shí)性約束,確保關(guān)鍵任務(wù)在規(guī)定時(shí)間內(nèi)完成。本文將從任務(wù)搶占機(jī)制、中斷延遲...

關(guān)鍵字: C語(yǔ)言 RTOS

隨著嵌入式系統(tǒng)對(duì)實(shí)時(shí)性、多任務(wù)處理能力的需求日益增長(zhǎng),實(shí)時(shí)操作系統(tǒng)(RTOS)在數(shù)字信號(hào)處理器(DSP)中的移植與性能優(yōu)化成為關(guān)鍵技術(shù)課題。DSP以其高效的數(shù)值計(jì)算能力和并行處理特性,廣泛應(yīng)用于通信、圖像處理、工業(yè)控制等...

關(guān)鍵字: RTOS DSP

數(shù)組和指針在使用上還有一些區(qū)別。首先,數(shù)組名代表整個(gè)數(shù)組,可以用來(lái)初始化其他數(shù)組,但數(shù)組名不能被賦值或自增。其次,數(shù)組在函數(shù)調(diào)用時(shí),傳遞的是數(shù)組的地址,而不是整個(gè)數(shù)組。指針可以被賦值或自增。指針還可以用來(lái)動(dòng)態(tài)分配內(nèi)存空間...

關(guān)鍵字: 數(shù)組 指針
關(guān)閉