軟件架構之嵌入式系統設計(2)

軟件架構之嵌入式系統設計(2)

    • 12.4 嵌入式網絡系統
      • 12.4.1 現場總線網
      • 12.4.2 家庭信息網
      • 11.4.3 無線數據通信網
      • 12.4.4 嵌入式 Internet
    • 12.5 嵌入式數據庫管理系統
      • 12.5.1 使用環境的特點
      • 12.5.2 系統組成與關鍵技術
    • 12.6 實時系統與嵌入式操作系統
      • 12.6.1 嵌入式系統的實時概念
      • 12.6.2 嵌入式操作系統概述
      • 12.6.3 實時嵌入式操作系統
      • 12.6.4 主流嵌入式操作系統介紹
    • 12.7 嵌入式系統開發設計
      • 12.7.1 嵌入式系統設計概述
      • 12.7.2 開發模型與設計流程
      • 12.7.3 嵌入式系統設計的核心技術
      • 12.7.4 嵌入式開發設計環境
      • 12.7.5 嵌入式軟件設計模型
      • 12.7.6 需求分析
      • 12.7.7 系統設計
      • 12.7.8 系統集成與測試

12.4 嵌入式網絡系統

嵌入式網絡是用于連接各種嵌入式系統,使之可以互相傳遞信息、共享資源的網絡系統。嵌入式系統在不同的場合采用不同的連接技術,如在家庭居室采用家庭信息網,在工業自動化領域采用現場總線,在移動信息設備等嵌入式系統則采用移動通信網,此外,還有一些專用連接技術用于連接嵌入式系統。

12.4.1 現場總線網

現場總線(FieldBus)是 20 世紀 80 年代中期繼模擬儀表控制系統、集中式數字控制系統及集散控制系統之后,發展起來的一項計算機控制技術,它是當今自動化控制領域技術發展的熱點之一,通常也被稱作工業自動化領域的計算機局域網。

現場總線是一種將數字傳感器、變換器、工業儀表及控制執行機構等現場設備與工業過程控制單元、現場操作站等互相連接而成的網絡。它具有全數字化、分散、雙向傳輸和多分支的特點,是工業控制網絡向現場級發展的產物。

現場總線是一種低帶寬的底層控制網絡,位于生產控制和網絡結構的底層,因此也被稱為底層網(Infranet)。它主要應用于生產現場,在測量控制設備之間實現雙向的、串行的、多節點的數字通信。

現場總線控制系統(Field Control System,FCS)是運用現場總線連接各控制器及儀表設備而構成的控制系統,該控制系統將控制功能徹底下放到現場,降低了安裝成本和維護費用。實際上 FCS 是一種開放的、具有互操作性的、徹底分散的分布式控制系統。

嵌入式現場控制系統將專用微處理器置入傳統的測量控制儀表,使其具備數字計算和數字通信能力。它采用雙絞線、電力線或光纖等作為總線,把多個測量控制儀表連接成網絡,并按照規范標準的通信協議,在位于現場的多個微機化測量控制設備之間及現場儀表與遠程監控計算機之間,實現數據傳輸與信息交換,形成了各種適用于實際需要的自動控制系統。簡言之,現場總線控制系統把單個分散的測量控制設備變成網絡節點,以現場總線為紐帶,使這些分散的設備成為可以互相溝通信息共同完成自動控制任務的網絡系統。借助于現場總線技術,傳統上的單個分散控制設備變成了互相溝通、協同工作的整體。

12.4.2 家庭信息網

家庭信息網是一種把家庭范圍內的個人計算機、家用電器、水、電、氣儀表、照明設備和網絡設備、安全設備連接在一起的局域網。其主要功能是集中控制上述設備并將其接入Internet,以共享網絡資源和服務。此外,家庭信息網還可以擴展至整幢住宅甚至整個社區,成為智能住宅小區和智能社會的基礎。 在家庭信息網絡系統中,所有的家庭設備都是智能化的,包括家用電器、水、電、氣儀表,以及照明設備等。它們能夠互相通信,并通過家庭網關接入 Internet。家庭信息網絡的實現為人們提供了更加安全、便捷、舒適的家庭環境。如主人外出時,大門自動關閉、上鎖,監視系統自動開啟,家中出現異常情況能夠自動通知主人,對家中各種設備能夠隨時隨地進行控制,儀表數據能夠自動上傳等。

家庭信息網需要解決兩個基本問題:
(1)如何將家用電器,水、電、氣儀表,照明設備等互相連接起來。
(2)如何實現這些連在一起的設備間的互操作,即家庭信息網上的設備可以在需要的時候自動請求服務,相關設備可以提供服務或接受請求并對其進行處理。家庭信息網可以采用不同的拓撲結構,如總線型、星型結構等。家庭信息網內部還可以進一步劃分出若干控制子網和數據子網,其中控制子網類似于現場總線,是一種帶寬不高、主要用于發送和接收控制信息的網絡。而數據子網對帶寬的要求則較高,連接在其上的設備需要傳送大量的數據信息。

11.4.3 無線數據通信網

近年來,隨著移動電話通信的迅速發展,個人計算機的迅速普及,多種便攜式計算機,例如膝上型計算機、筆記本計算機、手持式計算機等迅速增多,固定計算機之間的數據通信已不能滿足需要。人們希望能隨時隨地進行數據信息的傳送和交換,于是數據通信傳輸媒體開始從有線擴展到無線,出現了無線移動數據通信。 無線數據通信網是一種通過無線電波傳送數據的網絡系統。它是在有線數據通信的基礎上發展起來的,能實現移動狀態下的數據通信。通過無線數據通信網,智能手機、PDA 及
筆記本計算機可以互相傳遞數據信息,并接入 Internet。無線數據通信網分為短程無線網和無線 Internet。短程無線網主要包括 802.11、藍牙、IrDA 及 HomeRF 等。無線 Internet 或移動 Internet 主要采用兩種無線連接技術:一種是移動無線接入技術,例如,GSM、GPRS、CDPD(Cellular Digital Packet Data)等;另一種是固定無線接入技術,包括微波、擴頻通信、衛星及無線光傳輸等。

12.4.4 嵌入式 Internet

隨著 Internet 和嵌入式技術的飛速發展,越來越多的信息電器,如 Web 可視電話、機頂盒以及信息家電等嵌入式系統產品都要求與 Internet 連接,來共享 Internet 所提供的方便、快捷、無處不在的信息資源和服務,即嵌入式 Internet 技術。嵌入式 Internet 技術在智能交通、家政系統、家庭自動化、工業自動化、POS 及電子商務等領域具有廣闊的應用前景。

1.嵌入式 Internet 的接入方式
嵌入式設備上集成了 TCP/IP 協議棧及相關軟件,這類設備可以作為 Internet 的一個節點,分配有 IP 地址,與 Internet 直接互聯。這種接入方式的特點是:

  • 設備可以直接連接到 Internet,對 Internet 進行透明訪問;
  • 不需要專門的接入設備;
  • 設備的協議標準化;
  • 需要的處理器性能和資源相對較高;
  • 需要占用 IP 資源,由于目前 IPv4 資源緊張,這種方案在 IPv6 網中可能更現實。
  • 通過網關接入 Internet,即采用瘦設備方案,設備不直接接入 Internet,不需要復雜的TCP/IP 協議全集,而是通過接入設備接入 Internet。如嵌入式微型網互聯技術(Embedded Micro Internet-working Technology,EMIT)便是一種將嵌入式設備接入 Internet 的技術。這種接入方式的特點是:
  • 對接入設備的性能和資源要求較低;
    -接入設備的協議棧開銷較小;
  • 不需要分配合法的 IP 地址;
  • 可以降低系統的整體成本;
    -設備可以實現多樣化、小型化。

2.嵌入式 TCP/IP 協議棧
嵌入式 TCP/IP 協議棧完成的功能與完整的 TCP/IP 協議棧是相同的,但是由于嵌入式系統的資源限制,嵌入式協議棧的一些指標和接口等與普通的協議棧可能有所不同。

(1)嵌入式協議棧的調用接口與普通的協議棧不同。普通協議棧的套接字接口是標準的,應用軟件的兼容性好,但是,實現標準化接口的代碼開銷、處理和存儲開銷都是巨大的。因此,多數廠商在將標準的協議棧接口移植到嵌入式系統上的時候,都做了不同程度的修改簡化,建立了高效率的專用協議棧,它們所提供的 API 與通用協議棧的 API 不一定完全一致。

(2)嵌入式協議棧的可裁剪性。嵌入式協議棧多數是模塊化的,如果存儲器的空間有限,可以在需要時進行動態安裝,并且都省去了接口轉發、全套的 Internet 服務工具等幾個針對嵌入式系統非必需的部分。

(3)嵌入式協議棧的平臺兼容性。一般協議棧與操作系統的結合緊密,大多數協議棧是在操作系統內核中實現的。協議棧的實現依賴于操作系統提供的服務,移植性較差。嵌入式協議棧的實現一般對操作系統的依賴性不大,便于移植。許多商業化的嵌入式協議棧支持多種操作系統平臺。

(4)嵌入式協議棧的高效率。嵌入式協議棧的實現通常占用更少的空間,需要的數據存儲器更小,代碼效率高,從而降低了對處理器性能的要求。

12.5 嵌入式數據庫管理系統

隨著嵌入式技術的發展,嵌入式數據庫逐步走向應用。本質上,嵌入式數據庫是由通用數據庫發展而來的,在各種嵌入式設備上或移動設備上運行,在嵌入式系統中更顯示出其優越性,由于受到嵌入式系統本身應用環境的制約,嵌入式數據庫有著與通用數據庫不同的特點。

通常,嵌入式數據庫管理系統就是在嵌入式設備上使用的數據庫管理系統。由于用到嵌入式數據庫管理系統的多是移動信息設備,諸如掌上電腦、PDA、車載設備等移動通信設備,位置固定的嵌入式設備很少用到,所以,嵌入式數據庫也稱為移動數據庫或嵌入式移動數據庫。其作用主要是解決移動計算環境下數據的管理問題,移動數據庫是移動計算環境中的分
布式數據庫。

在嵌入式系統中引入數據庫技術,主要是因為直接在嵌入式操作系統或裸機之上開發信息管理應用程序存在如下缺點:
(1)所有的應用都要重復進行數據的管理工作,增加了開發難度和代價。
(2)各應用之間的數據共享性差。
(3)應用軟件的獨立性、可移植性差,可重用度低。
在嵌入式系統中引入數據庫管理系統可以在很大程度上解決上述問題,提高應用系統的開發效率和可移植性。

