F28335BOOTROM引導(dǎo)模式和程序_第1頁
F28335BOOTROM引導(dǎo)模式和程序_第2頁
F28335BOOTROM引導(dǎo)模式和程序_第3頁
F28335BOOTROM引導(dǎo)模式和程序_第4頁
F28335BOOTROM引導(dǎo)模式和程序_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

28335使用串口燒寫程序串口燒寫是一種相對較方便的燒寫方式,相對于仿真器或是CAN燒寫,相對于仿真器或是USB轉(zhuǎn)CAN的設(shè)備,串口是一種非常廉價的燒寫方式,而且也不需要安裝專業(yè)的集成開發(fā)環(huán)境CCS等,但是不能實現(xiàn)在線調(diào)試,因此也只適用于程序基本不用再調(diào)整或大批量的場合。F28335的存儲器映射圖如下:Stock

^tartAddnusOn-ChiphfleniQryEmImalNtsmaryscinitf。揮?(HOO。同040444OkMCMOOOkODQfiOOdkddacoaOhD<DDEDQ□hMZDDO□kM即IEOkMsoociggroaoOkHBDflO□mmMoaOkHMDO0x00BilOO^jeQDggQxOOMOO0HOflEDOO0w00iF(IMOkO1CHOO.<gUEdMEn^ap£

■G'liNnbluJMaM育J

親畚T??3OOCOOFFFSM340400血3$ODBC血3g(HQO晾齡0400W巽OBOOQH3FS40O味31=9000OzSFAOOOW3FBfllM<Dn-3F0004OtjcSFEO0Oflx3FFFCO。由aSpaceProgSp4C$Dita3融懿燈Prog5pec?MQ火叫w?R;AM(3W菁的)忡宇做胃VNAF=0]RMRffV^dMQSAR禹M桐N喜18gmMRAM炒XIGjiPvrlpM隱IFrsnidk0RqwrwdPIE地gr-RAMfEjnabkadifUM",,ENPIE-1>PierlpbaralFra?QR=K3hCiXIMTFZanad『戚x41土返亡|Pr<Mcctad,E>MA-Acc^x^ibki)P^rlphgralFramA*Prolcctcd|D^1AAcccssiblelgPefi^hertiFFrim*1(F?<HwLVil|PeriphmrBlFrantB2(Probefilfrd)LJQi£ARAM(4KmJ底SecureZoneDualMapped)LiSARAM|<KnSecureZjanclOualMjippcdlL2SARAM(4Kxi^.MicxjmNeirK.DualMapipcdJL3SARAM(4Kx1fi.SaCurtZeiK.DualM3pp?£9|L4SAFEAMDMAAcccuiblit]LS3AFU^(4KS1?,A&C4B?lbl4]165AFWM(4Kk1€,DM^Ac^eslble]L7SAFLAM(4MM115,DMAAcCC^SlbleJR-ti3*rM¥dXIMTFZdfleBMMM1牝XZ金部HQM內(nèi)Acif靛W)XIWFZ<H1*7jlMHXZCZS7RDMAFr^SH〔2部株k1聽.Secure-ZcHiej"IHM)IEPm&wwdkiHSCfV如RiHorvcdADCgmbeatim看R?BC-rw?jIlsurOTP(1K.m1t,SqcuthiZann)R?g?rw#f1iLO5ARAM[4KM1&,SecureM*口網(wǎng)臥LiSARAH(4Km11kSecureZfinoDualMapped)L2SARAH(4Kit1&.9HUF6ZOHSDUiM臥LJSARAM(4Ka.SecureZoneDmadM』ppcd|>RnserwedBmlROM[3Km16-)RRC站-叫站i:H?z用IEMblH-rVMAP二1.EMP1E=U)DX0D4KID傾原SOCIOQjcidCOOD如以口QQCignxitititHOOLEGEND:Only<Hieoftinmqvactormjips-MO[:tor.Pl£i/octor,Mvector-slwuldofiabtedatatim□.BOOTROM是一塊8KX16的只讀存儲器,位于地址空間0x3FE000~0x3FFFFF,片內(nèi)BOOTROM在出廠時固化了引導(dǎo)加載程序以及定點(diǎn)和浮點(diǎn)數(shù)據(jù)表,片上BOOTROM的存儲映射如下圖所示:figure1-1.MemoryMapofOn-ChipROMDataspaceIProgramspace-IQmathtablesFPUmathtablesReservedBootloadorfunctionsReservedROMversionROMchecksrnDataspaceIProgramspace-IQmathtablesFPUmathtablesReservedBootloadorfunctionsReservedROMversionROMchecksrnResetvector

CPUvectortsble3FE00D3FEBDC3FF27C3FF3化3FF9EE3FFFB93FFFC03FFFFF在BOOTROM中保留了4KX16位空間,用以存放浮點(diǎn)和IQ數(shù)據(jù)公式表,這些數(shù)據(jù)公式表有助于改善性能和節(jié)省SARAM空間。2.CPU向量表:CPU向量表位于ROM存儲器0x3FE000~0x3FFFFF段內(nèi),如下圖所示。復(fù)位后,當(dāng)VMAP=1,ENPIE=0(PIE向量表禁止)時,該向量表激活。

Table1-1.VectorLacationsVectorLocmioninBoolROMContentsfLe.apoints^o)VectorLocationinBootROMCOTitemts(Lbl:,paintsIo)RESETCbcBFFFCOInilBoolRTOSINTOtiSFrFEO0x00ODSOINT10x3FFFC20x000M2ReservedthfSFFFH0x000065]NT20x3FFFC4OxOD0M4NMIChc3FFFE4OxODODMINT30x3FFFC6OUiOO0CM6ILLEGAL伽3FFFE6ITRAPlsrJNL10x3FFFCSgooooiaUSER1OxSFFFE00x000069IINT50x3FFFCA0x00DMAUSER2Qx3FFFEA0x00QC6AINT60x3FFFCC0x00OCMCUSERSFFEC0x000D6C1NT70x3FFFCE0x00CKMEUSERdOxSFFFEE0x00006EIINT80x3FFFIDO0x000050USERSQx3FFFFO0x00QD70IHT9OxSFFFD2CDiOO0052USERS0W3FFFF20x000D72INT10CuiSFFFDdOkOO0054USER7thf^FFFFd0x000074INT11Qx3FFFDS0r000056USERS(MFFFF60x00QD?6IINT120x3FFFD80x00oo&sUSERS伽3FFFF80x00DOTSJNT1S0x3FFFDA0x00OOBAUSER100x3FFFFA.0x00007A1NT140x3FFFOC0x00005CUSER11皿3FFFFC0x00007CDLOGINT0x3FFFDE0x00005EUSER"(M3FFFFE0x00OOTE在內(nèi)部BOOTROM弓I導(dǎo)區(qū)中能夠調(diào)用的唯一向量就是位于0X3FFFC0的復(fù)位向量。復(fù)位向量在出廠時被燒錄為直接指向存儲在BOOTROM空間中的InitBoot函數(shù),該函數(shù)用于開啟引導(dǎo)過程。然后通過通用I/O引腳上的檢驗判斷,決定具體引導(dǎo)模式。引導(dǎo)模式與控制引腳之間的關(guān)系如下圖所示:WTable3-6.BootModeSelectionMODEGPIOS7IXA15GPI096/XA14GPIOB5/XA.13GPI084/XA12MO&E111F1111JuimptoF婦shE1110SCl-Ab泊01101SPI-AI?atc1100I2C-AbrolBj011ciCAW-AboolA10!1QM瘀EtMK>t91G01JumplfiXlNTFribS1&Q0Jumpte-XINIFk327□111JUEplQ口TF60110P*raiMGPIOU。tool5D101P辨』舊XINTTFboot40100Jump切SARAN300-11Branchlocheckbcolmade20o-10Branch(qFls&hshipADCcHligticn10001BrarKhtoSAPAM,skpADCeallhratan00Q,00BfarKhto8CI,skipADCGellbratbn{TlAllfourGPIOpln&aninternalpullup.Bootloader特性:Bootloader是位于片上引導(dǎo)ROM中的在復(fù)位后執(zhí)行的程序,用于在上電復(fù)位后,將程序代碼從外部源轉(zhuǎn)移到內(nèi)部存儲器。這允許代碼暫時存儲在掉電不丟失數(shù)據(jù)的外部存儲器內(nèi),然后被轉(zhuǎn)移到高速存儲器中執(zhí)行。引導(dǎo)ROM中的復(fù)位向量將程序執(zhí)行重定向至InitBoot函數(shù)。執(zhí)行器件初始化之后,bootloader將檢查GPIO引腳的狀態(tài)以確定您需要執(zhí)行哪種引導(dǎo)模式。這些選項包括:甥齡至閃存、甥齡至SARAM、跳齡至OTP或調(diào)用其中一個片上引導(dǎo)加載例程。完成選擇進(jìn)程后,如果已完成所需的引導(dǎo)加載,處理器將在所選引導(dǎo)模式確定的應(yīng)用起點(diǎn)繼續(xù)執(zhí)行。如果調(diào)用了bootloader,則由外設(shè)加載的輸入流確定此應(yīng)用起點(diǎn)地址。然而,如果選擇直接引導(dǎo)至閃存、OTP或SARAM,這些存儲器塊中每一個存儲器塊的應(yīng)用起點(diǎn)均已預(yù)定義。Figure2-1.Bo<>tload^rFlowDiagramReset

(power-onresetorwarmreset)

Siliconsetsthefallowing;PIEdisabled(ENPIE-0)VMAP=1OBJIV1CDE=0AMODE=0MOM1IV1AP=1IBootROMResetvectorfetchedfrombootROM

address0x3FFFCOJumptoInitBootfunctiontostart

bootprocessSelectBootMfJdefunction

PLLSTSpiVSEL]=2

