日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

嵌入式的基础知识

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式的基础知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.嵌入式操作系統結構

一般情況下分為硬件子系統和軟件子系統;

硬件子系統主要包括:CPU小系統,電源模塊,調試模塊,時鐘模塊,接口模塊,復位和配置模塊;

軟件子系統主要包括:驅動層,中間層,應用層

?

2.實時操作系統

實時的本質是任務的處理是可預測的,也就說在確定的時間內完成任務的處理;實時操作系統是指在規定的時間內完成任務的處理。

實時操作系統分為兩類:硬實時和軟實時:通常是從精度上講,軟實時一般大于千分之一秒;硬實時一般都是微秒級的。

?

3.嵌入式處理器分類

主要分為MCU(C51,AVR),MPU(ARM,MIPS,PPC,X86),SOC,DSP。

?

4.嵌入式操作系統

按照實時性來分,強實時的有Vxworks,uc/OS, OSE;弱實時的有WinCE,Linux。

?

5.make

主要作用是讀入所有的makefile文件,初始化變量,推導出變量的隱晦規則,并分析規則,為所有的文件生成依賴關系鏈,根據依賴關系和文件修改情況,決定什么文件重新生成,然后執行生成命令。

?

6.makefle的作用

在通常的IDE集成環境中,不需要makefile,只需要建立好工程就可以了,因此IDE環境簡單一些;開發中使用makefile的很大程度上是指定編譯鏈接規則, 實現自動化編譯,由于makefile在開發中需要自己指定,所以相對于IDE要靈活。

?

7.GCC開發工具

由于Linux下是沒有圖形界面的,因此提供了相應的開發工具;

  • GCC:編譯工具,主要參數如下:
  • -v:查看編譯器的版本;
  • -c:只編譯不鏈接;
  • -o:鏈接,適合c文件;
  • -g:編譯時生成調試信息;
  • -gdwarf-2:附帶宏調試信息;
  • -fomit-frame-pointer:
  • -o1/2/3:編譯優化選項;
  • -l:指定頭文件目錄;?
  • ld:與makefile結合使用鏈接目標文件;
  • objdump:反匯編;
  • strip:剝離符號信息,減少目標或lib的大小;
  • gdb:命令行方式調試,-g參數編譯elf可執行文件
  • ddd:圖形界面

?

8.交叉編譯

什么是交叉編譯?在一個平臺上編譯出來可在另一個平臺上運行的可執行代碼,這個過程叫做交叉編譯,這個過程要關注一下平臺使用的硬件架構和操作系統。

為什么要使用交叉編譯?主要原因有兩點:1.當我們的目標機尚未建立起來,必須借助交叉編譯生成需要的bootloader和內核;2.目標機上有限的資源,主要表現在CPU的低性能和非常小的內存空間,對于編譯來說,不可能在目標機上構建編譯環境(只工具鏈就會占用很大的空間),因此,就在我們的PC上建立交叉編譯的環境,以生成在目標機上可執行文件。

我們經常在windows下面利用VC++編譯和調試C代碼,最終生成可以在windows下可執行的程序;同樣的道理,我們也可以在PC上(不論是windows還是linux)編譯可在目標機上運行的可執行程序,唯一不同的是我們需要安裝相對應的交叉編譯工具鏈(cross complication tool chain)。舉例如下:

  • 在Windows PC上,利用ADS(ARM 開發環境),使用armcc編譯器,則可編譯出針對ARM CPU的可執行代碼。
  • 在Linux PC上,利用arm-linux-gcc編譯器,可編譯出針對Linux ARM平臺的可執行代碼。
  • 在Windows PC上,利用cygwin環境,運行arm-elf-gcc編譯器,可編譯出針對ARM CPU的可執行代碼。

交叉開發環境可以自己建立,也可以采用廠家封裝好的集成開發環境,比較典型的集成交叉開發環境如下:

  • ARM ADS or SDT
  • MS E-VC or Windows Mobile
  • WindRiver Tornado,用于Vxworks
  • TI的CSS,用于DSP;
  • Freescale的Codewarrior,用于PPC;
  • GCC用于Linux的開發;

這里注意,創建交叉編譯器的時候要注意版本匹配問題,特別是Linux,要注意軟件包、Kernel、編譯器三者版本要match;設置交叉環境時,要把Tools和代碼路徑、makefile相關項都設置正確。

?

如何創建交叉開發環境呢?

1.打開目標板上的NFS,要求內核支持NFS,打開相應選項;

2.建立Gdb和Gdb Server;

基于GDB進行APP的調試,調試命令主要有:?

  • File:載入elf文件;
  • Run:啟動運行;
  • List:顯示當前的程序和函數;
  • Break:設置斷點;
  • Delete b:刪除斷點;
  • Next,step:單步運行;
  • Continue:斷點停止后繼續執行;
  • Bt,backtrace,顯示調用棧;
  • Print,查看變量;
  • Display:動態監視變量;

?

?

9.模塊編程

什么是模塊?模塊可以動態的改變內核的功能,這樣做可以提高靈活性,主要用于前期調試代碼時添加的調試模塊;

工具主要有:1. insmod

2.lsmod

3.rmmod

模塊的組成主要包括:內核頭文件,模塊加載和卸載的方法,設備的節點,File操作數據結構,open/close/write/read的方法,makefie

?

10.Bootloader

含義,boot是與硬件強相關的,主要是初始化硬件,為kernel的運行創造條件;loader是把kernel拷貝到內存中,并且跳轉到相應地址開始運行;bootloader由于和硬件是強相關的,因此不同的CPU架構對應著不同類型的bootloader,主要有以下幾種不同的bootloader,如下所示:

Bootloader????????????????????????? CPU?????????????????????????? OS

Grub??????????????????????????????????? X86?????????????????????????? linux,windows

Lilo????????????????????????????????????? X86?????????????????????????? Linux

U-boot??????????????????????????????? ARM,PPC,MIPS?????? Linux,Vxworks,PSOS

Redboot????????????????????????????? ARM?????????????????????????? eCos

Vivi???????????????????????????????????? 三星ARM ? ? ? ? ? ? ? ? ? ?? Linux

Bootrom???????????????????????????? PPC??????????????????????????? Vxworks

Blob?????????????????????????????????? Intel PXA系列?????????????? Linux

?

與主機通信協議:1.串口:kermit,xmodem,ymodem,速率較慢,適用于網口未初始化,相關工具主要有SecureCRT,putty;

2.網口:TFTP,NFS,速度很快;

?

不管是什么樣的架構,bootloader遵循“stage1+stage2”原則:

  • 與體系架構強相關,與體系架構無關;
  • Flash+RAM;
  • 匯編+C;

Stage1:通常使用匯編,初始化CPU的核心寄存器,RAM檢查和初始化,拷貝代碼到RAM中,設置堆棧,跳轉到C入口處執行;

Stage2:通常是C語言,初始化CPU非核心寄存器,初始化相關外設,等待用戶輸入,如果用戶在設定時間內無輸入就拷貝內核和文件系統到內存中,然后跳轉到內核入口;

總結

以上是生活随笔為你收集整理的嵌入式的基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。