12.5.1 使用環境的特點

嵌入式數據庫系統是一個包含嵌入式數據庫管理系統在內的跨越移動通信設備、工作站或臺式機及數據服務器的綜合系統,系統所具有的這個特點及該系統的使用環境對嵌入式數據庫管理系統有著較大的影響,直接影響到嵌入式數據庫管理系統的結構。其使用環境的特點可以簡單地歸納如下:
(1)設備隨時移動性,嵌入式數據庫主要用于移動信息設備上,設備的位置經常隨使用者一起移動。

(2)網絡頻繁斷接,移動設備或移動終端在使用的過程中,位置經常發生變化,同時也受到使用方式、電源、無線通信及網絡條件等因素的影響。所以,一般并不持續保持網絡連接,而是經常主動或被動地間歇性斷接和連接。

(3)網絡條件多樣化,由于移動信息設備位置的經常變化,所以移動信息設備同數據服務器在不同的時間可能通過不同的網絡系統連接。這些網絡在網絡帶寬、通信代價、網絡延遲、服務質量等方面可能有所差異。

(4)通信能力不對稱,由于受到移動設備的資源限制,移動設備與服務器之間的網絡通信能力是非對稱的。移動設備的發送能力都非常有限,使得數據服務器到移動設備的下行通信帶寬和移動設備到數據服務器之間的上行帶寬相差很大。

12.5.2 系統組成與關鍵技術

一個完整的嵌入式數據庫管理系統由若干子系統組成,包括主數據庫管理系統、同步服務器、嵌入式數據庫管理系統、連接網絡等幾個子系統,如圖 12-6 所示。
在這里插入圖片描述
(1)嵌入式數據庫管理系統。嵌入式數據庫管理系統是一個功能獨立的單用戶數據庫管理系統。它可以獨立于同步服務器和主數據庫管理系統運行,對嵌入式系統中的數據進行管理,也可以通過同步服務器連接到主服務器上,對主數據庫中的數據進行操作,還可以通過多種方式進行數據同步。

(2)同步服務器。同步服務器是嵌入式數據庫和主數據庫之間的連接樞紐,保證嵌入式數據庫和主數據庫中數據的一致性。

(3)數據服務器。數據服務器的主數據庫及數據庫管理系統可以采用 Oracle 或 Sybase等大型通用數據庫系統。

(4)連接網絡。主數據庫服務器和同步服務器之間一般通過高帶寬、低延遲的固定網絡進行連接。移動設備和同步服務器之間的連接根據設備的具體情況可以是無線局域網、紅外連接、通用串行線或公眾網等。

1.嵌入式移動數據庫在應用中的關鍵
嵌入式移動數據庫在實際應用中必須解決好數據的一致性(復制性)、高效的事務處理和數據的安全性等問題。

(1)數據的一致性。嵌入式移動數據庫的一個顯著特點是,移動數據終端之間及與同步服務器之間的連接是一種弱連接,即低帶寬、長延遲、不穩定和經常性斷接。為了支持用戶在弱環境下對數據庫的操作,現在普遍采用樂觀復制方法(Optimistic Replication 或 Lazy Replication)允許用戶對本地緩存上的數據副本進行操作。待網絡重新連接后再與數據庫服務器或其他移動數據終端交換數據修改信息,并通過沖突檢測和協調來恢復數據的一致性。

(2)高效的事務處理。移動事務處理要在移動環境中頻繁的、可預見的斷接情況下進行。為了保證活動事務的順利完成,必須設計和實現新的事務管理策略和算法。根據網絡連接情況來確定事務處理的優先級,網絡連接速度高的事務請求優先處理;
根據操作時間來確定事務是否遷移,即長時間的事務操作將全部遷移到服務器上執行,無須保證網絡的一直暢通;根據數據量的大小來確定事務是上載執行還是下載數據副本執行后上載;完善的日志記錄策略;事務處理過程中,網絡斷接處理時采用服務器發現機制還是采用客戶端聲明機制;事務移動(如:位置相關查詢)過程中的用戶位置屬性的實時更新。

(3)數據的安全性。許多應用領域的嵌入式設備是系統中數據管理或處理的關鍵設備,因此嵌入式設備上的數據庫系統對存取權限的控制較嚴格。同時,許多嵌入式設備具有較高的移動性、便攜性和非固定的工作環境,也帶來潛在的不安全因素。此外,某些數據的個人隱私性又很高,因此在防止碰撞、磁場干擾、遺失、盜竊等方面對個人數據的安全性需要提供充分的保證。保證數據安全的主要措施是:對移動終端進行認證,防止非法終端的欺騙性接入;對無線通信進行加密,防止數據信息泄漏;對下載的數據副本加密存儲,以防移動終端物理丟失后的數據泄密。

2.移動數據庫管理系統的特性
移動 DBMS 的計算環境是傳統分布式 DBMS 的擴展,它可以看做客戶端與固定服務器結點動態連接的分布式系統。因此移動計算環境中的數據庫管理系統是一種動態分布式數據庫管理系統。由于嵌入式移動數據庫管理系統在移動計算的環境下應用在嵌入式操作系統之上,所以它有自己的特點和功能需求:

(1)微核結構,便于實現嵌入式功能。考慮到嵌入式設備的資源有限,嵌入式移動 DBMS 應采用微型化技術實現,在滿足應用的前提下緊縮其系統結構以滿足嵌入式應用的需求。

(2)對標準 SQL 的支持。嵌入式移動 DBMS 應能提供對標準 SQL 的支持。支持SQL92 標準的子集,支持數據查詢(連接查詢、子查詢、排序、分組等)、插入、更新、刪除多種標準的 SQL 語句,充分滿足嵌入式應用開發的需求。

(3)事務管理功能。嵌入式移動 DBMS 應具有事務處理功能,自動維護事務的完整性、原子性等特性;支持實體完整性和引用完整性。

(4)完善的數據同步機制。數據同步是嵌入式數據庫最重要的特點。通過數據復制,可以將嵌入式數據庫或主數據庫的變化情況應用到對方,保證數據的一致性。 嵌入式移動數據庫管理系統的數據同步機制應具有以下幾個特點:

  • 提供多種數據同步方式,具有上載同步、下載同步和完全同步 3 種同步方式;
  • 具有完善的沖突檢測機制和靈活的沖突解決方案,具有沖突日志記錄功能;
  • 支持快速同步,系統同步時,只傳遞變化的數據,節省了大量的同步時間;
  • 支持表的水平分割和垂直分割復制,最大限度地降低了嵌入式數據庫的大小;
  • 支持異構數據源連接同步,可以用支持 ODBC 的異構數據源作為主數據庫和嵌入式設備上的數據庫進行數據同步;
  • 具有主動同步的功能,允許用戶對系統提供的同步事件自定義過程實現,提供了最大靈活度的同步過程。

(5)支持多種連接協議。嵌入式移動 DBMS 應支持多種通信連接協議。可以通過串行通信、TCP/IP、紅外傳輸、藍牙等多種連接方式實現與嵌入式設備和數據庫服務器的連接。

(6)完備的嵌入式數據庫管理功能。嵌入式移動 DBMS 應具有自動恢復功能,基本無須人工干預進行嵌入式數據庫管理并能夠提供數據的備份和恢復,保證用戶數據的安全可靠。

(7)平臺無關性與支持多種嵌入式操作系統。嵌入式移動 DBMS 應能支持 Windows CE、Palm OS 等多種目前流行的嵌入式操作系統,這樣才能使嵌入式移動數據庫管理系統不受移動終端的限制。

(8)零管理特性。嵌入式數據庫具有自動恢復功能,不需要人工干預就可以進行嵌入式數據庫管理,并提供數據的備份與同步。

另外,一種理想的狀態是用戶只用一臺移動終端(如手機)就能對與它相關的所有移動數據庫進行數據操作和管理。這就要求前端系統具有通用性,而且要求移動數據庫的接口有統一、規范的標準。前端管理系統在進行數據處理時自動生成統一的事務處理命令,提交當前所連接的數據服務器執行。這樣就有效地增強了嵌入式移動數據庫管理系統的通用性,擴大了嵌入式移動數據庫的應用前景。

總之,在嵌入式移動數據庫管理系統中還需要考慮諸多傳統計算環境下不需要考慮的問題,如對斷接操作的支持、對跨區長事務的支持、對位置相關查詢的支持、對查詢優化的特殊考慮及對提高有限資源的利用率和對系統效率的考慮等。為了有效地解決上述問題,諸如復制與緩存技術、移動事務處理、數據廣播技術、移動查詢處理與查詢優化、位置相關的數據處理及查詢技術、移動信息發布技術、移動 Agent 等技術仍在不斷地發展和完善,會進一步促進嵌入式移動數據庫管理系統的發展。

12.6 實時系統與嵌入式操作系統

簡單地說,實時系統可以看成對外部事件能夠及時響應的系統。這種系統最重要的特征是時間性,也就是實時性,實時系統的正確性不僅依賴于系統計算的邏輯結果,還依賴于產生這些結果的時間。

目前,大多數實時系統都是嵌入式的,并且實際運行中的嵌入式系統也都有實時性的需求,因此,在諸多類型的嵌入式操作系統中,實時嵌入式操作系統是最具代表性的一類,它融合了幾乎所有類型的嵌入式操作系統的特點,所以本節主要以實時嵌入式操作系統的特性和概念為主線,對嵌入式操作系統的基本概念與特點、基本架構、內核服務、內核對象與內核服務等核心內容進行全面的介紹。

12.6.1 嵌入式系統的實時概念

現實世界中,并非所有的嵌入式系統都具有實時特性,所有的實時系統也不一定都是嵌入式的。但這兩種系統并不互相排斥,兼有這兩種系統特性的系統稱為實時嵌入式系統。它們之間的關系如圖 12-7 所示。
在這里插入圖片描述
(1)邏輯(或功能)正確,是指系統對外部事件的處理能夠產生正確的結果。
(2)時間正確,是指系統對外部事件的處理必須在預定的周期內完成。
(3)死線(Deadline)或時限、死限、截止時間,是指系統必須對外部事件進行處理的最遲時間界限,錯過此界限可能產生嚴重的后果。通常,計算必須在到達時限前完成。
(4)實時系統,是指功能正確和時間正確同時滿足的系統,二者同等重要。換言之,實時系統有時間約束并且是時限驅動的。但是在某些系統中,為了保證功能正確性,有可能犧牲時間正確性。
對于實時系統的劃分,通常還可以根據實時性的強弱,即系統必須對外部事件做出響應的時間長短,將實時系統分為:
(1)強實時系統,其系統的響應時間非常短,通常在毫秒或微秒級。
(2)一般實時系統,其系統響應時間比強實時系統要求要低,通常在秒級。
(3)弱實時系統,其系統響應時間可以更長,也可以隨系統負載的輕重而變化。