Bootdeternnin&dbythestateofI/OpinsCallADC_calroutinein

TilreservedmemoryBeginexecutionatEntryPointasdeterminedbyselectedbootmade

上圖顯示了引導(dǎo)進(jìn)程的概述。以下引導(dǎo)模式不掉用bootloader,他們會甥&轉(zhuǎn)至存儲器中的預(yù)定義位置:1.甥齡至閃存中的分支指令:在此模式下,引導(dǎo)ROM軟件將針對28x操作配置器件,然后直接分支至閃存的0X33FFF6位置。此位置剛好是128位代碼安全模塊(CSM)密碼位置之前。您需要預(yù)先在0X33FFF6位置處編寫分支指令,以將代碼執(zhí)行重定向至定制的boot-loader或應(yīng)用代碼。在僅有RAM的器件上,"引導(dǎo)至閃存"將甥K轉(zhuǎn)到保留存儲器,因此不應(yīng)當(dāng)使用此選項。2.跳轉(zhuǎn)至M0SARAM

在此模式下,BOOTROM將針對28x操作配置器件,然后直接分支至0x000000,即M0SARAM存儲器塊中的第一個地址。3.跳齡至OTP存儲器在此模式下直接分支至0x380400,即OTP存儲器塊中的第一個地址ReseiFigure2-6.FlowDiagramofJump-to-OTPMemoryTable3-1ReseiFigure2-6.FlowDiagramofJump-to-OTPMemoryADDRESSRAMGEANDDATASFACF0x300000-0x307FFFSectorH(32KxIE}0x306QQQ-ps3QFFFFSectorG(MKn1辯0k310000-0x317FFFSectorF陞Kx1fi)□k31E000-0x31FFFFSectorE{32K*16)WOO-0x357FFFSeefcirD(32Kx1哥0x326000-0x32FFFFSectorG(32Ks16}0x33oaao-oi33tfffSectorB(3ZKk1岫口心fiOOO-0x33FF7FSacfewA(32Kk1fi)敬33FF80-Dx33FFF5ProgramtoOx.0000whenusingtheCadeSecurityModule□133FFF自-0x33FFF7Add1-td-FInfillEriitfy(programbranchinstrudionhere)0x33FFF0?0j33FFFFSecurilyPasswond(12a-Brt)(DoNotProgramtoallzeros)以下引導(dǎo)模式將調(diào)用一個用于將數(shù)據(jù)流從外設(shè)加載至存儲器的引導(dǎo)加載例程:SCI-A(注意此處的SCI-A對應(yīng)的是GPIO28和GPIO29)SPI-AI2C-AeCAN-AGPIO0-GPIO15并行引導(dǎo)。如果使用SCI或者其他弓I導(dǎo)的話,首先需要將啟動模式選擇相關(guān)的弓I腳配置成對應(yīng)的模式,然后器件退出復(fù)位狀態(tài)之后,首先從復(fù)位向量處開始運(yùn)行,即從0X3FFFC0處,該地址存放著BOOTROM中的第一個匯編初始引導(dǎo)程序InitBoot程序的入口地址,程序甥齡至0X3FFC00執(zhí)行InitBoot程序。該程序主要初始化F28335器件工作的目標(biāo)模式。然后讀取安全保護(hù)模塊的密碼,如果CSM密碼被擦除(全部等于0XFFFF)則自動解鎖,否則CSM仍被鎖定。對CSM密碼讀取完成后,初始化例程調(diào)用模式選擇功能函數(shù)(SelectBoot),該函數(shù)根據(jù)GPIO的狀態(tài)確定處理器引導(dǎo)的方式。一旦完成SelectMode將會把入口地址返回給初始化引導(dǎo)。然后初始化引導(dǎo)函數(shù)調(diào)用回復(fù)CPU寄存器的退出例程(ExitBoot)并退出到由引導(dǎo)模式確定的程序入口地址。因此我們在使用SCI升級程序時可以分兩個步驟,第一個步驟是我們需要一個Bootloader程序,第二個就是我們要升級的程序,BootLoader程序就是我們在選擇引導(dǎo)SCI模式之后,SelectBoot之后通過串口加載的第一個程序,待ExitBoot之后會跳轉(zhuǎn)到我們這個bootloader指定的地址開始執(zhí)行(即將控制權(quán)交給我們的這個BootLoader程序),因此我們的BootLoader程序就肩負(fù)著串口接收我們的應(yīng)用程序并將應(yīng)用程序燒寫到FLASH的任務(wù)。第二個就是我們的應(yīng)用程序,這個跟平常的應(yīng)用程序一樣,沒有任何區(qū)別。1.BootLoader程序由上面的介紹明顯知道我們的Bootloader程序是運(yùn)行在RAM里面的,所以使用CCS在編寫該程序的時候使用的是RAM_Link的CMD,而且該程序除了串口的處理還有包括FLASH操作的API函數(shù),而這些函數(shù)必須要運(yùn)行在RAM里面,而且在進(jìn)行FLASH操作的時候要將中斷全部都關(guān)掉,F(xiàn)LASH的API有相關(guān)的例程是燒進(jìn)FLASH的還要拷貝到RAM,我們這里正好還免去了拷貝的過程,因為我們整個程序都是運(yùn)行在RAM中的。Bootloader數(shù)據(jù)流的結(jié)構(gòu):Table2-3.GeneralStructureOfSourceProgramDataStreamIn16-BitModeWordContents1234510AA{KeyValueformemoryuiidlh=16bits)RegisterinitializationvalueorreservedforfutureuseRegisterinitializatjonvalueorreservedforfutureuseRegisterinitializationvalueorreservedforfutureuseRegisterinitializationvalueorreservedforfutureuse6789RegisterinitializationvalueorreservedforfutureuseRegisterinrtializationvalueorreservedforfuiureuseRegisterinrtializationvalueorreservedforfuiureuseRegisterinitializationvalueorreservedforfuiureuse101112EntrypointPC(22:16JEntrypointPC(15:01Block?ze(numberofsords)ofthefirstblockofdatatotoad.Iftheblocksizeis0.thisindicatestheendofth?sourceprogramOtherwisoanothersectionfollows.1314DestinationaddressoffirstblockAdd(t31:16JDestinationaddressoffirstblockAdd(t15:0]15??????Firstwordofthefirstblockinthesourcebeingloaded???Lastwordofthefirstblockofth?sourcebeingloadedBlocksizeofth?2ndblocktoloadDestinationaddressofsecondblockAddr[31:16JDestinationaddressofsecondblockAddr[15:0]FirstwordofthesecondblockinthesourcebeingloadedLastwordofthesecondblockofthesourcebeingloadedBlocksizeofthelastblocktoloadDestinationaddressoflastblockAddr[31:16]DestinationaddressoflastblockAddr[150]??????nn*1Firstwordofth?lastblockinthesourcebeingloaded??????LastwordofthetestblockofthesourcebeingloadedBlocksizoof0000h?indicatesendofthesourceprogramTable24LSB/MSBLoadingSequenceinS-BitDataStreamByteLSBByteLSB(FirstH/teof彩12LSB1AA{KeyVelueformemorywkith=Bbte>34LSB:Roglsisririitializatuanvaluoorr&ssrvod56LSB.RegIslerinitialization婦lu日br海ivM7SILSH:IRegislerinitializaliDnvalueorreservedConlent^MS日(SecandB^teaf2}MSB:D8h(Ke^Valueformemorywicitti=Bbits)MSB*RogisterinrtiHizaQionormseiwdMSB:R日gis囪InitiaJizallon監(jiān)Imof但MSB:RegisterinitjalizalionvaluenrreservedMSB:MSWdestinatonadcress,fiirstblockAddr[31:24]MSB:MSB:MSWdestinatonadcress,fiirstblockAddr[31:24]MSB:LSWU&slinaliQnaddress,firstblockAddr(i5.8]MSB:FirstwordofthefirstblockbeingloadedLSB-LaatwordofthefirstWeektoloadLSB:BlacksizeoftheSMondblockLSB.MSWd@£tiinatlDnsecondbtockAddr|23.1fl|LSB.LS'A1destinationaidklr也⑤secondblockAddr(7:0;ILSE:Firstwordofthesecondblockbeingload&dLSB-Las?:wordofthesecondOiockLSB:BacksizeofthGlastblMkLSB.MSWofd&stinalloinaddrsKofIasiblockAOdrfiS.ie]ILSH:LSWdestinationaddresiE,lastWeekAddrp』LSB-FirsturordoftheleatWeekbeingloactedMSB:Lastwoirdoftfiefirstbbc>?totoedMSB:Blocksizeoftr>esecondbl&ckMSB:MSWdestinaLonMilr^ss,gecmdblockAddrt31:24]MSB:LSWd&stinmlicrimddi■第g.ee-condbtaCkA£lli3f[15:8]MSB:Firs!wordnFtlissecondblockb&ingloadedMSB:LastwordofthesecondblockMSB:BlocksizeatmlastblockMSB:MSW而stigbm如mss,testblockAddrpl.24]MSB:LSWdesiin^limaddress,laatblockAddr[1£:8|MSB:FinstwordoFtfielastblockbeirgtaadedLSB:Lastwordofthslastblock:MSB:LastwordoftinelastDlockcin+1)LSB:00hMSB:DOh-indi'^aLesitieendoftnasource1718LSB-RegislerinidializaftionvaluearreservedMSB:Regisrterirrtializalionvalueorreserved1920LSB:UpparhalfofEntrypointPC[23:16JMSB:UppsrlharfafentrypointPC[31:24](AlwaysOxOQ)2122LSB.Low^rhalfofEntrypointPC|7.0]MSB:LowsrhahfofEnlrypointPCflS.B]2324LSB:Blackseeinword?ofthefirstbtocktnload.HftheblocksizeisD,thfeindicateE1heendoftheEounzeprognam.OtherwiManai^erblockfollows.Far&xampla,abkscksizeofOxDDOAwouldindicate10'^rdsor20bytesinttieblockMSB:blocksize26LSB:MSWdestiimationiaddres3Bfirs咱locKAddr[23:16J2728LSB.LSWd&stifiatlon白削舶$&rirsLblockAddr[7.0]30LSB:Firstvrardofthe^irstblockt>eingloaded上圖就是BootLoader數(shù)據(jù)流的結(jié)構(gòu),數(shù)據(jù)流的第一個16位字稱為鍵值,該鍵值用來指向Bootloader指示流入的數(shù)據(jù)流的寬度:8位或16位(在這里SCI就是8位),對于8位數(shù)據(jù)流,鍵值為0X08AA,如果bootloader收到一個無效的鍵值,加載則中止。則直接跳齡到FLASH開始執(zhí)行。接下來的8個字(2-9)用于初始化寄存器直,如果bootloader不使用這些值,則將這些值留作將來使用。第10個和第11個字組成了22位應(yīng)用起點(diǎn)地址,此地址用于在完成引導(dǎo)加載后初始化PC,也就是我們程序的起點(diǎn)。第12個字表示傳輸?shù)牡谝粋€數(shù)據(jù)塊的大小。對于8位和16位數(shù)據(jù)流格式,該數(shù)據(jù)塊的大小均定義為塊中的16位字個數(shù),例如,要從8位數(shù)據(jù)流中傳輸一個包含20個8位數(shù)據(jù)值的數(shù)據(jù)塊,該塊大小將為0X000A,表示有10個16位字。

第13和14個字表示程序的目的地址,后面跟的就是程序的字,直到遇到數(shù)據(jù)塊長度為0的則傳輸結(jié)束。W2:W1^OxOEJAAW1^0x1OAAFigure2-9.BootloaderBasicTransferProcedureBInS-bilmodetheW2:W1^OxOEJAAW1^0x1OAAFigure2-9.BootloaderBasicTransferProcedureBInS-bilmodetheLSBoFdie16-bitwordisn&adlirslfbllouvedby:heMSB.fi-bitandIG-bittramsFersarenotvalidforallbootmodes.Secihcnfospecifictoaparticularbootloaderfaranylimitation&.TransferRwords<?FdatafromstxjrMlodeslinalionRftajdsecondword(W2)anddiscardupper3-bitsDataformaterrorReturnFLASH_ENTF?Y_POINTReacfirslword(W1)RsaciEntryPoinladdress8-blt□ataSizc16-bitdataReadBlock;琵(R}Rs^dBlDckAddressReturnEnLryPaint上圖為BOOTLoader傳輸流程,如果不相等會自動退出引導(dǎo)程序,系統(tǒng)會從內(nèi)部FLASH存儲器執(zhí)行程序。這里需要講一下,我們的Bootloader數(shù)據(jù)流如何得到,我們正常的使用CCS編譯鏈接得到了xx.out文件,然后使用hex2000.exe-boot-sci8--map=xx.map-oxx.hex-ixx.out(詳細(xì)解釋可參考TMS320C28x-Assembly-Language-Tools-User's-Guide-v6.1.pdf),當(dāng)然你可以將這些命令參數(shù)寫成腳本xx.cmd,然后直接執(zhí)行hex2000.exexx.cmd即可。這就會生成Intel格式的hex文件,我們需要自己對這個hex文件解析,對于生成的Hex文件都是以冒號開始,后面一個字節(jié)是數(shù)據(jù)長度,2-3字節(jié)是地址,第4字節(jié)是數(shù)據(jù)類型(00表示數(shù)據(jù)記錄,01表示文件結(jié)束記錄,02表示擴(kuò)展段地址記錄,04表示擴(kuò)展線性地址記錄)首先需要一個將兩個字符轉(zhuǎn)換為一個字節(jié)量函數(shù):CharTOByAchargchar'BYTE*PByscharh」;hnpcharoJ;llpcharE;llloLe_selll-a+oxa;e_seif(vH、>8L8lAsIII-A+0X2if(hvno、381X19、)hnyoLe-seif(hvn、a、8一8一hAHJhnhla+oxa;e-seif(hvn、>8l8lh§3hn7>+oxa;*PByreH(BYTE)h*16+If(fopen—S(8lmy\3IT0)prmrfs^M豐漫昴?一wh=e(一feof(myF=e))++-eafgerc(myF=e);}〃將文件長度計算出來用于申請存儲數(shù)據(jù)的緩沖區(qū)rewind(myFile);outBuf=(BYTE*)malloc(len/2);memset(outBuf,0xff,len/2);while(!feof(myFile)){if(fgetc(myFile)==‘:7)//:號表示一行的開始{//一行的頭兩個字符為該行包含的數(shù)據(jù)長度data[0]=fgetc(myFile);data[1]=fgetc(myFile);CharToByte(data,&datalen);//一行的第3、4個字符為數(shù)據(jù)存儲起始地址的高位data[0]=fgetc(myFile);data[1]=fgetc(myFile);CharToByte(data,&addresshigh);//一行的5、6個字符為數(shù)據(jù)存儲起始地址的低位data[0]=fgetc(myFile);data[1]=fgetc(myFile);CharToByte(data,&addresslow);〃一行的7、8個字符為數(shù)據(jù)類型data[0]=fgetc(myFile);data[1]=fgetc(myFile);CharToByte(data,&dataType);if(dataType==0x00)//表示普通數(shù)據(jù){for(i=0;i<datalen;i++){data[0]=fgetc(myFile);data[1]=fgetc(myFile);CharToByte(data,&byteData);outBuf[adressHigh*256+adresslow+i]=byteData;}}if(dataType==0x01){printfC'文件結(jié)束記錄!”);}if(dataType==0x02){printf('不支持?jǐn)U展段地址記錄!”);return;}if(dataType==0x04)//本行包含擴(kuò)展線性地址記錄{〃表示的是extended地址高位和低位data[0]=fgetc(my

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論