免费 无码进口视频|欧美一级成人观看|亚洲欧美黄色的网站|高清无码日韩偷拍|亚太三区无码免费|在找免费看A片色片一区|激情小说亚洲精品|91人妻少妇一级性av|久久国产综合精品日韓|一级美女操逼大片

心得體會

嵌入式實驗心得體會

時間:2022-10-01 19:17:18 心得體會 我要投稿
  • 相關推薦

嵌入式實驗心得體會

  嵌入式實驗心得體會

嵌入式實驗心得體會

  學期開始,我們開始學習《嵌入式系統(tǒng)及應用》,由于初次接觸嵌入式系統(tǒng),感覺蠻難的,所以收獲不是很大,很多的概念都比較模糊,等到學期結束開始做嵌入式課程設計時,真是茫然無從下手,自從拿到設計主題后,我就像熱鍋上的螞蟻,一個字“急”。最后實在沒有辦法,逼著自己去學習,查資料,總算對嵌入式有了淺層理解。

  嵌入式系統(tǒng)本身是一個相對模糊的定義,一個手持的MP3和一個PC104的微型工業(yè)控制計算機都可以認為是嵌入式系統(tǒng)?傮w來說,嵌入式系統(tǒng)是“用于控制,監(jiān)視或者輔助操作機器和設備的裝備”。

  一個典型的桌面Linux系統(tǒng)包括3個主要的軟件層---linux內(nèi)核、C庫和應用程序代碼。內(nèi)核是唯一可以完全控制硬件的層,內(nèi)核驅動程序代表應用程序與硬件之間進行會話。內(nèi)核之上是C庫,負責把POSIX API轉換為內(nèi)核可以識別的形式,然后調(diào)用內(nèi)核,從應用程序向內(nèi)核傳遞參數(shù)。應用程序依靠驅動內(nèi)核來完成特定的任務。

  在了解了基礎知識之后,我開始進行上機操作,當然,其中遇到很多的難題,很多東西都是第一次接觸,又沒有別人在旁邊指導操作,完全憑借自己去摸索練習。其中的困難可想而知。然而堅持就是勝利,牙一咬眼一閉堅持做下去,而通過本次實驗,我感覺收獲還是蠻多的?赡芪覍τ谇度胧降闹R學習的還是不太多,但是這之外的東西收獲頗豐。

  它讓我學會了如何通過自己的努力去認知一個新事物,更重要的是端正自己的學習態(tài)度,只有真正下功夫去學習,才能有收獲,正所謂“一份耕耘,一份收獲。”沒有付出,何談回報呢?再者,通過本次實驗,我也學會了如何去分析問題,如何找出自己設計中的不足,繼而去排除解決問題,這就是一個自我學習的過程。當我們通過實驗去學習理論知識時,自己動手得出的結論,不僅能加深我們對嵌入式的理解,更能加深我們對此的記憶。

  當然,在這其中,我也發(fā)現(xiàn)自己的許多不足之處,由于學期伊始我沒有好好學習,才落到如此地步,這也可以說是一個教訓吧!我相信在以后的學習工作中,我一定會端正自己的學習態(tài)度,一絲不茍的去對待每一件事。只有做好足夠的準備,才能事半功倍!

  《嵌入式系統(tǒng)原理》課程設計實驗報告

  一、 Uboot簡介

  Uboot是1999年由德國DENX軟件工程中心的Wolfgang Denk發(fā)起的,全稱Universal Bootloader。具有如下特點:

  ★支持多種硬件構架:包括ARM、x86、PPC、MIPS、m68k、NIOS、Blackfin

  ★支持多種操作系統(tǒng):包括Linux、VxWorks、NETBSD、QNX、RTEMS、ARTOS、LynxOS

  ★支持多達216種以上的開發(fā)板

  ★開放源代碼,遵循GPL條款

  ★易于移植、調(diào)試

  二、 實驗目的

  1、進一步了解Uboot的啟動流程

  2、進一步分析Uboot的啟動過程

  3、實現(xiàn)Uboot的移植

  三、 實驗內(nèi)容

  分析Uboot的啟動流程,實現(xiàn)Uboot的移植

  四、 實驗步驟及結果

  1、Uboot的啟動流程、分析

  U-Boot的啟動過程可以分成3個階段。首先在Flash中運行匯編程序,將Flash中的啟動代碼部分復制到SDRAM中,同時創(chuàng)造環(huán)境準備運行C程序;然后在SDRAM中執(zhí)行,對硬件進行初始化;最后設置內(nèi)核參數(shù)的標記列表,復制鏡像文件,進入內(nèi)核的入口函數(shù)。

  1) 程序首先在Flash中運行CPU入口函數(shù)/cpu/arm920t/start.s。具體工作包括:設置異常的入口地址和異常處理函數(shù);配置PLLCON寄存器,確定系統(tǒng)的主頻;屏蔽看門狗和中斷;初始化I/O寄存器;關閉MMU功能;初始化存儲器空間,設置刷新頻率;將U-Boot的內(nèi)容復制到SDRAM中;設置堆棧的大小,ldr pc, _start_armboot。board/yqliu2410中config.mk文件(TEXT_BASE = 0x31F00000)用于設置程序編譯連接的起始地址,在程序中要特別注意與地址相關指令的使用。當程序在Flash中運行時,執(zhí)行程序跳轉時必須要使用跳轉指令,而不能使用絕對地址的跳轉(即直接對PC操作)。如果使用絕對地址,那么,程序的取指是相對于當前PC位置向前或者向后的32MB空間內(nèi),而不會跳入SDRAM中。

  2) 程序跳轉到SDRAM中執(zhí)行/lib_arm/board.c中的start_armboot()函數(shù)。該

  函數(shù)將完成如下工作:

  *設置通用端口;設置處理器類型;設置啟動參數(shù)地址;

  * env_init:設置環(huán)境變量,初始化環(huán)境;

  * init_baudrate:設置串口的波特率;

  * serial_init:設置串口的工作方式;

  * flash_init:設置ID號、每個分頁的起始地址等信息,將信息送到相應的結構體中;

  * dram_init:設置SDRAM的起始地址和大小;

  * env_relocate:將環(huán)境變量的地址送到全局變量結構體中;

  * enable_interrupts:開啟中斷;

  * main_loop:該函數(shù)主要用于設置延時等待,從而確定目標板是進入下載操作模式還是下載鏡像文件啟動內(nèi)核。在設定的延時時間范圍內(nèi),目標板將在串口等待輸入命令,當目標板接到正確的命令后,系統(tǒng)進入下載模式。在延時時間到達后,如果沒有接收到相關命令系統(tǒng)將自動進入裝載模式。

  3) 裝載模式下系統(tǒng)將執(zhí)行do_bootm_linux()函數(shù),0x30008000是內(nèi)核在SDRAM中的起始地址;0x30800000是ramdisk在SDRAM中的起始地址;0x40000是內(nèi)核在Flash中的位置,0x100000是數(shù)據(jù)塊的大小;0x140000是ramdisk在FLASH中的位置,0x440000是數(shù)據(jù)塊的大小。系統(tǒng)調(diào)用memcpy()函數(shù)將內(nèi)核從flash和ramdisk復制到SDRAM中,具體如下:

  memcpy((void *)0x30008000, (void *)0x40000, 0x100000);//復制數(shù)據(jù)塊

  memcpy((void *)0x30800000, (void *)0x140000, 0x440000);//復制數(shù)據(jù)塊

  通常,將內(nèi)核參數(shù)傳遞給Linux操作系統(tǒng)有兩種方法:采用struct param_struct

  結構體或標記列表。

  一個合法的標記列表開始于ATAG_CORE,結束于ATAG_NONE。ATAG_CORE可以為

  空,一個空的ATAG_CORE的size字段設為“2”(0x00000002)。ATAG_NONE 的size

  字段必須設為“0”。標記列表可以有任意多的標記(tag)。在嵌入式Linux系統(tǒng)中,

  通常由U-Boot設置的啟動參數(shù)有:ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD等。

  在本系統(tǒng)中,傳遞參數(shù)時分別調(diào)用了以下tag:

  setup_start_tag(bd); //標記列表開始

  setup_memory_tags(bd); //設置內(nèi)存的起始位置和大小

  setup_commandline_tag(bd, commandline); /*Linux內(nèi)核在啟動時可以命令

  行參數(shù)的形式來接收信息,利用這一點可以向內(nèi)核提供那些內(nèi)核不能檢測的硬件參

  數(shù)信息,或者重載(override)內(nèi)核檢測到的信息。

  setup_ramdisk_tag(bd); //表示內(nèi)核解壓后ramdisk的大小

  setup_initrd_tag(bd, initrd_start, initrd_end); //設置ramdisk的大小

  和物理起始地址

  setup_end_tag(bd); //標記列表結束

  其中bd_t *bd = gd->bd是指向bd_t 結構體的指針,在該結構體中存放了關于

  開發(fā)板配置的基本信息。

  系統(tǒng)采用下列代碼來進入內(nèi)核函數(shù):

  theKernel = (void (*)(int, int))ntohl(hdr->ih_ep);

  hdr是image_header_t類型的結構體,hdr->ih_ep指向內(nèi)核的第一條指令地址,

  即Linux操作系統(tǒng)下的/kernel/arch/arm/boot/compressed/head.S匯編程序。theKernel()函數(shù)調(diào)用應該不會返回,如果該調(diào)用返回,則說明出錯。

  2、Uboot的移植步驟

  1)建立板級支持包

  根據(jù)S3C2410處理器,在board目錄下依照smdk2410目錄配置,創(chuàng)建自己開發(fā)板的板級資源目錄,相應的在include/configs目錄下創(chuàng)建頭文件。修改規(guī)則文件Makfile,添加開發(fā)板編譯參數(shù)支持

  2)添加外設支持

  添加存儲設備支持:NANDFLASH啟動支持

  添加網(wǎng)絡設備支持:DM9000A

  添加USB接口支持

  添加文件系統(tǒng)支持

  3)設置環(huán)境變量

  U-Boot中提供了豐富的命令,smdk2410開發(fā)板配置了一部分命令,我們需要通過相應的環(huán)境變量為自己的開發(fā)板增加一些命令:

  ² #define CONFIG_CMD_NAND

  ² #define CONFIG_CMD_PING

  ² #define CONFIG_CMD_DLF

  ² #define CONFIG_CMD_ENV

  ² #define CONFIG_CMD_NET

  ² #define CONFIG_BOOTDELAY 3

  ² #define CFG_LOAD_ADDR 0x30008000

  ² #define CFG_TFTP_LOAD_ADDR 0x30008000

  ² ……

  4)編譯U-boot

  配置開發(fā)板:# make uptech_2410class_config

  Configuring for uptech_2410class board.

  嵌入式開發(fā)心得

  從實習到現(xiàn)在搞嵌入式開發(fā)快一年了,驀然回首好像一年過得挺快,挺順利的。細細品味,發(fā)現(xiàn)這一年還是有很多值得回憶和總結的東西。至少這一年看書挺多,大概二十幾本,當然和那些一年看一百多本書的人沒法比,但是我已經(jīng)超越了自己。這是我大學畢業(yè)的第一年,初次走上社會,很想一展身手,可是.....其實也不用可是了,和很多朋友一樣碰了很多釘子,現(xiàn)在我和老板的關系就挺一般的,只是我性格還不錯。呵呵~~,做優(yōu)秀員工看來還得慢慢學。

  今年最大的收獲就是做了一個半項目,是在uClinux下面跑的。半個是SNMP-Agent的實現(xiàn),因為我去的時候snmpd已經(jīng)跑起來了,我只是實現(xiàn)部分管理功能;一個是基于Web的管理系統(tǒng),使公司的主打產(chǎn)品微波通信設備上網(wǎng)。這個項目是我一手策劃,一手實現(xiàn)(界面設計是一位女同事,很優(yōu)秀的程序員),從中學到的東西也最多,感情不可謂不深。

  SNMP即簡單網(wǎng)絡管理協(xié)議,其實一點都不簡單。在我所知的網(wǎng)絡協(xié)議里面,它僅僅比OSI的CMIP簡單一點,而CMIP直到現(xiàn)在還沒得到廣泛應用。我們能夠實現(xiàn)SNMP-Agent不能不感謝Carnegie Mellon大學免費發(fā)布的ucd-snmp軟件包。它使得開發(fā)人員專注于實現(xiàn)對特定設備的管理功能。

  我在項目中的工作主要是擴展MIB,實現(xiàn)相應的管理功能以及網(wǎng)絡功能的擴展。我們公司的MIB庫比較龐大,但是程序運行還是挺快的。因為ucd-snmp軟件包中大量使用回調(diào)函數(shù),而且它將MIB樹以二叉樹形式表示,但是每個結點不是單個的MIB結點,而是一個表,包括了多個結點。回調(diào)函數(shù)和兩層表示法的使用是操作快速的主要因素。

  基于Web的管理系統(tǒng)我原本是打算在設備外實現(xiàn)SNMP-Manager的功能,因為設備中已經(jīng)嵌入了Agent。這樣管理人員可以在世界各地通過WWW登錄公司的管理平臺,實現(xiàn)對所有設備的管理。但是老板想在設備中嵌入一個管理系統(tǒng),可以通過www管理單個設備就行。呵呵~~,這樣工作又輕松了一點,就按老板的意思做了。

  我用的http服務器是BOA,它比現(xiàn)在市場占有率第一的Apache速度要快。目前還只支持CGI,我就用C寫CGI程序,古老了點。但是在開發(fā)過程中感覺用CGI比用現(xiàn)在流行的ASP,JSP要爽,可以隨心所欲,哈哈~~,而且這也是用C\C++語言的優(yōu)點。CGI程序很簡單,它的輸入就是標準輸入,它的輸出就是標準輸出。BOA在uClinux上面跑總要出點問題的,出問題好,出了問題我就能找到問題,一來一往,我對socket編程,I/O多路等編程技術了解也就越來越深了。

  在Linux下面搞了一年,不愛上Linux都難,個人認為軟件開發(fā)人員在Linux下面進步是最快的。那么多優(yōu)秀的開源代碼供我們研究,猶如每天與世界上最優(yōu)秀的程序員打交道,進步于不經(jīng)意間。哈哈~~。正所謂“熟讀唐詩三百首,不會作詩也會吟”。GCC編譯器的優(yōu)秀不用多說,我覺得寫Makefile也是很件開心的事。不推薦程序員搞開發(fā)都用IDE,隔靴捎癢很不爽。但是Linux缺點也很明顯,聽歌、看碟、玩游戲不如Windows。恰巧公司的電腦沒音箱,干脆我就懶得用Windows了。

  用Linux而不講開源是不道德的,我們程序員享受著開源的好處,自然也要為開源做點貢獻。我開發(fā)的所有軟件都開源,但是我也有個“怪癖”:不喜歡別人在我代碼未完成的時候問我要源代碼。

  做嵌入式開發(fā)一年,稍稍有點心得。總結了一下,有以下幾點經(jīng)驗:

  1 .不要玩Linux。這一點主要是對像我這樣在Linux下面開發(fā)的程序員來說的。因為Linux對程序員的吸引力很大,但它下面可以直接用的軟件還是比較少。于是我們總想到網(wǎng)上找一些開源的軟件裝到我們的機器上,從無到有讓人很有成就感的,呵呵~~。要是裝上的不是最新版本的還不滿意,于是又開始忙升級。在Windows下這個過程大概沒什么意思,全都next了。在Linux下就不一樣了,直接拿過來的源代碼很多編譯都不能通過,最新版本更是這樣,得我們自己改,而且往往時改了又改。這個過程很花時間,我就在這方面浪費了很多時間,本來有個月工作比較輕松,打算閱讀Linux kernel代碼(也想成高手,呵呵~~),當時我機子上沒有好的閱讀工具,于是先弄了個source navigator,覺得不夠又裝了個open office,然后又找來了幾份不同版本的kernel代碼。結果一個月過去了,一個文件夾還沒看完。后面工作緊了,只能把看kernel當休息,直到現(xiàn)在才粗略看完fs,mm兩個文件夾。

  2.不要滿足于C語言。C語言很優(yōu)秀,也很簡單。程序設計能力不等同于用C語言能力。嵌入式開發(fā)程序員要有扎實的數(shù)據(jù)結構基礎,要積極的學習操作系統(tǒng),積極的學習網(wǎng)絡編程,要是想進行驅動開發(fā)還需要積極的學習硬件知識。

  3.了解幾種芯片體系結構。嵌入式不像PC領域x86一統(tǒng)天下,在嵌入式領域ARM、MIPS、M68k等各顯神通。例如ARM7是沒有MMU的,uClinux在它上面跑是最合適了,但是沒有MMU我們也必須實現(xiàn)簡單的MM功能,同時沒有MMU一些常用庫函數(shù)是不能實現(xiàn)的,這些嵌入式開發(fā)程序員必須要了解。

  4.編寫無錯的C程序。關于這一點建議閱讀Steve Maguire的《Writing Clean Code》。我對MS沒有好感,但這不影響我對MS里面大牛們的尊敬。嵌入式的調(diào)試是非常麻煩的,很耗時。雖然有gdbserver這類工具,但是你用的開發(fā)工具鏈中不一定包括它,而且就算用上了調(diào)試仍然是很花時間的。所以要是不想天天通宵調(diào)程序呢,那就要時時以編寫無錯程序為目標。

  5.了解一點編譯知識。這對編寫高性能程序很有幫助。

  6.學習設計模式。設計模式一般在高級語言中討論較多,但是好東西應該大家一起分享。學習設計模式對提高我們的設計能力非常有幫助。用C語言也可以實現(xiàn)一些模式思想,例如我們常用的回調(diào)函數(shù),就可看作是Command模式的C語言版本。

  7.要有前瞻性,要積極學習新技術。目前的嵌入式開發(fā)一般都是將PC應用加以剪裁,移植到嵌入式系統(tǒng)中。但是隨著通信技術的發(fā)展,IPv6的廣泛應用,設備上網(wǎng)是大勢所趨。許多新技術有可能在嵌入式領域率先應用。把握住這個趨勢,嵌入式程序員大有可為。

  現(xiàn)在很多公司招程序員要求有嵌入式開發(fā)經(jīng)驗,其實本質(zhì)上嵌入式開發(fā)和我們平常的開發(fā)沒什么不同,只是要求嚴格一點。我寫下這些希望對學習嵌入式開發(fā)的朋友們有所幫助。

【嵌入式實驗心得體會】相關文章:

嵌入式的實驗心得09-29

嵌入式實訓心得體會07-19

嵌入式學習心得體會04-04

嵌入式實訓心得體會通用12-14

嵌入式實訓心得體會10篇12-13

嵌入式實訓心得體會(10篇)12-15

嵌入式學習心得體會10篇04-18

嵌入式程序的優(yōu)化10-07

嵌入式系統(tǒng)設計10-07

(精品)嵌入式學習心得體會9篇09-07