根據對錯失時限的容忍程度或后果的嚴重性,可以將實時系統分為軟實時系統和硬實時系統。
(1)硬實時系統,指系統必須滿足其靈活性接近零時限要求的實時系統。時限必須滿
足否則就會產生災難性后果,并且時限之后得到的處理結果或是零級無用,或是高度貶值。
(2)軟實時系統,指必須滿足時限的要求,但是有一定靈活性的實時系統。時限可以包含可變的容忍等級、平均的截止時限,甚至是帶有不同程度的、可接受性的響應時間的統計分布。在軟實時系統中,時限錯失通常不會導致系統失敗等嚴重后果。表 12-2 是對軟實時和硬實時系統的對比。
在這里插入圖片描述
通過比較,可知由于錯過時限對軟實時系統的運行沒有決定性的影響,一個軟實時系統不必預測是否可能有懸而未決的時限錯失。相反,軟實時系統在探知到錯失一個時限后可以啟動一個恢復進程。

在實時系統中,任務的開始時間跟時限或完成時間同樣重要,由于任務缺少需要的資源,如 CPU 和內存,就有可能阻礙任務執行的開始并直接導致錯失任務的完成時限,因此時限問題演變成了資源的調度問題。
這一點對調度算法和任務設計都有至關重要的影響。

12.6.2 嵌入式操作系統概述

所謂嵌入式操作系統就是指運行在嵌入式計算機系統上支持嵌入式應用程序的操作系統,是用于控制和管理嵌入式系統中的硬件和軟件資源、提供系統服務的軟件集合。嵌入式操作系統是嵌入式軟件的一個重要組成部分。它的出現提高了嵌入式軟件開發的效率,提高了應用軟件的可移植性,有力地推動了嵌入式系統的發展。

1.嵌入式操作系統的特點
與通用操作系統相比,嵌入式操作系統主要有以下特點:

(1)微型化:嵌入式操作系統的運行平臺不是通用計算機,而是嵌入式計算機系統。這類系統一般沒有大容量的內存,幾乎沒有外存,因此,嵌入式操作系統必須做得小巧,以盡量少占用系統資源。為了提高系統的執行速度和可靠性,嵌入式系統中的軟件一般都固化在存儲器芯片中,而不是存放在磁盤等載體中。

(2)代碼質量高:在大多數應用中,存儲空間依然是寶貴的資源,這就要求程序代碼的質量要高,代碼要盡量精簡。

(3)專業化:嵌入式系統的硬件平臺多種多樣,處理器更新速度快,每種都是針對不同的應用領域而專門設計。因此,嵌入式操作系統要有很好的適應性和移植性,還要支持多種開發平臺。

(4)實時性強:嵌入式系統廣泛應用于過程控制、數據采集、通信、多媒體信息處理等要求實時響應的場合,因此實時性成為嵌入式操作系統的又一特點。

(5)可裁減、可配置:應用的多樣性要求嵌入式操作系統具有較強的適應能力,能夠根據應用的特點和具體要求進行靈活配置和合理裁減,以適應微型化和專業化的要求。

2.嵌入式操作系統的分類
嵌入式操作系統的種類繁多,可以從不同角度對其進行分類。從嵌入式操作系統的獲得形式上,可以分為商業型和免費型兩類:

(1)商業型。商業型嵌入式操作系統一般功能穩定、可靠,有完善的技術支持、齊全的開發工具和售后服務。如 WindRiver 公司的 VxWorks 、pSOS 和 Palm 公司的 Palm OS 等。但是,價格昂貴,用戶通常得不到系統的源代碼。

(2)免費型。免費型嵌入式操作系統的優勢在于價格方面,另外,應用系統開發者可以獲得系統源代碼,給開發帶來了方便。但免費型的操作系統功能簡單、技術支持差、系統的穩定性也不夠好。典型代表系統有嵌入式 Linux、uC/OS 等。 從嵌入式操作系統的實時性上,可以分為實時嵌入式操作系統和非實時嵌入式操作系統兩類。

(1)實時嵌入式操作系統(Real-Time Embedded OS,RTEOS)。實時嵌入式操作系統支持實時系統工作,其首要任務是調度一切可利用資源,以滿足對外部事件響應的實時時限,其次著眼于提高系統的使用效率。實時嵌入式操作系統主要用在控制、通信等領域。目前,大多數商業嵌入式操作系統都是實時操作系統。

(2)非實時嵌入式操作系統。這類操作系統不特別關注單個任務響應時限,其平均性能、系統效率和資源利用率一般較高,適合于實時性要求不嚴格的消費類電子產品,如個人數字助理、機頂盒等。

12.6.3 實時嵌入式操作系統

整體上看,一個嵌入式系統的實時性能是由硬件、實時操作系統及應用程序共同決定的,其中,嵌入式實時操作系統內核的性能起著關鍵的作用。通常,有兩種類型的實時嵌入式操作系統:實時內核型的 RTEOS 與通用型的 RTEOS。

實時內核型的 RTEOS:這類操作系統,驅動程序傳統嵌在內核之中,應用程序和中間件實現在標準的應用程序接口(APIs,Application Programming Interfaces)之上。

實時通用型的 RTEOS:這類操作系統,驅動程序并非深度嵌入到內核中,而是在內核之上實現,并且僅包含少數必要的驅動程序,應用程序和中間件可以直接在驅動程序之上實現,而不必在標準的 APIs 實現。它們的區別如圖 12-8 所示。
實時嵌入式操作系統和通用操作系統之間的功能有很多相似之處,例如,它們都支持多任務,支持軟件和硬件的資源管理,以及都為應用提供基本的操作系統服務。
在這里插入圖片描述
1.嵌入式實時操作系統的關鍵特性
與通用操作系統相比,實時嵌入式操作系統在功能上具有很多特性。實時嵌入式操作系統特有的不同于通用操作系統的關鍵特性主要有:

  • 滿足嵌入式應用的高可靠性;
  • 滿足應用需要的可裁減能力;
  • 內存需求少;
  • 運行的可預測性;
  • 采用實時調度策略;
  • 系統的規模緊湊;
  • 支持從 ROM 或 RAM 上引導和運行;
  • 對不同的硬件平臺均有更好的可移植性。

2.嵌入式實時操作系統的實時性能指標在評估實時操作系統設計性能時,時間性能指
標是最重要的一個性能指標,常用的時間性能指標主要有如下幾個:

(1)任務切換時間:是指 CPU 控制權由運行態的任務轉移給另外一個就緒任務所需要的時間,包括在進行任務切換時,保存和恢復任務上下文所花費的時間及選擇下一個待運行任務的調度時間,該指標跟微處理器的寄存器數目和系統結構有關。相同的操作系統在不同微處理器上運行時所花費的時間可能不同。任務切換時間所對應的時序圖如圖 12-9 所示。
在這里插入圖片描述
(2)中斷處理相關的時間指標,對應的中斷時序圖如圖 12-10 所示
在這里插入圖片描述
中斷延遲時間,是指從中斷發生到系統獲知中斷的時間,主要受系統最大關中斷時間的影響,

關中斷時間越長,中斷延遲也就越長;
中斷處理執行時間,該時間由具體的應用決定;
中斷響應時間,是指從中斷發生到開始執行用戶中斷服務例程的時間;
中斷恢復時間,是指用戶中斷服務例程結束回到被中斷的代碼之間的時間;

最大關中斷時間,包含兩個方面:一是內核最大關中斷時間,即內核在執行臨界區代碼時關中斷;二是應用關中斷時間,關中斷最大時間是這兩種關中斷時間的最大值;任務響應時間,是指從任務對應的中斷產生到該任務真正開始運行的時間;
對于可搶占式調度,中斷恢復的時間還要加上進行任務切換和恢復新的任務上下文的時
間。

(3)系統響應時間:指系統在發出處理請求到系統做出應答的時間,即調度延遲,這個時間的大小主要由內核任務調度算法所決定。 作為總結,典型的可搶占實時內核的性能指標計算方法如表 12-3 所示。
在這里插入圖片描述

12.6.4 主流嵌入式操作系統介紹

迄今為止,據不完全統計,世界上現有的嵌入式操作系統的總數達幾百個之多。其中最常用的有十幾種,這些操作系統在各自的應用領域都有很高的知名度和廣大的用戶群。表 12-4 選取了一些業界常見的嵌入式操作系統加以比較。
在這里插入圖片描述
在這里插入圖片描述

12.7 嵌入式系統開發設計

嵌入式系統設計的主要任務是定義系統的功能、決定系統的架構,并將功能映射到系統實現架構上。這里,系統架構既包括軟件系統架構也包括硬件系統架構。一種架構可以映射到各種不同的物理實現,每種實現表示不同的取舍,同時還要滿足某些設計指標,并使其他的設計指標也同時達到最佳化。

嵌入式系統的設計方法跟一般的硬件設計、軟件開發的方法不同,是采用硬件和軟件協同設計的方法,開發過程不僅涉及軟件領域的知識,還涉及硬件領域的綜合知識,甚至還涉及機械等方面的知識。要求設計者必須熟悉并能自如地運用這些領域的各種技術,才能使所設計的系統達到最優。

雖然嵌入式系統應用軟件的設計方案隨應用領域的不同而不同,但是嵌入式系統的分析與設計方法也遵循軟件工程的一般原則,許多成 熟的分析和設計方法都可以在嵌入式領域得到應用。嵌入式系統的開發過程同樣也包括需求分析、系統設計、實現和測試幾個基本階段,并且每個階段都有其獨有的特征和重點。

本節主要介紹嵌入式系統開發設計的技術與方法,并從嵌入式系統應用和計算模型的角度分析應用軟件設計的方法及設計過程中面臨的主要問題。最后,討論嵌入式領域軟件移植的相關問題。

12.7.1 嵌入式系統設計概述

