<th id="ik4gr"><pre id="ik4gr"></pre></th>
<rp id="ik4gr"></rp>
    <dd id="ik4gr"></dd>

  1. <rp id="ik4gr"><object id="ik4gr"><blockquote id="ik4gr"></blockquote></object></rp>
      <rp id="ik4gr"></rp>
        <button id="ik4gr"><acronym id="ik4gr"></acronym></button>
      1. <rp id="ik4gr"><object id="ik4gr"><input id="ik4gr"></input></object></rp>
        1. 杭州嵌入式培訓
          達內杭州嵌入式培訓中心

          13175137725

          學習嵌入式知識

          • 時間:2018-06-20 16:01
          • 發布:杭州嵌入式培訓
          • 來源:企業面試題

          一個嵌入式系統通常包括兩類模塊:

          (1)硬件驅動模塊,一種特定硬件對應一個模塊;

          (2)軟件功能模塊,其模塊的劃分應滿足低偶合、高內聚的要求。

          多任務還是單任務

          所謂"單任務系統"是指該系統不能支持多任務并發操作,宏觀串行地執行一個任務。而多任務系統則可以宏觀并行(微觀上可能串行)地"同時"執行多個任務。

          多任務的并發執行通常依賴于一個多任務操作系統(OS),多任務OS的核心是系統調度器,它使用任務控制塊(TCB)來管理任務調度功能。TCB包括任務的當前狀態、優先級、要等待的事件或資源、任務程序碼的起始地址、初始堆棧指針等信息。調度器在任務被激活時,要用到這些信息。此外,TCB還被用來存放任務的"上下文"(context)。任務的上下文就是當一個執行中的任務被停止時,所要保存的所有信息。通常,上下文就是計算機當前的狀態,也即各個寄存器的內容。當發生任務切換時,當前運行的任務的上下文被存入TCB,并將要被執行的任務的上下文從它的TCB中取出,放入各個寄存器中。

          嵌入式多任務OS的典型例子有Vxworks、ucLinux等。嵌入式OS并非遙不可及的神壇之物,我們可以用不到1000行代碼實現一個針對80186處理器的功能最簡單的OS內核。

          究竟選擇多任務還是單任務方式,依賴于軟件的體系是否龐大。例如,絕大多數手機程序都是多任務的,但也有一些小靈通的協議棧是單任務的,沒有操作系統,它們的主程序輪流調用各個軟件模塊的處理程序,模擬多任務環境。

          單任務程序典型架構

          (1)從CPU復位時的指定地址開始執行;

          (2)跳轉至匯編代碼startup處執行;

          (3)跳轉至用戶主程序main執行,在main中完成:

          a.初試化各硬件設備;

          b.初始化各軟件模塊;

          c.進入死循環(無限循環),調用各模塊的處理函數

          用戶主程序和各模塊的處理函數都以C語言完成。用戶主程序最后都進入了一個死循環,其首選方案是:

          有的程序員這樣寫

          這個語法沒有確切表達代碼的含義,我們從for(;;)看不出什么,只有弄明白for(;;)在C語言中意味著無條件循環才明白其意。

          下面是幾個"著名"的死循環:

          (1)操作系統是死循環;

          (2)WIN32程序是死循環;

          (3)嵌入式系統軟件是死循環;

          (4)多線程程序的線程處理函數是死循環。

          你可能會辯駁,大聲說:"凡事都不是絕對的,2、3、4都可以不是死循環"。Yes,you are right,但是你得不到鮮花和掌聲。實際上,這是一個沒有太大意義的牛角尖,因為這個世界從來不需要一個處理完幾個消息就喊著要OS殺死它的WIN32 程序,不需要一個剛開始RUN就自行了斷的嵌入式系統,不需要莫名其妙啟動一個做一點事就干掉自己的線程。有時候,過于嚴謹制造的不是便利而是麻煩。君不見,五層的TCP/IP協議棧超越嚴謹的ISO/OSI七層協議棧大行其道成為事實上的標準?

          經常有網友討論:

          等類似問題。面對這些問題,我們只能發出由衷的感慨:世界上還有很多有意義的事情等著我們去消化攝入的食物。

          實際上,嵌入式系統要運行到世界末日。

          中斷服務程序

          中斷是嵌入式系統中重要的組成部分,但是在標準C中不包含中斷。許多編譯開發商在標準C上增加了對中斷的支持,提供新的關鍵字用于標示中斷服務程序 (ISR),類似于__interrupt、#program interrupt等。當一個函數被定義為ISR的時候,編譯器會自動為該函數增加中斷服務程序所需要的中斷現場入棧和出棧代碼。

          中斷服務程序需要滿足如下要求:

          (1)不能返回值;

          (2)不能向ISR傳遞參數;

          (3) ISR應該盡可能的短小精悍;

          (4) printf(char * lpFormatString,…)函數會帶來重入和性能問題,不能在ISR中采用。

          在某項目的開發中,我們設計了一個隊列,在中斷服務程序中,只是將中斷類型添加入該隊列中,在主程序的死循環中不斷掃描中斷隊列是否有中斷,有則取出隊列中的第一個中斷類型,進行相應處理。

          在主程序循環中判斷是否有中斷

          按上述方法設計的中斷服務程序很小,實際的工作都交由主程序執行了。

          硬件驅動模塊

          一個硬件驅動模塊通常應包括如下函數:

          (1)中斷服務程序ISR

          (2)硬件初始化

          a.修改寄存器,設置硬件參數(如UART應設置其波特率,AD/DA設備應設置其采樣速率等);

          b.將中斷服務程序入口地址寫入中斷向量表:

          (3)設置CPU針對該硬件的控制線

          a.如果控制線可作PIO(可編程I/O)和控制信號用,則設置CPU內部對應寄存器使其作為控制信號;

          b.設置CPU內部的針對該設備的中斷屏蔽位,設置中斷方式(電平觸發還是邊緣觸發)。

          (4)提供一系列針對該設備的操作接口函數。例如,對于LCD,其驅動模塊應提供繪制像素、畫線、繪制矩陣、顯示字符點陣等函數;而對于實時鐘,其驅動模塊則需提供獲取時間、設置時間等函數。

          C的面向對象化

          在面向對象的語言里面,出現了類的概念。類是對特定數據的特定操作的集合體。類包含了兩個范疇:數據和操作。而C語言中的struct僅僅是數據的集合,我們可以利用函數指針將struct模擬為一個包含數據和操作的"類"。下面的C程序模擬了一個最簡單的"類":

          我們可以利用C語言模擬出面向對象的三個特性:封裝、繼承和多態,但是更多的時候,我們只是需要將數據與行為封裝以解決軟件結構混亂的問題。C模擬面向對象思想的目的不在于模擬行為本身,而在于解決某些情況下使用C語言編程時程序整體框架結構分散、數據和函數脫節的問題。我們在后續章節會看到這樣的例子。

          預約申請免費試聽課

          怕錢不夠?就業掙錢后再付學費!    怕學不會?從入學起,達內定制課程!     擔心就業?達內多家實踐企業供你挑選!

          上一篇:嵌入式開發的發展前景好嗎
          下一篇:ARM發布了一系列IP以保護芯片免受物理攻擊
          • 掃碼領取資料

            回復關鍵字:視頻資料

            免費領取 達內課程視頻學習資料

          • 視頻學習QQ群

            添加QQ群:1143617948

            免費領取達內課程視頻學習資料

          Copyright ? 2018 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

          選擇城市和中心
          江西省

          貴州省

          廣西省

          海南省

          香蕉视频在线一级a做爰片免费观看视频 欧美成年性色生活片 百度 好搜 搜狗
          <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>