已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
沈陽理工大學課程設計專用紙 目錄第一章 引言- 1 -第二章 設計目的- 2 -第三章 設計原理- 3 -第四章 關鍵技術- 4 -4.1 ARM9處理器- 4 -4.2嵌入式C語言開發(fā)技術- 4 -4.3 ADS開發(fā)環(huán)境- 5 -4.4基于ARM9的硬件- 6 -第五章 程序流程- 7 -5.1初始化和結束程序- 7 -5.2服務于I/O請求的函數(shù)- 7 -5.3中斷服務程序- 9 -第六章 主要源代碼- 10 -6.1定義與A/D轉換相關的寄存器- 10 -6.2對A/D轉換器進行初始化- 10 -6.3獲取A/D的轉換值- 10 -6.4主函數(shù)- 11 -6.5子函數(shù)- 15 -第七章 結論- 23 -第八章 心得體會- 24 -參考文獻- 25 -第一章 引言由于Linux系統(tǒng)是開源系統(tǒng),其內核和各種開發(fā)工具都可以從網(wǎng)絡上輕易獲取,使其在嵌入式系統(tǒng)的開發(fā)中得到了越來越廣泛的應用。但Linux系統(tǒng)本身并沒有對種類繁多的硬件設備都提供現(xiàn)成的驅動程序,特別是由于工程應用中的靈活性,其驅動程序更是難以統(tǒng)一,這時就需開發(fā)一套適合于自己產(chǎn)品的設備驅動,使得Linux設備驅動程序的開發(fā)在整個嵌入式系統(tǒng)開發(fā)工作中占有很重要的地位。而基于ARM架構的中高檔的嵌入式系統(tǒng)應用已經(jīng)非常廣泛,本文針對現(xiàn)在非常流行的一款三星公司生產(chǎn)的ARM9嵌入式微處理器S3C2440,在Linux操作系統(tǒng)下實現(xiàn)了多路AD轉換的驅動,通過該驅動程序實例,介紹在Linux系統(tǒng)下驅動程序編寫的一般方法,包括驅動程序和測試程序的編寫。1硬件設備硬件系統(tǒng)核心部分采樣的是韓國三星公司設計的基于ARM9的嵌入式微處理器S3C2440。S3C2440配合SDRAM、FLASH、USB、網(wǎng)口和串口等就構成了基本的ARM嵌入式硬件平臺。本文針對現(xiàn)在非常流行的一款三星公司生產(chǎn)的ARM9嵌入式微處理器S3C2410,在Linux操作系統(tǒng)下實現(xiàn)了多路AD轉換的驅動,通過該驅動程序實例,介紹在Linux系統(tǒng)下驅動程序編寫的一般方法,包括驅動程序和測試程序的編寫。第二章 設計目的通過課程設計,熟悉基于ARM微處理器的嵌入式系統(tǒng)開發(fā)的過程,掌握嵌入式系統(tǒng)開發(fā)的A/D 接口原理,掌握S3C2410的AD相關寄存器的配置及編程應用方法,鍛煉實踐動手能力和團隊協(xié)作能力。學習模擬輸入輸出接口的原理,掌握接口程序實現(xiàn)的基本方法,掌握簡單并行輸入輸出接口的工作原理及使用方法, 進一步熟悉掌握輸入輸出單元的功能和使用。第三章 設計原理A/D 轉換器是模擬信號和CPU 之間聯(lián)系的接口,它是將連續(xù)變化的模擬信號轉換為數(shù)字信號,以供計算機和數(shù)字系統(tǒng)進行分析、處理、存儲、控制和顯示。在工業(yè)控制和數(shù)據(jù)采集及許多其他領域中,A/D 轉換是不可缺少的。按照轉換速度、精度、功能以及接口等因素,常用的A/D轉換器有以下兩種:(1)雙積分型的A/D轉換器雙積分型也稱為二重積分式,其實質是測量和比較兩個積分的時間,一個是對模擬信號電壓的積分時間T,此時間常是固定的,另一個是以充電后的電壓為初值,對參考電源Vn的反向積分,積分電容被放電至零,所需的時間Ti。模擬輸入電壓Vi與參考電壓Vref之比,等于上述兩個時間之比。由于Vref、T時間固定,而放電時間Ti可以測出,因而可以計算出模擬輸入電壓的大小。(2)逐次逼近型的A/D轉換器逐次逼近型也稱為逐位比較式,它的應用比積分型更為廣泛,通常主要有逐次逼近寄存器SAR、D/A轉換器、比較器以及時序和邏輯控制等部分組成。通過逐次把設定的SAR寄存器中的數(shù)字量經(jīng)D/A轉換后得到電壓Vc與待轉換模擬電壓V0進行比較。比較時,先叢SAR的最高位開始,逐次確定各位的數(shù)碼應為1還是0,而得到最終的轉換值。其工作原理為:轉換前,先將SAR寄存器各位清零,轉換開始時,控制邏輯電路先設定SAR寄存器的最高位為1,其余各位為0,此值經(jīng)D/A轉換器轉換成電壓Vc,然后將Vc與輸入模擬電壓Vx 進行比較。如果Vx 大于等于Vc,說明輸入的模擬電壓高于比較的電壓,SAR最高位的1應保留;如果Vx小于Vc,說明SAR的最高位應清除。然后在SAR的次高位置1,依上述方法進行D/A轉換和比較。如此反復上述過程,直至確定出SAR寄存器的最低位為止,此過程結束后,狀態(tài)線改變狀態(tài),表明已完成一次轉換。最后,逐次逼近寄存器SAR中的數(shù)值就是輸入模擬電壓的對應數(shù)字量。位數(shù)越多,越能準確逼近模擬量,但轉換所需的時間也越長。第四章 關鍵技術4.1 ARM9處理器新一代的ARM9處理器,通過全新的設計,采用了更多的晶體管,能夠達到兩倍以上于ARM7處理器的處理能力。這種處理能力的提高是通過增加時鐘頻率和減少指令執(zhí)行周期實現(xiàn)的。ARM9 系列包括三種處理器:ARM926EJ-S、ARM946E-S 和 ARM968E-S。(1)ARM968E-S面積最小、包含 DSP 增強功能的 ARM9 處理器,針對低功耗、數(shù)據(jù)密集型、嵌入式實時應用。面積最小、功耗最低的 ARM9 處理器是眾多實時類型應用的理想之選。通過可輕松從標準接口集成的緊密耦合內存,該處理器可高效工作。(2)ARM946E-S具有 MPU 的 DSP 增強型高速緩存處理器,針對運行 RTOS 的實時應用。一種具有可選高速緩存接口以及完整的內存保護單元的實時處理器。對于大部分代碼位于主存儲器的應用,該處理器非常有用,它按需加載到高速緩存中,同時關鍵的異常處理代碼和數(shù)據(jù)仍本地保留在緊密耦合內存中。(3)ARM926EJ-S具有 Java 加速、DSP 擴展和 MMU 的應用處理器,針對基于操作系統(tǒng)的應用。ARM926EJ-S 處理器為入門級處理器,可支持完全版操作系統(tǒng),其中包括 Linux、Windows CE 和 Symbian。因此,此處理器是眾多需要完整圖形用戶界面的應用的理想之選1。4.2嵌入式C語言開發(fā)技術由于現(xiàn)在越來越多的產(chǎn)品都采用嵌入式開發(fā),所完成的計算和控制工作也日趨復雜,而嵌入式系統(tǒng)是一種資源十分有限的系統(tǒng)(這主要表現(xiàn)在程序存儲器資源的不足上),因此在程序設計時如何使用好這些有限的資源就顯得十分重要。用C語言變成雖然具有許多的優(yōu)點,但是生成的代碼相對較長,若編程技術不好,生成的代碼有可能比匯編語言生成的代碼長幾倍,因而對編程者來說,應該注意到嵌入式C語言和一般意義上的標準C語言的區(qū)別,對程序進行適當?shù)膬?yōu)化。 嵌入式C語言編程不同于一般的C語言編程的一個顯著特點,就是要和程序存儲器資源結合起來。雖然其提供的數(shù)據(jù)類型十分豐富,但其中只有bit和char等數(shù)據(jù)類型是機器語言直接支持的數(shù)據(jù)類型,用此類數(shù)據(jù)類型的語句所生成的代碼較短;而其他的數(shù)據(jù)類型如整形、浮點型等數(shù)據(jù)要有一定的內部程序或內部函數(shù)的支持,用該類數(shù)據(jù)類型的語句生成的代碼則相對教程。4.3 ADS開發(fā)環(huán)境1.運行ADS1.2集成開發(fā)環(huán)境(CodeWarrior for ARM Developer Suite),點擊File|New,在New對話框中,選擇Project欄,其中共有7項,ARM Executable Image是ARM的通用模板。選中它即可生成ARM的執(zhí)行文件。同時,還要在,Project name欄中輸入項目的名稱,以及在Location中輸入其存放的位置。按確定保存項目。2.在新建的工程中,選擇Debug版本,使用Edit|Debug Settings菜單對Debug版本進行參數(shù)設置。3.點擊Debug Setting 按鈕,選中Target Setting項,在Post-linker欄中選中ARM fromELF項。按OK確定。這是為生成可執(zhí)行的代碼的初始開關。4.點擊ARM Assembler ,在Architecture or Processer 欄中選ARM920T。這是要編譯的CPU核。5.點擊ARM C Compliler ,在Architecture or Processer欄中選ARM920T。這是要編譯的CPU核。6.點擊ARM linker ,在outpur欄中設定程序的代碼段地址,以及數(shù)據(jù)使用的地址。RO Base欄中填寫程序代碼存放的起始地址,RW Base欄中填寫程序數(shù)據(jù)存放的起始地址。該地址是屬于SDRAM的地址。在options欄中,Image entry point要填寫程序代碼的入口地址,其他保持不變,如果是在SDRAM中運行,則可在0x300000000x33ffffff中選值,這是64M SDRAM的地址,但是這里用的是起始地址,所以必須把你的程序空間給留出來,并且還要留出足夠的程序使用的數(shù)據(jù)空間,而且還必須是4字節(jié)對齊的地址(ARM狀態(tài))。通常入口點Image entry point 為0x30000000,ro_base也為0x30000000。在Layout欄中,在Place at beginning of image框內,需要填寫項目的入口程序的目標文件名,如,整個工程項目的入口程序是2410init.s,那么應在Object/Symbol處填寫其目標文件名2410init.o,在Section處填寫程序入口的起始段標號。7.在Debug Setting對話框中點擊左欄的ARM fromELF項,在Output file name欄中設置輸出文件名*.bin,前綴名可以自己取,在Output format 欄中選擇Plain binary,這是設置要下載到flash中的二進制文件。8. 到此,在ADS1.2中的基本設置已經(jīng)完成,可以將該新建的空的項目文件作為模板保存起來。首先,要將該項目工程文件改一個合適的名字,如S3C2410 ARM.mcp等,然后,在ADS1.2軟件安裝的目錄下的Stationary 目錄下新建一個合適的模板目錄名,如,S3C2410 ARM Executable Image,再將剛剛設置完的S3c2410 ARM.mcp項目文件存放到該目錄下即可。這樣,就能看到該模板。、9.新建項目工程后,就可以執(zhí)行菜單Project|Add Files把和工程所有相關的文件加入,ADS1.2不能自動進行文件分類,用戶必須通過Project|Create Group來創(chuàng)建文件夾,然后把加入的文件選中,移入文件夾?;蛘呤髽朔旁谖募罴訁^(qū),右鍵點擊,即出!先選Add Files,加入文件,再選Create Group,創(chuàng)建文件夾,然后把文件移入文件夾內。讀者可根據(jù)自己習慣,更改Edit|Preference窗口內關于文本編輯的顏色、字體大小,形狀,變量、函數(shù)的顏色等等設置。4.4基于ARM9的硬件ARM9系統(tǒng)的硬件設計,是一項復雜的系統(tǒng)工程,必須有堅實的準備知識,包括電路基礎、模擬電路、數(shù)字電路、微機原理、接口技術、嵌入式原理、ARM系統(tǒng)原理等等。不僅需要硬件相關的知識,而且需要軟件方面的知識,如操作系統(tǒng)。由于是復雜的硬件系統(tǒng)的設計,還需要掌握EDA軟件。此外,由于硬件開發(fā)還涉及焊接、調試等工序,所以還應該對元器件的封裝、電氣特性等有所了解,并掌握焊接技術,能對一般的貼片元件進行手工焊接。這方面的知識需要在實踐中積累經(jīng)驗,很難一蹴而就。做ARM9系統(tǒng)的硬件設計,一般采用六層板,成本較高。為了避免因設計的錯誤而付出沉重的代價,應從簡單的硬件設計做起,有助于提高ARM9系統(tǒng)設計的成功率。第五章 程序流程驅動程序的組成及設計 驅動程序是操作系統(tǒng)內核與硬件設備的直接接口,驅動程序屏蔽了硬件的細節(jié),使得應用程序可以像操作普通文件一樣對硬件設備進行操作。Linux將設備分為字符設備,塊設備和網(wǎng)絡設備三種。A/D轉換是屬于字符設備。設備驅動程序主要完成如下功能4:(l)對設備初始化和釋放;(2)把數(shù)據(jù)從內核傳送到硬件和從硬件讀取數(shù)據(jù);(3)讀取應用程序傳送給設備文件的數(shù)據(jù)并回送應用程序請求的數(shù)據(jù);(4)檢測和處理設備出現(xiàn)的錯誤。在系統(tǒng)內部,I/O設備的存取是通過一組固定的入口點完成與外部的通信,這些入本驅動程序的工作流程如圖1所示,主要由3大模塊組成。5.1初始化和結束程序在驅動程序設計中通常通過使用_init和_exit聲明來定義用戶自己的初始化函數(shù)和清除函數(shù),然后使用module_init(mydev_int)和module_exit(mydev_cleanup)來完成設備驅動程序的注冊和卸載(其mydev_init和mydev_cleanup函數(shù)即為用_init和_exit聲明的初始化函數(shù)和清除函數(shù))。在本驅動程序中初始化函數(shù)adc_init()主要完成一些初始化的工作,包括對硬件設備的初始化、中斷的注冊、設備的注冊等,初始化部分僅在驅動程序初始化的時候被調用一次,而缷載函數(shù)則完成相反的功能。5.2服務于I/O請求的函數(shù)在系統(tǒng)內部,I/O設備的存取是通過一組固定的入口點完成與外部的通信,這些入口點通過一個file_operations數(shù)據(jù)結構在注冊設備文件時與外部調用函數(shù)關聯(lián)起來,它是字符設備驅動程序的核心,結構中的每個成員名字都對應著一個系統(tǒng)調用。該結構實際就是聲明了針對各種設備不同操作的函數(shù)指針,Linux下驅動程序的大部分工作,實際上就是完成上述各種操作方法的函數(shù)。但是實際的驅動程序中并不需要為每一個操作都編寫相應的實現(xiàn)代碼,對于不需要的操作,可在初始化file_operations結構時在相應的位置賦予空指針NULL即可5。本驅動通過調用open入口點,為將要進行的I/O操作做好準備工作,包括初始化中斷事件變量、設置AD轉換通道等,在此通過一個for循環(huán)來設置4個AD轉換通道,以實現(xiàn)打開4個AD通道的要求;通過read入口點設置ADCCON控制寄存器啟動AD轉換,并設置中斷事件變量使程序進入等待轉換結束,在中斷事件激活后,通過copy_to_user內核函數(shù)將轉換結果傳送到用戶空間變量指針來完成整個A/D轉換。AD轉換大部分過程都是在adc_read()函數(shù)(它為應用程序系統(tǒng)調用read函數(shù)時調用的函數(shù))里實現(xiàn)的,它是AD轉換的主體函數(shù),在此函數(shù)中通過判斷通道號實現(xiàn)了多通道AD轉換,部分實現(xiàn)代碼如下:staticssize_tadc_read(structfile*filp,char*buffer,size_tcount,loff_t*ppos)START_ADC_AIN(adcdev.channel,adcdev.prescale);/啟動AD轉換wait_event_interruptible(adcdev.wait,ev_adc);/通過中斷的方式等待結果if(converter_channel=3)/通道的選擇converter_channel=0;elseconverter_channel+;adcdev.channel=converter_channel;value=adc_data;intr=copy_to_user(buffer,str,len);/將內核空間中的數(shù)據(jù)拷貝到用戶空間,以供應用程序使用5.3中斷服務程序在Linux系統(tǒng)中,中斷是由系統(tǒng)來管理與維護的。中斷服務子程序在初始化函數(shù)中調用irq_request函數(shù)與相應中斷號關聯(lián),并將該中斷的相關信息添加到系統(tǒng)的中斷信息列表中,以便在中斷發(fā)生時供系統(tǒng)檢索。目標機上完成某一AD轉換后,將產(chǎn)生一中斷號為IRQ_ADC_DONE的中斷,系統(tǒng)將自動檢索并調用相應的中斷服務子程序。此處的中斷服務子程序完成ADC寄存器中讀取轉換結果(通過adc_data=ADCDAT0&0x3ff;實現(xiàn))、激活中斷事件變量,從而read函數(shù)結束等待狀態(tài),返回AD轉換結果本次課程設計僅使用實驗教學系統(tǒng)的CPU板。在進行本實驗時,LCD電源開關、音頻的左右聲道開關、AD通道選擇開關、觸摸屏中斷選擇開關等均應處在關閉狀態(tài)。在PC機并口和實驗箱的CPU板上的JTAG接口之間,連接仿真調試電纜。使用串口線連接PC機串口1和實驗箱CPU板的串口,使用直連線連接底板串口2和PC機上的串口2之間的電纜。檢查連接是否可靠,可靠后,接入電源線,系統(tǒng)上電。撥碼開關SW3為選中的A/D轉換的通道,值得注意的是本實驗系統(tǒng)八個通道可以同時采集一個信號源。實驗時要選中采集的通道號,即對應的SW3開關撥到ON狀態(tài)。例如SW3的1撥到ON狀態(tài),說明用AD轉換器的通道1采集,如果,8個通道全部選擇為ON,則表示用8個通道采集。本實驗程序使用通道1采集數(shù)據(jù),所以,SW3的1應該撥到ON狀態(tài)。要給ADIN一個輸入信號,可以是底板上的SQUARE信號和SINE信號,也可是外部信號,但是必須注意,接外部電壓信號時,要共地,以及信號的電壓范圍為02.5V打開ADS1.2開發(fā)環(huán)境,連接編譯運行通過后,全速運行映象文件。打開LCD電源開關, 檢查SW3上選擇的是通道幾。確認后,觀察LCD上1通道當前采集的情況。由于液晶的顯示速度比波型慢許多,所以要暫停程序才會看到比較清楚的波形。由于信號源輸出后,電壓經(jīng)過縮放和偏置處理。使得的ARM CPU板所采集到的電壓值的變化范圍不足02.5V,故而采集到的數(shù)字值,不能滿程。但這些不會影響實驗原理的顯示。第六章 主要源代碼6.1定義與A/D轉換相關的寄存器#define radcCON (*(volatitle unsigned * )0x58000000) /ADC控制寄存器#define radcTSC (*(volatitle unsigned * )0x58000004) /ADC控制寄存器#define radcDLY (*(volatitle unsigned * )0x58000008) /ADC控制寄存器#define radcDAT0 (*(volatitle unsigned * )0x5800000c) /ADC控制寄存器#define radcDAT1 (*(volatitle unsigned * )0x58000010) /ADC控制寄存器6.2對A/D轉換器進行初始化Void AD_init(unsigned char ch)rADCDLY=100;/ADC啟動或間隔延時rADCTSC=0; /選擇ADC模式rADCCON=(114)|(496)|(ch3)|(02)|(07) return 0;For(i=0;i16:i+) Radccon|=0x1;Radccon=radccon&0xffc7|(ch4);6.4主函數(shù)#include .lcddrvinclcd.h#include .lcddrvinclcdlib.h#include .guiglibglib.h#include target.h#include 2410LIB.h#include 2410addr.h#include adc.hextern GUI_FONT GUI_Font8x16;#define Length 640void ShowWave(short* buffer, int p, short* buffer2)int i, j;j = 0;/ Set_Color(GUI_BLUE);/Fill_Rect(0,0,319,239); for (i = p - 1; i Length; i+) Draw_Point(j, buffer2i); j+; for (i = 0; i p - 1; i+) Draw_Point(j, buffer2i); j+; Set_Color(GUI_RED); j = 0;for (i = p; i Length; i+) Draw_Point(j, bufferi); j+; for (i = 0; i p; i+) Draw_Point(j, bufferi); j+; Uart_Printf(%dn, bufferi);void ShowWavebuffer(short* buffer) int i, j; j = 0;Set_Color(GUI_BLUE);Fill_Rect(0,0,639,479);Set_Color(GUI_RED);for (i = 0; i Length; i+) Draw_Point(i, bufferi); void Main(void) int i, p = 0; unsigned short bufferLength; unsigned short buffer2Length; Target_Init(); GUI_Init(); Set_Color(GUI_BLUE); Fill_Rect(0,0,639,479); Set_Color(GUI_RED); Draw_Line(0, 250, 639, 250);Set_Font(&GUI_Font8x16); /設定字體類型APISet_Color(GUI_WHITE);Set_BkColor (GUI_BLUE); /設定背景顏色APIFill_Rect(0,0,639,3);Fill_Rect(0,0,3,479);Fill_Rect(636,0,639,479); Fill_Rect(0,476,639,479); Disp_String (ADC DEMO,(640 - 8 * 8) / 2, 50); for (i = 0; i = Length) p = 0; while (1) p = 0; for (i = 0; i Length; i+) bufferp = Get_AD(0); p+; p = 0;for (i = 0; i Length; i+) Uart_Printf(%dn, bufferp); p+; p = 0; for (i = 0; i Length; i+) bufferp = AD2Y(bufferp); p+; p = 0; for (i = 0; i 7) return 0; for(i=0;i16;i+) rADCCON |= 0x1; /啟動 A/D 轉換 rADCCON = rADCCON & 0xffc7 | (ch4);/*采樣4次,平均處理*/ int i; int val=0; if(ch7) return 0; for(i=0;i4;i+) rADCCON |= 0x1; /啟動 A/D 轉換 rADCCON = rADCCON & 0xffc7 | (ch2); /*采樣1次,平均處理 */ int i; int val=0; if(ch7) return 0;for(i=0;i1;i+) rADCCON |= 0x1; /啟動 A/D 轉換 rADCCON = rADCCON & 0xffc7 | (ch7) return 0; for(i=0;iADCount;i+) rADCCON |= 0x1; /啟動 A/D 轉換while (rADCCON & 0x1); /避免第一個標志出錯while(!(rADCCON&0x8000); /避免第二個標志出錯ArrayDat0i = (rADCDAT0 & 0x03ff);Delay(1); val = GetDat0(p); return (val); void AD_Init(unsigned char ch) rADCDLY = (100); / ADC Start or Interval Delay 0x100rADCTSC = 0; /設置成為ADC模式rADCCON= (114)|(496)|(ch3)|(02)|(01)|(0); /設置ADC控制寄存器int AD2Y(int ady) / 把AD值轉換成坐標值 yreturn LCD_YSIZE * (AD_TOP - ady) / (AD_TOP - AD_BOTTOM);void selectsort(int* r,int n) /r is struct rec,選擇排序 int i,j,k; int w;/struct recfor(i = 0; i n - 1; i +) k = i; for (j = i + 1; j n; j +) if (rj rk) k = j; if (k != i) w=ri;/交換 ri=rk; rk=w; #if (isDebug = 1) Uart_Printf(Sort:); for (i = 0; i n; i+) Uart_Printf(%d, , ri); Uart_Printf( endn); #endifint GetDat0(int* p) int Dat0; /const int ADCount = 10; int tmp9;/ADCount - 1 int i, k, diftag = 0;struct ARRAYCMP int difsize; int continuecount; ArrayCmp9;/ADCount - 1 selectsort(p, ADCount); /將采集到的數(shù)據(jù)排序(由小到大)for (i = 0; i ADCount - 1; i +) tmpi = pi + 1 - pi; /tmp存儲各點之間的差值 #if (isDebug = 1) Uart_Printf(tmp:n ); for (i = 0; i ADCount - 1; i+) Uart_Printf(%d,tmpi); Uart_Printf(n); #endif /fill table /ArrayCmp是一個表格,表格的第一列存儲各點之間的差值, /第二列存儲相同的點連續(xù)存放的個數(shù) /* 舉例: tmp : 2,0,0,0,2,0,0,2,2 ArrayCmp如下: 下標差值連續(xù)個數(shù) 020 102 20-2 30-1 420 501 60-2 721 */ ArrayCmp0.difsize = tmp0; ArrayCmp0.continuecount = 0; k = 0; for(i = 1; i ADCount - 1; i+) if (tmpi = tmpi - 1) & (diftag = 0) ArrayCmpi.difsize = tmpi; ArrayCmpi.continuecount = -2; ArrayCmpi - 1.continuecount = 1; diftag = 1; k = i - 1; else if (tmpi = tmpi - 1) & (diftag = 1) ArrayCmpi.difsize = tmpi; ArrayCmpi.continuecount = -1; ArrayCmpk.continuecount += 1; diftag = 1; else /(tmpi != tmpi - 1) ArrayCmpi.difsize = tmpi; ArrayCmpi.continuecount = 0; diftag = 0; #if (isDebug = 1) Uart_Printf(ArrayCmp:n ); for (i = 0; i ADCount - 1; i+) Uart_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- A證(企業(yè)負責人)-安全員A證(企業(yè)負責人考前練習)
- 廣東省中山市2024年九年級中考三模數(shù)學試卷附答案
- 電力系統(tǒng)節(jié)能減排實施方案
- 高一化學二第三章第一節(jié)最簡單的有機化合物-甲烷教學設計
- 2024高中地理第3章地理信息技術應用第3節(jié)全球定位系統(tǒng)及其應用學案湘教版必修3
- 2024高中語文第一單元以意逆志知人論世蜀相訓練含解析新人教版選修中國古代詩歌散文欣賞
- 2024高中語文第四單元創(chuàng)造形象詩文有別第21課自主賞析項羽之死課時作業(yè)含解析新人教版選修中國古代詩歌散文欣賞
- 2024高考化學一輪復習專練5化學與STSE含解析新人教版
- 2024高考化學一輪復習第一部分考點41烴的含氧衍生物強化訓練含解析
- 2024高考化學一輪復習課練3物質的組成性質分類和化學用語含解析
- YC/T 306-2009煙草物流設備條煙分揀設備
- JJF 1616-2017脈沖電流法局部放電測試儀校準規(guī)范
- GB/T 6671-2001熱塑性塑料管材縱向回縮率的測定
- GB/T 2440-2017尿素
- GB/T 18994-2014電子工業(yè)用氣體高純氯
- 城投公司轉型發(fā)展之路課件
- 五年級數(shù)學下冊解方程應用題專題訓練
- 物流公司安全生產(chǎn)責任制度
- 四年級上冊道法知識點匯總
- SURPAC軟件地質建模操作步驟
- 電子行業(yè)質量控制計劃
評論
0/150
提交評論