進行嵌入式系統設計前,應明確嵌入式系統設計本身的特點及衡量嵌入式系統設計的一些主要的技術指標。

1.嵌入式系統設計的特點
與通常的系統設計相比,嵌入式系統設計具有以下特點:

  • 軟、硬件協同并行開發;
  • 微處理器的類型多種多樣;
    -實時嵌入式操作系統具有多樣性;
  • 與通用系統開發相比,可利用系統資源很少;
  • 應用支持少;
  • 要求特殊的開發工具;
  • 軟、硬件都要很健壯;
  • 調試很困難。

2.嵌入式系統的技術指標
嵌入式系統設計的常用指標有:
(1)NRE 成本(非重復性工程成本):設計系統所需要支付的一次性貨幣成本,即一旦設計完畢,不需要支付額外的設計費用,就可以制造任意數目的產品。

(2)單位成本:生產單個產品所需要支付的貨幣成本,不包含 NRE 成本。

(3)大小:指系統所占的空間,對軟件而言,一般用字節數來衡量;對硬件而言,則用邏輯門或晶體管的數目來衡量。

(4)性能:系統完成規定任務所需要的時間,是設計時最常用的設計指標,主要有兩種衡量方式,一是響應時間,即開始執行到任務結束之間的時間。二是完成量,即單位時間內所完成的任務量。

(5)功率:系統所消耗的功率,它決定了電池的壽命或電路的散熱需求。

(6)靈活性:在不增加 NRE 成本的前提下,改變系統功能的能力。

(7)樣機建立時間:建立系統可運行版本所需的時間,系統樣機可能比最終產品更大更昂貴,但可以驗證系統的用途和正確性,改進系統的功能。

(8)上市時間:從系統開發到可以上市賣給消費者的時間,最主要的影響因素包括設計時間、制造時間和檢測時間。

(9)可維護性:系統推出或上市后進行修改的難易程度,特別是針對非原始開發人員進行的修改。

(10)正確性:正確實現了系統的功能,可以在整個設計過程中檢查系統的功能,也可插入測試電路檢驗是否正確。

(11)安全性:系統不會造成傷害的概率。各個設計指標之間一般是互相競爭的,改良了某個指標常常會導致其他指標的惡化,為了最好地滿足設計最佳化,設計者必須了解各種軟、硬件的實現技術,并且能夠從一種技術轉移到另一種技術,以便找到特定約束下的最佳方案。

3.嵌入式系統的設計挑戰
嵌入式系統設計所面臨的挑戰有以下幾個方面。
(1)需要多少硬件:設計者對用于解決問題的計算能力有較強的控制能力,不僅可以選擇使用何種處理器,而且可以選擇存儲器的數量、所使用的外設等,因為設計不僅要滿足性能的需求,還要受到制造費用的約束,硬件的選擇十分重要,硬件太少,將達不到功能和性能的要求,硬件過多又會使產品過于昂貴。

(2)如何滿足時限:使用提高處理器速度的方法使程序運行速度加快來解決時間約束的方法是不可取的,因為這樣會使系統的價格上升。同時,提高了處理器的時鐘頻率,有時并不能提高執行速度,因為程序的速度有可能受存儲系統的限制。

(3)如何減少系統的功耗:對采用電池供電的系統,功耗是一個十分敏感的問題。對于非電池供電的系統,高功率意味著高散熱。降低系統功耗的一種方法是降低它的運算速度,但是單純地降低運算速度顯然會導致性能不能滿足,因此,必須認真設計在降低功耗的同時滿足性能的約束。

(4)如何保證系統的可升級性:系統的硬件平臺可能使用幾代,或者使用同一代的不同級別的產品,這些僅需要一些簡單的改變,設計者必須通過改變軟件來改變系統的特性,設計一種機器使它能夠提供現在仍未開發的軟件的性能。

(5)如何保證系統的可靠性:可靠性是產品銷售時一項重要的指標,產品能夠很好地工作是消費者的合理要求,可靠性在一些系統中尤為重要,如安全控制系統。

(6)測試的復雜性:測試一個嵌入式系統比僅僅輸入一些數據困難得多,所以不得不運行整臺機器以產生正確的數據,數據產生的時間是十分重要的,即不能離開嵌入式系統工作的整個環境來測試嵌入式系統。

(7)可視性和可控制性有限:嵌入式系統通常沒有顯示設備和鍵盤,這將導致開發者很難了解系統內部發生了什么,也不能響應系統的動作,有時候不得不通過觀察微處理器的信號來了解。在實時系統中,一般無法為了觀察而讓系統停機。

(8)開發環境受限:嵌入式系統的開發環境,如開發軟件、硬件工具通常比通用計算機或工作站上的可用環境更為有限,故只能采用交叉式開發,給開發進度帶來很大影響。

12.7.2 開發模型與設計流程

與通用系統的開發類似,嵌入式系統的開發也可以采用軟件工程中常見的開發模型,主要包括瀑布模型、螺旋模型、逐步求精模型及層次模型。

1.常用開發模型
設計流程是系統設計期間應遵循的一系列步驟,其中一些步驟可以由自動化工具完成,而另外一些只可用手工完成。在嵌入式系統領域,有如下幾種常用開發過程模型。

(1)瀑布模型。瀑布模型由五個主要階段構成:需求分析階段確定目標系統的基本特點;系統結構設計階段將系統的功能分解為主要的構架;編碼階段主要進行程序的編寫和調試;測試階段檢測錯誤;最后一個是維護階段,主要負責修改代碼以適應環境的變化,并改正錯誤、升級。各個階段的工作和信息總是由高級的抽象到較詳細的設計步驟單向流動,是一個理想的自頂向下的設計模型。

(2)螺旋模型。螺旋模型假定要建立系統的多個版本,早期的版本是一個簡單的試驗模型,用于幫助設計者建立對系統的直覺和積累開發此系統的經驗,隨著設計的進展,會創建更加復雜的系統。在每一層設計中,設計者都會經過需求分析、結構設計、測試三個階段。在后期,當構成更復雜的系統版本時,每一個階段都會有更多的工作,并需要擴大設計的螺旋,這種逐步求精的方法使設計者可以通過一系列的設計循環加深對所開發的系統的理解。螺旋的頂部第一個循環是很小很短的,而螺旋底部的最后的循環加入了對螺旋模型的早期循環的細節補充,螺旋模型比瀑布模型更加符合實際。

(3)逐步求精模型。逐步求精模型是一個系統被建立多次,第一個系統被作為原型,其后逐個將系統進一步求精。當設計者對正在建造的系統的應用領域不是很熟悉時,這個方法很有意義。通過建造幾個越來越復雜的系統,從而精煉系統,使設計者能檢驗架構和設計技術。此外,各種迭代技術也可僅被局部完成,直到系統最終完成。

(4)層次模型。許多嵌入式系統本身是由更多的小設計組成的,完整的系統可能需要各種軟件構件、硬件構件。這些部件可能由尚需設計的更小部件組成,因此從最初的完整系統設計到為個別部件的設計,設計的流程隨著系統的抽象層次的變化而變化,從最高抽象層次的整體設計到中間抽象層次的詳細設計,再到每個具體模塊的設計,都是逐層展開的,其中每個流程可能由單個設計人員或設計小組來承擔,每個小組依靠其他小組的結果,各個小組從上級小組獲得要求,同時上級小組依賴于各個分組設計的質量和性能。而且,流程的每個實現階段都是一個從規格說明到測試的完整流程。

2.嵌入式系統的設計方法
一個良好的嵌入式系統設計方法是十分重要的,這是因為:
(1)良好的設計方法可以使設計者清楚地了解他們所做工作的進度,這樣可以確保不遺漏其中的任何一項工作。
(2)允許使用計算機輔助工具幫助設計者進行工作,將整個過程分成幾個可控的步驟進行。
(3)良好的設計方法方便設計團隊的成員之間相互交流,通過定義全面的設計過程,使團隊里的每個成員可以很好地理解他們所要做的工作及完成分配給他們的任務時所達到的目標。

嵌入式系統軟件的開發過程可以分為項目計劃、可行性分析、需求分析、概要設計、詳細設計、程序建立、下載、調試、固化、測試及運行等幾個階段。

項目計劃、可行性分析、需求分析、概要設計及詳細設計等幾個階段,與通用軟件的開發過程基本一致,都可按照軟件工程方法進行,如采用原型化方法、結構化方法等。

由于嵌入式軟件的運行和開發環境不同,開發工作是交叉進行的,所以每一步都要考慮到這一點。程序建立階段的工作是根據詳細設計階段產生的文檔進行的。這一階段的工作主要是源代碼編寫、編譯、鏈接等幾個子過程,這些工作都是在宿主機進行的,不需要用到目標機。 產生應用程序的可執行文件后,就要用到交叉開發環境進行調試,根據實際情況可以選
用可用的幾種調試方法之一或它們的有效組合來進行。嵌入式系統設計不同于傳統的軟件設計,如圖 12-11 所示。經常包含硬件設計和軟件設計,其中前端活動,如規格說明和系統架構,需要同時考慮硬件和軟件兩個方面。
在這里插入圖片描述
類似的,后端設計,如系統集成和測試要考慮整個系統。在中間階段中,軟件和硬件構件的開發彼此相互獨立,并且大多數的硬件和軟件的工作能夠相對獨立地進行。最后,要將經調試后正確無誤的可執行程序固化到目標機上。根據嵌入式系統硬件上配置的不同,固化有幾種方式,可以固化在 EPROM 和 FLASH 等存儲器中,也可固化在 DOC 和 DOM 等電
子盤中。通常還要借助一些專用編程器進行。

由于嵌入式系統對安全性和可靠性的要求比通用計算機系統要高,所以在對嵌入式系統進行白盒測試時,要求有更高的代碼覆蓋率。在系統開發流程的各個階段,分別要進行系統的確認和性能評估、安全性評估及風險性評價,并對系統的實現進行測試驗證。

12.7.3 嵌入式系統設計的核心技術

嵌入式系統的開發是軟、硬件綜合開發,與通用系統的開發存在巨大差異,一方面是因為每個嵌入式系統都是一個軟硬件的結合體;另一方面,嵌入式系統一旦研制完成,軟件便隨著硬件固化到產品中,具有很強的專用性。在這些特點的影響下,必然要有一種不同于通用軟件開發過程的工程方法學來支持嵌入式系統的開發過程,同時,這些特點也決定了嵌入式系統開發所采用的獨特的核心技術。

總體來看,在嵌入式開發領域,主要有三種核心技術:處理器技術、IC 技術、設計/ 驗證技術。

1.處理器技術
處理器技術與實現系統功能的計算引擎結構有關,很多不可編程的數字系統也可以視為處理器,這些處理器的差別在于其面向特定功能的專用化程度,導致其設計指標與其他處理器不同。

(1)通用處理器。這類處理器可用于不同類型的應用,一個重要的特征就是存儲程序,由于設計者不知道處理器將會運行何種運算,所以無法用數字電路建立程序。另一個特征就是通用的數據路徑,為了處理各類不同的計算,數據路徑是通用的,其數據路徑一般有大量的寄存器及一個或多個通用的算術邏輯單元。設計者只需要對處理器的存儲器編程來執行所需的功能,即設計相關的軟件。

在嵌入式系統中使用通用處理器具有設計指標上的一些優勢。上市時間和 NRE 成本較低,因為設計者只需編寫程序,而不需做任何數字設計,靈活性高,功能的改變通過修改程序進行即可。與自行設計處理器相比,數量少時單位成本較低。

當然,這種方式也有一些設計指標上的缺陷,數量大時單位成本相對較高,因為數量大時,自行設計的 NRE 成本分攤下來,可降低單位成本。同時,對于某些應用,性能可能很差。由于包含了非必要的處理器硬件,系統的體積和功耗可能變大。

(2)單用途處理器。單用途處理器是設計用于執行特定程序的數字電路,也指協處理器、加速器、外設等。如 JPEG 編碼解碼器執行單一程序,壓縮或解壓視頻信息。嵌入式系統設計者可通過設計特定的數字電路來建立單用途的處理器。設計者也可以采用預先設計好的商品化的單用途處理器。

在嵌入式系統中使用單用途處理器,在指標上有一些優缺點。這些優缺點與通用處理器基本相反,性能可能更好,體積與功率可能較小,數量大時單位成本可能較低,而設計時間與 NRE 成本可能較高,靈活性較差,數量小時單位成本較高,對于某些應用,性能不如通用處理器。

(3)專用處理器。專用指令集處理器是一個可編程處理器,針對某一特定類型的應用進行最優化。這類特定應用具有相同的特征,如嵌入式控制、數字信號處理等。在嵌入式系統中使用專用處理器可以在保證良好的性能、功率和大小的情況下,提供更大的靈活性,但這類處理器仍需要昂貴的成本建立處理器本身和編譯器。單片機和數字信號處理器是兩類應用廣泛的專用處理器,數字信號處理器是一種針對數字信號進行常見運算的微處理器,而單片機是一種針對嵌入式控制應用進行最佳化的微處理器。

2.IC 技術
從系統的集成電路設計描述得到實際芯片的物理映射過程的實現技術便是 IC(Integrated Circuits,集成電路)技術,當前在半導體領域的三類實現技術,即全定制、半定制和可編程技術均可應用于嵌入式系統的硬件設計。

(1)全定制/VLSI(Very Large Scale Integrated Circuites,超大規模集成電路)。在全定制IC 技術中,需要根據特定的嵌入式系統的數字實現來優化各層設計人員從晶體管的版圖尺寸、位置、連線開始設計以達到芯片面積利用率高、速度快、功耗低的最優化性能。利用掩膜在制造廠生產實際芯片,全定制的 IC 設計也常稱為 VLSI,具有很高的 NRE 成本、很長的制造時間,適用于大量或對性能要求嚴格的應用。

(2)半定制/ASIC(Application Specific Integrated Circuit,專用集成電路)。半定制 ASIC是一種約束型設計方法,包括門陣列設計法和標準單元設計法。它是在芯片制作好一些具有通用性的單元元件和元件組的半成品硬件,設計者僅需要考慮電路的邏輯功能和各功能模塊之間的合理連接即可。這種設計方法靈活方便、性價比高,縮短了設計周期,提高了成品率。

(3)可編程/ASIC。可編程器件中所有各層都已經存在,設計完成后,在實驗室里即可燒制出設計的芯片,不需要 IC 廠家參與,開發周期顯著縮短。可編程 ASIC 具有較低的 NRE 成本,單位成本較高,功耗較大,速度較慢。

3.設計/驗證技術
嵌入式系統的設計技術主要包括硬件設計技術和軟件設計技術兩大類。其中,硬件設計領域的技術主要包括芯片級設計技術和電路板級設計技術兩個方面。

芯片級設計技術的核心是編譯/綜合、庫/IP(Intellectual Property,知識產權)、測試/ 驗證。編譯/綜合技術使設計者用抽象的方式描述所需的功能,并自動分析和插入實現細節。庫/IP 技術將預先設計好的低抽象級實現用于高級抽象。測試/驗證技術確保每級功能正確,減少各級之間反復設計的成本。

軟件設計技術的核心是軟件語言。軟件語言經歷了從低級語言(機器語言、匯編語言)到高級語言(例如,結構化設計語言、面向對象設計語言)的發展歷程,推動其發展的是匯編技術、分析技術、編譯/解釋技術等諸多相關技術。軟件語言的級別也從實現級、設計級、功能級逐漸向需求級語言發展過渡。

早期,隨著通用處理器概念的逐漸形成,軟件技術迅速發展,軟件的復雜度也開始增加,軟件設計和硬件設計的技術和領域完全分開。設計技術和工具在這兩個領域同步得到發展,也使得行為描述可以在越來越抽象的級別上進行,以適應設計復雜度不斷增長的需要。這種同步發展如今又使得這兩個領域都使用同樣的時序模型來描述行為,因而這兩個領域即將可能再度統一為一個領域。

鑒于大多數嵌入式系統都是實時的反應式系統,反應式系統具有多任務并發、時間約束嚴格與可靠性高的特點,針對反應式系統的設計和描述,人們相繼提出了多種描述語言和驗證方法學。例如,采用時序邏輯用來刻畫反應式系統的性質及推理反應式系統的行為,采用模型檢驗技術驗證反應式系統設計的正確性等,這些技術已逐步在嵌入式開發過程中發揮著重要的作用。

12.7.4 嵌入式開發設計環境

嵌入式系統的開發環境種類很多,大體可以把它們分為如下幾類:
(1)與嵌入式操作系統配套的開發環境,屬于這一類的開發環境較多,如 PalmOS、THOS、VxWorks、Windows CE 等商業嵌入式操作系統都有與其配套的功能齊全的開發環境。

(2)與處理器芯片配套的開發環境。這類開發環境一般由處理器廠商提供,如 EPSON公司推出的一個專門為基于 S1C33 系列微控制器芯片的嵌入式系統開發的工具包便是這一類型的開發環境。

(3)與具體應用平臺配套的開發環境。這類開發環境針對性較強,如高通公司的 Brew SDK 等。

(4)其他類的開發環境。這類開發環境主要指一些嵌入式系統供應商在 GNU 開源工具的基礎上開發或定制的較為通用的開發環境。這類工具可以免費獲得,而且支持的處理器類型繁多,功能齊全,但在技術支持方面比專業化商業工具略遜一些。

12.7.5 嵌入式軟件設計模型

隨著嵌入式系統的功能日益復雜,要描述這些功能復雜的系統的行為也越來越困難,實踐證明通過采用計算模型的方法來對系統進行描述和分析是一種具有工程價值的方法。

本節介紹幾種嵌入式領域常用的計算模型,并從計算模型的角度分析和闡述嵌入式應用設計和開發的相關問題。計算模型提供一組用簡單對象來組合復雜行為的方法,可以幫助設計者理解和描述系統行為。嵌入式系統常用的計算模型有如下幾種:時序計算模型、通信進程模型、狀態機模型、數據流模型、面向對象模型、并發進程模型。 這些模型分別在不同的應用領域使用,如狀態機模型特別適合描述以控制為主的系統,數據流模型可以很好地描述數據處理和轉換問題。目前使用最廣泛的是并發進程模型。

1.狀態機模型
有限狀態機(Finite-State Machine,FSM)是一個基本的狀態模型,可以用一組可能的狀態來描述系統的行為,系統在任何時刻只能處于其中一個狀態,也可以描述由輸入確定的狀態轉移,最后可以描述在某個狀態下或狀態轉移期間可能發生的操作。
有限狀態機 FSM 是一個六元組 F<S,I,O,F,H,S0>,其中 S 是一個狀態集合{s0,s1,…,sl},I 是輸入集合{I0,I1,…,Im},O 是輸出集合{o0,o1,…,on},F 是次態函數或轉移函數,將狀態和輸入映射到狀態(S×I→S),H 是輸出函數,將狀態映射到輸出 (S→O),S0 是初始狀態。

圖 12-12 是電梯的控制單元的狀態機描述。在初始“空閑”態,將 up 和 down 設置為 0, open 設置為 1。在所請求的樓層不同于當前樓層之前,狀態機一直停留在“空閑”狀態。如果所請求的樓層大于當前樓層,則狀態機轉移到“上升”狀態,并將 up 設置為 1。如果所請求的樓層小于當前樓層,則狀態機轉移到“下降”狀態,并將 down 設置為 1。在當前樓層等于所請求的樓層之前,狀態機一直留在“下降”或“上升”狀態,然后狀態轉移到“開門”狀態,并將 open 設置為 1。通常,系統有一個計時器 timer,因此,當狀態機轉移到“開門”狀態時,還要將計時器啟動,狀態機停留在“開門”態,直到計時器超時,最后轉移到“空閑”態。
在這里插入圖片描述
當 FSM 被用于嵌入式系統設計時,其輸入和輸出的數據類型都是布爾類型,而函數表示含有布爾運算的布爾函數,這種模型對于沒有數據輸入或輸出的很多純控制系統而言已經足夠。如果要處理數據,則將 FSM 擴展為帶有數據路徑的狀態機(FSM with Datapath,FSMD)。另外,對狀態機模型可以進一步擴展以支持分級和并發,這種模型稱為分級/并發FSM(Hierarchical/Concurrent FSM,HCFSM)模型。

2.數據流模型
數據流模型是并發多任務模型派生出的一種模型,該模型將系統的行為描述為一組結點和邊,其中結點表示變換,邊表示從一個結點到另一個結點的數據流向。每個結點使用來自其輸入邊的數據,執行變換并在其輸出邊上產生數據。

每條邊可能有或沒有數據,出現在邊上的數據稱為令牌,當某個結點的所有輸入邊都至少有一個令牌時,該結點可觸發。結點觸發后,將使用來自每條輸入邊的一個令牌,對所有使用的令牌進行數據變換,并在輸出邊上產生一個令牌,結點的觸發僅決定于令牌出現的情況。

圖 12-13 所示是計算 z=(a+b)×(c-d)的數據流模型。 目前,已有若干商業化的工具支持用圖形化語言表達數據流模型,這些工具可以自動將數據流模型轉換為并發多任務模型,以便在微處理器上實現。其轉換方法為將每個結點轉換為一個任務,每條邊轉換為一個通道,其中并發多任務模型的實現方法是使用實時操作系統對并發任務進行映射。

圖 12-14 是一個同步數據流模型,這個模型中,在結點的每條輸入邊和輸出邊上分別標注每次觸發所使用和產生的令牌數。該模型的優點是,在實現時不需要將其轉換為并發多任務模型,而是用靜態方式調度結點,產生時序程序模型。該模型可以使用時序程序語言(如C 語言)來表達,不需要實時操作系統就可以執行,因此其執行效率更高。
在這里插入圖片描述
3.并發進程模型
并發進程模型是由一組進程構成,每個進程是一個順序執行的過程,各進程間可以并發執行。并發進程模型提供創建、終止、暫停、恢復和連接進程的操作。進程在執行中可以相互通信,交換數據。進程間通信可以采用兩種方式:共享變量和消息傳遞。信號量、臨界區、管程和路徑表達式等用來對并發進程的操作進行同步。

通常,實時系統可以看成是由許多并發執行的進程構成的系統,其中每個進程都有時間要求。這樣,很多嵌入式系統更容易用一組并發執行的任務來描述,因為這些系統本身就是多任務系統,并發進程模型便自然地可以由實時操作系統的多任務來實現。

4.面向對象模型
傳統的并發進程模型是圍繞進程的概念進行設計的,進程是一個實現級的概念,它是對客觀世界活動的一種間接模擬,因此,采用進程模型來解決客觀世界中的并發問題就顯得極不自然,并且也使得并發程序難以設計和理解。

面向對象模型以一種更加直接的方式刻畫客觀世界中的活動,模型中存在著潛在的并發執行能力。一個對象向另一個對象發送消息后,若不需要或不立即需要消息的處理結果,前者不必等待后者處理消息,消息發送者和消息接受者可以并發執行。對象不都是處于被動的提供服務狀態,它們中的一些除了能通過接收消息向外提供服務外,還可以有自己的事務處
理。一個對象往往可以同時處理多個消息。

對象是數據和操作的封裝體,數據存放在對象的局部變量中,對象的狀態由對象所有的局部變量在某一時刻的取值來表示。在并發環境中,還要考慮對象并發狀態的描述問題,因為對象的并發控制是根據對象的并發狀態來進行的。把并發與面向對象相結合,歸結起來可分為兩條途徑:
(1)在面向對象模型中引進并發機制,充分利用面向對象技術刻畫客觀世界的良好模型能力和面向對象的各個重要特性,同時把其潛在的并發能力描述出來,使其適合于描述并發計算。

(2)在傳統并發模型中引進面向對象思想。 面向對象的并發模型可以分為兩種類型:隱式并發模型和顯式并發模型。

(1)隱式并發模型。這種模型的特點是推遲并發設計,將對象建模作為建模基礎。在進入運行階段之前,將對象看成自主單元,各種對象的活動看成理想并發方式完成的特定工作。就像每個對象擁有一個自己的處理器,這個處理器可以為對象提供一個執行線程。進入系統的外部事件被看成一個處理請求,以廣播方式傳給一些對象,這些對象接著向其他對象進一步提出處理請求。理論上,對應一個請求,可以有任意多個對象執行相應的處理。在實現時,由調度程序最終決定其對象的操作順序,如圖 12-15 所示。

(2)顯式并發模型。這種模型的特點是首先考慮并發,應先把并發概念和對象概念分開。在建立對象以后,用實時操作系統支持的進程概念來表示并發,形成對象和進程兩個抽象層次,即先將系統分解為準并發進程作為開始,而在每個進程的內部采用面向對象的技術。對象間交互表示成嵌套的函數調用,通過加入鎖、監視器、信號量等顯式同步機制,來保證對象的完整。該模型將進程置于對象之上,對象中不必考慮并發、對象串行化,如圖 12-16 所示。
在這里插入圖片描述
早期,實時系統的設計方法主要是結構化設計方法,采用結構化方法的系統在復用性、可修改性等方面有很大的局限性。面向對象的實時系統設計方法顯然在這些問題上具有明顯的優勢。較實用的面向對象的設計方法是諾基亞公司的 OCTOPUS 方法,該方法以 OMT 和融合方法(Fusion Method)為基礎,提出了對實時系統響應時間、時間域及并發的處理方法,并具體提出了對并發、同步、通信、中斷處理、ASIC、硬件界面、端對端響應時間等方面的處理。OCTOPUS 方法將軟件開發的主要階段很好地合并起來,從規格說明到運行模型之間的過渡緊密自然,還支持漸進式開發。OCTOPUS 方法是當前面向對象技術和實時系統相結合的一個典型的設計方法。另外,形式化的面向對象的開發技術和建模語言也逐漸在實時系統建模的初始階段得到應用。

12.7.6 需求分析

在設計之前,設計者必須知道要設計什么。通常人們用需求和規格說明來描述設計過程的這兩個相關而不同的步驟。需求是用戶所想要的非形式化的描述,而規格說明是可以用來創建系統架構的更詳盡、更精確、更一致的描述。當然,需求和規格說明都是指導系統的外部表示,而非內部表示。需求有兩種類型:功能性需求和非功能性需求,功能性需求說明這個系統必須做什么,而非功能性需求說明系統的其他屬性,如物理尺寸、價格、功耗、設計時間、可靠性等。

對一個大系統進行需求分析是一項復雜而費時的工作,但是,獲取少量格式清晰、簡單明了的信息是理解系統需求的一個良好開端。表 12-5 是在某項工程開始時填寫的需求表格,在考慮系統的基本特征時可將該表格作為檢查表。

在這里插入圖片描述
這份需求表格內容是以 GPS(Global Position System,移動地圖系統)為例編寫的。移動地圖系統是一種手持設備,針對在高速公路開車的用戶或類似的用戶而設計,該設備可從GPS 上得到位置信息,為用戶顯示當前所在的位置及周圍的地形圖,地圖的內容隨著用戶及設備所在位置的改變而改變。

需求分析階段最重要的文檔輸出就是系統的規格說明。
規格說明是精確反映客戶需求并且作為設計時必須遵循的要求的一種技術文檔。在軟件開發的過程中,規格說明非常重要。系統分析人員接受用戶需求產生目標軟件系統的規格說明,設計與編碼人員根據規格說明,進行模塊設計并最終產生程序代碼,測試和驗收人員驗證最終軟件是否符合規格說明。規格說明應該是清晰的、無歧義的,否則由該規格說明建造系統可能不符合實際要求。

目前,業界較為流行的方法是采用 UML 進行規格說明的描述。UML 是一個通用的標準建模語言,可以對任何具有靜態結構和動態行為的系統進行建模。UML 適用于系統開發過程中從需求規格描述到系統完成后測試的不同階段。圖 12-17 是一個顯示操作的狀態機規格說明示例,開始和結束是特殊的狀態,狀態機中的狀態代表了不同的概念性操作。
在這里插入圖片描述
在需求分析階段,通過用例來捕獲用戶需求。通過用例建模,描述對系統感興趣的外部角色及其對系統(用例)的功能要求。分析階段主要關心問題域中的主要概念(如抽象、類和對象等)和機制,需要識別這些類及它們相互間的關系,并用 UML 類圖來描述。在分析階段,只對問題域的對象(現實世界的概念)建模,而不考慮定義軟件系統中技術細節的類(如處理用戶接口、數據庫、通信和并行性等問題的類)。

12.7.7 系統設計

目前,嵌入式系統的設計工具可以分為兩類:協同合成工具和協同模擬工具。
(1)協同合成工具。當前,用于嵌入式開發的主要的協同合成工具有 POLIS、COSYMA和 Chinook 等。

POLIS:POLIS 是 UC-Berkeley 開發的交互式嵌入式系統的軟、硬件協同設計框架,它適用于小型控制系統的設計,系統描述支持基于 FSM(Finite State Machine)的語言。由于軟、硬件均可透明地從同一 CFSM 描述中取得,設計空間的靈活性也相應增加,支持使用PTOLEMY 的協同模擬,在描述及實現層均支持正式的驗證,架構的支持受限,即硬件 CFSMs 所包圍的只有一個處理器,而且不支持共享內存。

COSYMA:COSYMA 是由德國 IDA 公司開發的一種探索硬件與軟件協同設計合成進程的平臺,它面向軟件系統的描述較簡單,支持自動分割和協同處理器合成,在合成時期可以對設計空間進行探索,系統合成取決于硬件限制,不支持并發模塊,即一次只能有一個線程執行,架構同樣受限,不支持正式驗證,設計的成功與否取決于分割及開銷估計技術。

Chinook:Chinook 是為控制系統而設計的,整個系統的描述作為一個輸入提供給 Chinook,它的內部模式基于類似等級狀態的模式,它不對代碼進行分割,它為整個設計提供單一的模擬環境,Chinook 支持多種系統架構,尤其是多處理器結構。同樣支持定時限制的描述,它能合成多種接口,包括系統之間的軟、硬件接口,能直接從定時圖表中合成設備驅動器,可以控制處理器之間的通信。

(2)協同模擬工具。協同模擬是嵌入式系統設計中至關重要的一個方面,在整個系統設計完成后,在統一框架下模擬不同種類的成分是必要的,協同模擬不僅提供檢驗,而且為用戶提供各系統的性能信息,這有助于在系統的早期提出變更方案,不至于造成重大損失。目前,主要的協同模擬工具有如下兩種。

PTOLEMY:PTOLEMY 的關鍵思想是混合使用面向對象內核的計算模型,可用于模擬多種的系統,在各種應用中被廣泛地使用,但不適合于系統合成,硬件模擬也是它的一項功能。TSS:TSS(Tool for System Simulation)是模擬復雜硬件的工具,采用 C 語言編寫,單個模塊的提取可由用戶控制,可以方便地進行添加與刪除模塊。但不支持分級模塊,沒有用于同步各處理器存取共享數據結構的機制,模塊間的通信通過端口和總線進行。并且,TSS 支持多核系統的模擬。

1.系統架構設計
描述系統如何實現規格說明中定義的功能是系統架構設計的主要目的。但是在設計嵌入式系統的系統結構時,很難將軟件和硬件完全分開。通常的處理是先考慮系統的軟件架構,然后再考慮其硬件實現。系統結構的描述必須符合功能上和非功能上的需求。不僅所要求的功能要體現,而且成本、速度、功耗等非功能約束也要滿足。從系統原始框圖中的功能元素開始逐個考慮和細化,把原始框圖轉化為軟件和硬件系統結構的同時考慮非功能約束,是一個切實可行的方法。下面以 GPS 移動地圖系統的架構設計為例進行說明。

(1)原始框圖。如圖 12-18 所示,這個原始框圖是移動地圖系統的主要操作和數據流。
在這里插入圖片描述
(2)軟件系統架構。如圖 12-19 所示,軟件系統主要由用戶界面、數據庫搜索引擎和數據轉換器組成。
在這里插入圖片描述
(3)硬件系統架構。如圖 12-20 所示,硬件系統采用通用微處理器、存儲器和 I/O 設備組成。本系統選用兩種存儲器:通用數據、程序存儲器和針對像素顯示的幀緩沖存儲器。
在這里插入圖片描述
2.硬件子系統設計
嵌入式系統的開發環境由 4 部分組成:目標硬件平臺、嵌入式操作系統、編程語言和開發工具,其中處理器和操作系統的選擇應當考慮更多的因素,避免錯誤的決策影響項目的進度。

(1)選擇處理器技術。嵌入式系統設計的主要挑戰是如何使互相競爭的設計指標同時達到最佳化。設計者必須對各種處理器技術和 IC 技術的優缺點加以取舍。一般而言,處理器技術與 IC 技術無關,也就是說,任何處理器技術都可以使用任何 IC 技術來實現,但是最終器件的性能、NRE 成本、功耗、大小等指標會有很大的差異,如圖 12-21 所示。
在這里插入圖片描述
更通用的可編程技術提供了較大的靈活性,降低了 NRE 成本,建立產品樣機與上市的時間較快。定制的技術能夠提供較低的功耗、較好的性能、更小的體積和大批量生產時的低成本。

通常,一個公司要推出一種產品,如機頂盒、家庭路由器或通用處理器等,可以先推出半定制產品,以盡快占領市場,然后再推出全定制的產品。也可先用較可靠的老技術實現處理器,再用新制程的技術實現下一代。同樣,嵌入式系統的設計者可以使用可編程的器件來建立樣機,以加速上市時間,批量時再采用定制器件。 根據這些原則,設計者便可以對采用的處理器技術和處理器做出合理選擇。一般,全定制商品化的“通用處理器 軟件”是大多數情況下都適用的一個選擇。

(2)通用嵌入式處理器的選擇。根據用戶的需求和項目的需要選擇合適的通用嵌入式處理器,選擇時需要考慮如下指標。
處理器的速度。一個處理器的性能取決于多個方面的因素:時鐘頻率,內部寄存器的大小,指令是否對等處理所有的寄存器等。對于許多需用處理器的嵌入式系統設計來說,目標不是在于挑選速度最快的處理器,而是在于選取能夠完成作業的處理器和 I/O 子系統。處理器的性能滿足系統的需求,并有一定的余量,但也不必選得太高。技術指標。當前,許多嵌入式處理器都集成了外圍設備的功能,從而減少了芯片的數量,進而降低了整個系統的開發費用。開發人員首先考慮的是,系統所要求的一些硬件能否無須過多的組合邏輯就可以連接到處理器上。其次是考慮該處理器的一些支持芯片,如 DMA 控制器、內存管理器、中斷控制器、串行設備、時鐘等的配套。開發人員對處理器的熟悉程度,即項目的開發人員需要在處理器本身的成本和開發成本之間做一個權衡。

處理器的 I/O 功能是否滿足系統的需求,即許多處理器提供內置的外部設備,以減少芯片數量、降低成本,應盡量考慮這種方案。處理器的相關軟件支持工具,即該款處理器是否具有完善的嵌入式操作系統、編程語言和開發工具的支持等。

處理器的調試,即處理器是否集成了調試功能,如是否支持 JTAG、BDM 等調試方式。處理器制造商的支持可信度。在產品的生命周期里選擇某種處理器時,設計者必須確認它有足夠的供貨量、技術支持等處理器的低功耗。

嵌入式微處理器最大并且增長最快的市場是手持設備、電子記事本、PDA、手機、GPS 導航器、智能家電等消費類電子產品,這些產品中選購的微處理器的典型特點是要求高性能、低功耗。許多 CPU 生產廠家已經進入了這個領域。

(3)硬件設計的注意事項。首先,將硬件劃分為部件或模塊,并繪制部件或模塊連接框圖。其次,對每個模塊進行細化,把系統分成更多個可管理的小塊,可以被單獨實現。通常,系統的某些功能既可用軟件實現也可用硬件實現,沒有一個統一的方法指導設計者決定功能的軟硬件分配,但是可以根據約束清單,在性能和成本之間進行權衡。設計軟、硬件之間的接口時,需要硬件設計者和軟件設計者協同工作才能完成,良好的接口設計可以保證硬件簡潔、易于編程。 設計時需要注意以下幾點。

  • I/O 端口:列出硬件的所有端口、端口地址、端口屬性、使用的命令和序列的意義、端口的
    狀態及意義。
  • 硬件寄存器:對每個寄存器設計寄存器的地址、寄存器的位地址和每個位表示的意義,以及
  • 對寄存器讀寫的說明、使用該寄存器的要求和時序說明。
  • 內存映射:共享內存和內存映射 I/O 的地址,對每個內存映射,說明每個 I/O 操作的讀/寫序列、地址分配。
  • 硬件中斷:如何使用硬件中斷,列出所使用的硬件中斷號和分配的硬件事件。
  • 存儲器空間分配:列出系統中程序和數據占用的空間大小、位置,以及存儲器類型和訪問方式等。

總之,硬件設計者應該給軟件設計者更多、更詳細的信息,以便于進行軟件設計和開發。

3.軟件子系統設計
根據需求分析階段的規格說明文檔,確定系統計算模型,對軟件部分進行合理的設計即可。
(1)操作系統的選擇。在選擇嵌入式操作系統時,需要做多方面的考慮:
操作系統的功能。根據項目需要的操作系統功能來選擇操作系統產品,要考慮系統是否支持操作系統的全部功能或部分功能,是否支持文件系統、人機界面,是實時系統還是分時系統及系統是否可裁減等因素。

配套開發工具的選擇。有些實時操作系統(rtos)只支持該系統供應商的開發工具。也就是說,還必須向操作系統供應商獲取編譯器、調試器等。有些操作系統使用廣泛且有第三方工具可用,因此,選擇的余地比較大。操作系統的移植難易程度。操作系統到硬件的移植是一個重要的問題。它是關系到整個系統能否按期完工的一個關鍵因素,因此要選擇那些可移植性程度高的操作系統,從而避免操作系統難以向硬件移植而帶來的種種困難,加速系統的開發進度。操作系統的內存需求如何。均衡考慮是否需要額外 ram 或 eeprom 來迎合操作系統對內存的較大要求。有些操作系統對內存的要求是與目標相關的。如 tornado/vxworks,開發人員能按照應用需求分配所需的資源,而不是為操作系統分配資源。從需要幾 k 字節存儲區的嵌入設計到需求更多的操作系統功能的復雜的高端實時應用,開發人員可任意選擇多達 80 種不同的配置。

操作系統附加軟件包。是否包含所需的軟件部件,如網絡協議棧、文件系統、各種常用外設的驅動等。操作系統的實時性如何。實時性分為軟實時和硬實時。有些嵌入式操作系統只能提供軟實時性能,如 microsoft windows ce 2.0 是 32 位,windows 兼容,微內核,可伸縮實時操作系統,可以滿足大部分嵌入式和非嵌入式應用的需要。但實時性不夠強,屬于軟實時嵌入式操
作系統。操作系統的靈活性如何。操作系統是否具有可剪裁性,即能否根據實際需要進行系統功能的剪裁。有些操作系統具有較強的可剪裁性,如嵌入式 linux 、 tornado/vxworks 等。

(2)編程語言的選擇。在選擇編程語言時,也需要做多方面的考慮:

通用性。隨著微處理器技術的不斷發展,其功能越來越專用,種類越來越多,但不同種類的微處理器都有自己專用的匯編語言。這就為系統開發者設置了一個巨大的障礙,使得系統編程更加困難,軟件重用無法實現,而高級語言一般和具體機器的硬件結構聯系較少,比較流行的高級語言對多數微處理器都有良好的支持,通用性較好。

可移植性。由于匯編語言和具體的微處理器密切相關,為某個微處理器設計的程序不能直接移植到另一個不同種類的微處理器上使用,因此,移植性差。高級語言對所有微處理器都是通用的,因此,程序可以在不同的微處理器上運行,可移植性較好。這是實現軟件重用的基礎。執行效率。一般來說,越是高級的語言,其編譯器和開銷就越大,應用程序也就越大、越慢。但單純依靠低級語言,如匯編語言來進行應用程序的開發,帶來的問題是編程復雜、開發周期長。因此,存在一個開發時間和運行性能之間的權衡。

可維護性。低級語言如匯編語言,可維護性不高。高級語言程序往往是模塊化設計,各個模塊之間的接口是固定的。因此,當系統出現問題時,可以很快地將問題定位到某個模塊內,并盡快得到解決。另外,模塊化設計也便于系統功能的擴充和升級。
基本性能。在嵌入式系統開發過程中使用的語言種類很多,比較廣泛應用的高級語言有 Ada、C/C++、Modula-2 和 Java 等。Ada 語言定義嚴格,易讀易懂,有較豐富的庫程序支持,目前,在國防、航空、航天等相關領域應用比較廣泛,未來仍將在這些領域占有重要地位。C 語言具有廣泛的庫程序支持,是嵌入式系統中應用最廣泛的編程語言,在將來很長一段時間內仍將在嵌入式系統應用領域中占重要地位。 C++是一種面向對象的編程語言,在嵌入式系統設計中也得到了廣泛的應用,如 GNU C++。Visual C++是一種集成開發環境,支持可視化編程,廣泛應用于 GUI 程序開發。但 C 與 C++相比,C++的目標代碼往往比較龐大和復雜,在嵌入式系統應用中應充分考慮這一因素。

(3)軟件開發過程。嵌入式軟件的開發過程不同于一般通用軟件的開發過程,主要有如下步驟:

  • 選擇開發語言,建立交叉開發環境;
  • 根據詳細設計說明編寫源代碼,進行交叉編譯、鏈接;
  • 目標代碼的重定位和下載;
  • 在宿主機或目標機調試、驗證軟件功能;
  • 進行代碼的優化。

(4)軟件開發文檔。在嵌入式產品的開發設計過程中,開發階段完成系統產品的實現,這一階段同時需要完成一系列的文檔,這些文檔對完成產品設計、維護相當重要,這些文檔分別為技術文件目錄、技術任務書、技術方案報告、產品規格、技術條件、設計說明書、試驗報告、總結報告等。

12.7.8 系統集成與測試

通常嵌入式系統測試主要包括軟件測試、硬件測試、單元測試三個部分。 一般系統的硬件測試包括可靠性測試和電磁兼容性測試,關于電磁兼容性目前已經有了強制性國內和國際標準。

嵌入式系統軟件測試方法和原理跟通用軟件的測試基本一致,軟件測試時,一般需要測試實例或測試序列,序列有兩種來源:一種是需要用戶進行設計,另一種是標準的測試序列。無論哪種測試實例,都要求實例能夠高概率發現更多的錯誤,但在測試的內容上有些差別:
(1)嵌入式軟件必須長時間穩定運行。
(2)嵌入式軟件一般不會頻繁地版本升級。
(3)嵌入式軟件通常使用在關鍵性的應用中。
(4)嵌入式軟件必須和嵌入式硬件一起對產品的故障和可靠性負責。
(5)現實世界的條件是異步和不可預測的,使得模擬測試非常困難。
由于這些差別,使得嵌入式系統軟件測試主要集中在以下 4 個不同的方面:
(1)因為實時性和同時性很難同時滿足,所以大多數測試集中于實時測試。
(2)大多數實時系統都有資源約束,因此需要更多的性能和可用性測試。
(3)可以使用專用實時跟蹤工具對代碼覆蓋率進行測試。
(4)對可靠性的測試級別比通用軟件要高得多。
另外,性能測試也是設計嵌入式系統中需要完成的最主要的測試活動之一,對嵌入式系統有決定性的影響。
由于嵌入式系統的專用性特點,系統的硬件平臺和軟件平臺多種多樣,每種都針對不同的應用而專門設計,因此,應用軟件在各個平臺之間很少具有通用性,并且嵌入式系統的更新換代速度相對較快。為了保護已有的投資、充分利用現有的軟件資源和加快產品研制速度,軟件的移植在嵌入式領域變得非常頻繁。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44120.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44120.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44120.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MyBatis(38)MyBatis 如何與 Spring Boot 集成,有哪些實踐技巧

集成MyBatis與Spring Boot可以極大地提升開發效率&#xff0c;簡化配置&#xff0c;并利用Spring Boot的自動配置特性優化項目結構和性能。下面我們將詳細探討如何實現這一集成&#xff0c;并分享一些實踐技巧。 1. 添加依賴 首先&#xff0c;在pom.xml中添加MyBatis和Spring…

AI學習指南機器學習篇-聚類樹的剪枝

AI學習指南機器學習篇-聚類樹的剪枝 在機器學習領域&#xff0c;聚類是一種常用的無監督學習方法&#xff0c;通過對數據進行分組來發現數據中的結構和模式。聚類樹是一種常用的聚類算法之一&#xff0c;它通過構建一個樹狀結構來展示聚類的層次關系&#xff0c;并能夠幫助我們…

Linux 忘記root密碼,通過單用戶模式修改

銀河麒麟桌面操作系統 V10&#xff08;sp1&#xff09;”忘記用戶密碼&#xff0c;需要修改用戶密碼所寫&#xff0c;可用于 X86 架構和 arm 架構。 2. 選擇第一項&#xff0c;在上圖界面按“e”鍵進行編輯修改。 3. 在以 linux 開頭這行的行末&#xff0c;添加“init/bin/bas…

Rockchip Android平臺編譯生成userdata.img

Rockchip Android平臺編譯生成userdata.img 適用版本 本修改方法適用于Android12及以上版本 代碼修改 device/rockchip/rk3576&#xff1a; --- a/rk3576_u/BoardConfig.mkb/rk3576_u/BoardConfig.mk-28,4 28,7 PRODUCT_KERNEL_CONFIG pcie_wifi.configBOARD_GSENSOR_MXC…

SSE(Server-Send-Event)服務端推送數據技術

SSE&#xff08;Server-Send-Event&#xff09;服務端推送數據技術 大家是否遇到過服務端需要主動傳輸數據到客戶端的情況&#xff0c;目前有三種解決方案。 客戶端輪詢更新數據。服務端與客戶端建立 Socket 連接雙向通信服務端與客戶建立 SSE 連接單向通信 幾種方案的比較&…

【前端】fis框架學習

文章目錄 1. 介紹 1. 介紹 FIS是專為解決前端開發中自動化工具、性能優化、模塊化框架、開發規范、代碼部署、開發流程等問題的工具框架。 使用FIS我們可以快速的完成各種前端項目的資源壓縮、合并等等各種性能優化工作&#xff0c;同時FIS還提供了大量的開發輔助功能 首先我們…

Nginx上配置多個網站

一、需求描述 我們只有一臺安裝了Nginx的服務器,但是我們需要實現在這臺服務器上部署多個網站,用以對外提供服務。 二、Nginx上配置多個網站分析 一般網站的格式為:【http://ip地址:端口號/URI】(比如:http://192.168.3.201:80),IP地址也可用域名表示;那么要實現在Nginx…

QT實現WebSocket通信

文章目錄 WebSocket服務端WebSocket客戶端html websocket客戶端在Qt5中實現WebSocket通信可以通過使用QtWebSockets模塊來實現。這個模塊提供了一個WebSocket客戶端和服務器的實現,可以很方便地在你的應用程序中集成WebSocket功能。 使用的時候,首先在pro工程文件中添加對應的…

【Vue】vue-element-admin概述

一、項目簡介 定位&#xff1a;vue-element-admin是一個后臺集成解決方案&#xff0c;旨在提供一種快速開發企業級后臺應用的方案&#xff0c;讓開發者能更專注于業務邏輯和功能實現&#xff0c;而非基礎架構的搭建。技術棧&#xff1a;該項目基于Vue.js、Element UI、Vue Rou…

Redis 7.x 系列【24】哨兵模式配置項

有道無術&#xff0c;術尚可求&#xff0c;有術無道&#xff0c;止于術。 本系列Redis 版本 7.2.5 源碼地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目錄 1. 前言2. 配置項2.1 protected-mode2.2 port2.3 daemonize2.4 pidfile2.5 loglevel2.…

i18n、L10n、G11N 和 T9N 的含義

注&#xff1a;機翻&#xff0c;未校對。 Looking into localization for the first time can be terrifying, if only due to all of the abbreviations. But the meaning of i18n, L10n, G11N, and T9N, are all very easy to understand. 第一次研究本地化可能會很可怕&…

深入探索Python Web抓取世界:利用BeautifulSoup與Pandas構建全面的網頁數據采集與分析流程

引言 在信息爆炸的時代&#xff0c;網絡成為了一個無盡的知識寶庫&#xff0c;其中包含了大量有價值的公開數據。Python作為一種靈活多變且具有強大生態系統支持的編程語言&#xff0c;尤其擅長于數據的收集、處理與分析工作。本文將聚焦于Python的兩大利器——BeautifulSoup和…

如何做一個遲鈍不受傷的打工人?

一、背景 在當前激烈的職場環境中&#xff0c;想要成為一個相對“遲鈍”且不易受傷的打工人&#xff0c;以下是一些建議&#xff0c;但請注意&#xff0c;這里的“遲鈍”并非指智力上的遲鈍&#xff0c;而是指在應對復雜人際關系和壓力時展現出的豁達與鈍感力&#xff1a; 尊重…

【測開能力提升-fastapi框架】fastapi路由分發

1.7 路由分發 apps/app01.py from fastapi import APIRouterapp01 APIRouter()app01.get("/food") async def shop_food():return {"shop": "food"}app01.get("/bed") async def shop_food():return {"shop": "bed&…

部署stable-diffusion時遇到RuntimeError: Couldn‘t clone Stable Diffusion XL.問題

錯誤信息如下&#xff1a; venv "E:\AI\stable-diffusion-webui-master\venv\Scripts\Python.exe" fatal: ambiguous argument HEAD: unknown revision or path not in the working tree. Use -- to separate paths from revisions, like this: git <command>…

js前端隱藏列 并且獲取值,列表復選框

列表框 <div class"block" id"psi_wh_allocation_m"><table id"result" class"list auto hover fixed" style"width:100%;border-collapse:collapse"><thead><tr><%--<th></th>--%&…

LabVIEW濾波器性能研究

為了研究濾波器的濾波性能&#xff0c;采用LabVIEW設計了一套濾波器性能研究系統。該系統通過LabVIEW中的波形生成函數&#xff0c;輸出幅值及頻率可調的正弦波和白噪聲兩種信號&#xff0c;并將白噪聲與正弦波疊加&#xff0c;再通過濾波器輸出純凈的正弦波信號。系統通過FFT&…

Python從0到100(三十八):json字符串的數據提取

JSON的數據提取 1.學習目標 掌握JSON相關的方法&#xff08;load, loads, dump, dumps&#xff09;了解JSONPath的使用&#xff08;提取JSON中的數據&#xff09; 2 復習什么是JSON JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式&#xff0c;它使得人們很容…

富文本braft-editor插件分享

效果展示 安裝插件 npm install braft-editor 或者 yarn add braft-editor 主要代碼 import React, { useState, forwardRef } from react //引入富文本編輯器 import BraftEditor from braft-editor // 引入編輯器樣式 import braft-editor/dist/index.css import { B…

thinkphp8框架源碼精講

前言 很開心你能看到這個筆記&#xff0c;相信你對thinkphp是有一定興趣的&#xff0c;正好大家都是志同道合的人。 thinkphp是我入門學習的第一個框架&#xff0c;經過這么多年了&#xff0c;還沒好好的研究它&#xff0c;今年利用了空閑的時間狠狠的深入源碼學習了一把&…