版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第一個ARM裸板程序及引申1、點亮LED(怎么做)1)看原理圖確定控制LED的引腳。2)看主芯片手冊,確定如何設置/控制引腳3)寫程序。注意:a)LED導通電阻很小,為防止回路電流過大,需串聯(lián)一電阻。b)引腳驅動能力不足一般指輸出電流或電壓過小,無法驅動負載正常工作。(采用三極管一>開關作用,基極電壓控制e、c間通斷)c)電子系統(tǒng)中,我們不關心引腳輸出電壓具體多少,只關心輸出為高電平還是低電平(如我們不關心輸出3.3v還是1.2v,只關心輸出了高電平),即輸出1/0(邏輯1/邏輯0)d)同名net表示引腳連接在一起。VDDiJV 'nLED2ln.lR^KW力一口1nLm2nLED2ln.lR^KW力一口1nLm2iiLLL:"?LED*uLED1MI7nL±D2LI4□LED4LI5nLED*ILKEIN/跖哂riNT4OT4EINTSOTiEINTWUPFGEINTJOTTr>ni-tv!I力網(wǎng)EIN/跖哂riNT4OT4EINTSOTiEINTWUPFGEINTJOTTr>ni-tv!I力網(wǎng)pein1KUBVML1ALEIXRED)_ED(RE曲—產(chǎn)一衿JIDtRLDie)nLED_1:n表示低電平有效。(如低電平燈亮,在這里有效即指燈亮)2、GPF4輸出1/0(怎么做)1)配置為輸出引腳。(GPFCON)2)設置它的狀態(tài)(pinstates,配置GPFDAT寄存器)。3、S3C2440框架與啟動過程SOC(SystemOnChip):CPU+GPIO控制器+4KSRAM(4K內(nèi)存)+NandFlash控制器注:GPIO:GeneralPurposeInput/Output啟動過程:1)NOR啟動:NORFlash基地址為0,片內(nèi)SRAM地址為0x4000,0000,CPU讀出NOR上第一個指令(前4字節(jié)),執(zhí)行。CPU繼續(xù)讀出其他指令執(zhí)行。2)Nand啟動:片內(nèi)4KSRAM基地址為0,NORFlash不可訪問(即設為Nand啟動時,就無法使用NORFlash)。S3C2440的硬件把Nand前4K內(nèi)容復制到片內(nèi)內(nèi)存(SRAM),然后CPU從0地址(SRAM內(nèi))取出第一條指令執(zhí)行。注:NOR與Nand區(qū)別:CPU可直接讀取NORFlash內(nèi)的數(shù)據(jù);CPU讀取NandFlash中數(shù)據(jù)時,需先將代碼復制到SRAM(內(nèi)存)中,再從SRAM中讀取NandFlash的數(shù)據(jù)(即CPU不能直接讀取NandFlash中的數(shù)據(jù))。參考資料:鏈接庫\001_LED原理圖及S3C2440啟動流程.jpg4、點亮LED程序寄存器:1)CPU寄存器:R1、R2、R3、...(可使用R1、R2等直接訪問)2)GPIO寄存器:GPFCON、GPFDAT、GPFUP、...(僅能通過寄存器地址進行訪問)注:1)訪問即指對寄存器的操作,修改、設置寄存器中各個位的值。2)ARM9為32位處理器,所有寄存器都為32位(4字節(jié)一>一個指令長度3)處理器中所有的內(nèi)存或者寄存器都是編址的,即每個地址都對應一塊特定的空間(1個字節(jié)),可能是內(nèi)存,也可能是寄存器。幾條匯編:1)LDR(load):讀內(nèi)存命令如:LDRR0,[R1],假設R1值為x,讀取地址x(實際上是地址x所對應的那塊區(qū)域,可能是內(nèi)存,也可能是寄存器)上的數(shù)據(jù)(4字節(jié),因為是32位處理器),保存到R0中。注: a)計算機是按字節(jié)存儲數(shù)據(jù),一個字節(jié)對應一個地址。32位處理器一次處理4字節(jié)數(shù)據(jù)(32位),所以地址按4依次增加32位處理器的寄存器大小也為32位,所以寄存器地址也按4依次增加。b)設x、y為十進制數(shù)x-y=a,證明兩數(shù)據(jù)差值為a設x、y位十六進制數(shù)x-y=a,證明兩數(shù)據(jù)差值為a即,兩個數(shù)據(jù)間差值即為兩數(shù)據(jù)之差,與進制無關系。如:寄存器GPFCON地址為0x56000050,GPFDAT地址為0x56000054,兩寄存器地址相差4,因為其差值為4,與其是幾進制數(shù)據(jù)無關。又如0b1011與0b1010差值為1,因為0b1011-0b1010=1,或者0b1011=0d11,0b1010=0d10,0d11-0d10=1。由上分析可知,數(shù)據(jù)運算結果與其進制形式無關,進制形式僅是數(shù)據(jù)的表現(xiàn)形式(書寫形式)不同而已,數(shù)據(jù)的本質一大小是保持不變的,采用不同的進制形式是為了方便數(shù)據(jù)的書寫、表達和分析、處理,或者在某些專業(yè)領域某些進制形式更符合物理實際,更利于觀察規(guī)律、解決問題??傊捎貌煌倪M制形式是為了在數(shù)據(jù)使用操作過程中更加方便,而數(shù)據(jù)的本質屬性一大小是不發(fā)生改變的。2)STR(store):寫內(nèi)存命令如:STRR0,[R1],假設R1值為x,把R0的值寫到地址x(實際上是地址x所對應的那塊區(qū)域,可能是內(nèi)存,也可能是寄存器)上去(4字節(jié)因為是32位處理器)。B:跳轉MOV(move)如:MOVR0,R1把R1的值賦給R0,即R0=R1MOVR0,#0x100即,R0=0x100LDRR0,=0x12345678(偽指令:并不存在這樣一條指令,它最終會被拆分成幾條真正的ARM指令)最終所得結果為:R0=0x12345678注:R0=0x12345678如果使用MOV指令完成,即,MOVR0,#0x12345678,則會被報告為錯誤指令,原因如下:一條ARM指令有32位,其中某些為表示MOV指令本身和R0,剩下不足32位來存放數(shù)據(jù),如果該數(shù)據(jù)過大(超過32位或者等于32位),則該指令會報錯。即,MOV指令不能處理任意值,只能處理簡單值(又被稱為立即數(shù))。所以引入偽指令:LDRR0,=任意值(與之前讀內(nèi)存指令區(qū)別在于多了一個“二”)注:關于配置Linux服務器,進行l(wèi)inux與Windows直接文件傳輸與共享的教程(鏈接庫\Ubuntu16.04如何使用samba服務器.pdf)注:關于arm-linux-gcc安裝配置的一系列問題參考。(鏈接庫\Ubuntu16.04[64bit]嵌入式交叉編譯環(huán)境arm-linux-gcc搭建過程圖解.pdf)5、.S(匯編文件)文件編譯成.bin(二進制流一機器碼)文件1)arm-linux-gcc-c-oled_on.oled_on.S(編譯:匯編-->機器碼--0/1代碼)2)arm-linux-ld-Ttext0led_on.o-oled_on.elf(鏈接:機器碼-->機器碼--增加了鏈接庫代碼)3)arm-linux-objcopy-Obinary-Sled_on.elfled_on.bin(鏈接文件-->bin文件,都是機器碼;注意大寫O、S)4)arm-linux-objdump-Dled_on.elf>led_on.dis(反匯編指令:機器碼-->匯編代碼)6、CPU寄存器CPU內(nèi)部有15個寄存器:R1--R15,每個寄存器都有對應的別名(代表其各自的功能),如:R15-->pc、R14-->lr、R13-->sp等。PC:程序計數(shù)器(program禽口也?『當前指令+8)CPU工作模式為流水線:當前執(zhí)行地址A的指令,已經(jīng)在對地址A+4的指令進行譯碼,已經(jīng)在讀取地址A+8的指令。(注:一個字節(jié)對應一個地址
編號,ARM9為32位處理器,一次處理32位數(shù)據(jù),4字節(jié),對應4個地址編號,所以下一個取指令地址為A+4)stackpointer:棧LinkRegister:返回地址(函數(shù)調用注意1)#30:30為立即數(shù),可理解為普通常數(shù)直接使用。2)[pc,#20]:pc的值+20.3)關于程序下載到板子內(nèi)存后每條指令(或數(shù)據(jù))所在地址問題。在使用?!阂蕴锊菲斐绦驎r,送釋從出址處JI始下載,歷以程序的里條指令在口地址處“(存篙布Hand或月口區(qū)中.)0:B:::1.4:e59flDl^e3a00c01e5810000e59flD{]ce3a00000e581QDOOIdrmovstrIdrmovstr]。,#2560:B:::1.4:e59flDl^e3a00c01e5810000e59flD{]ce3a00000e581QDOOIdrmovstrIdrmovstr]。,#256r0f[rl]LP'-frOr#Cr0r[r_[#12];OxD;lc<halt+0x4>0x100;20<haLt+0xB>1.0:lc:::20:eafEfffe560000505600005410-word.ward0x560000500x56000054(原始文件:鏈接庫\1.png)4)只要是接入系統(tǒng)的存儲器(內(nèi)存一Nand和NOR、寄存器等),CPU都會將他們統(tǒng)一編號(地址),每塊空間都對應一個唯一固定的地址(寄存器地址必定不變,其他存儲器若更換則地址可能會變。),將程序或者數(shù)據(jù)放到某個地址上,則就存放到了某塊確定的空間(如某個具有特定功能的寄存器,即操作、設置寄存器)。5)在程序里邊,寄存器和內(nèi)存沒有本質差別,CPU都把他們當做內(nèi)存來使用。6)GPFCON/GPFDAT,在CPU角度,他們就是內(nèi)存,只不過這些內(nèi)存比較特殊,設置某些位(在某個確定地址上存放預定的值)就可以控制引腳。7)關于匯編到機器碼在地址層面的分析(一條匯編一>4字節(jié)機器碼一>整個bin文件)0:etyriujlidrzl,|pcF120) ;Lc<halt-i-0x4>4-Ei^aOOcCH0:etyriujlidrzl,|pcF120) ;Lc<halt-i-0x4>4-Ei^aOOcCHJimiO,t25€ ;OkLOQ6-@5810000str111r(rl]C-b59fl00cidril,|pcF*12] ;20<halt+0K8>10-B^aOOOOOjibiO,fd;0x014;55810000stxxOr(rl]0000001]<b-alt>;19-eafffffrbIB1c:56000050nward0k5€00005020:56000055,word0k5€000Q5^a度匯編J.創(chuàng)日OOODODOD<3tart>:母府的hi枚#U西謹尋橋匯粕打轉抵成『囂Wr如,IdrrLMjisn]—vsmfiui語*在Mfc址t第一條指令、.實際存放的是機三碼.G所有的匯物科蒯語或機智心受此1班了bin文忤(物:G,將其燒錄到內(nèi)存中,一個地址*TF西三中蟠址所用應的空間存過可宇節(jié),32粒歆據(jù)t指令).3)$干bin文件,在下則指定地址,從下荻地址開始,鼻個地址處存或4字節(jié)(但對于立性處現(xiàn)器1,儂忒存液F去,百對于1?hJ堤冢的恬立,h■■工文坤內(nèi)?算的才存放的地址.按文件中普定的地址瓊內(nèi)存放人指定的內(nèi)存中.4/i:jT7-壞.地Giiii.后DimaanDtiDOMOlDL?a10 3em口■= 也心 口口on 三ip*>50DO 垃 3LILn il.=. £?£f £=(H才前="*gM5E(原始文件:鏈接庫\2.png7、ARM構架匯編碼轉機器碼:movr0,#256-->e3a00c01,具體如何轉換?rotate=12immed8=11000000000x100參考ARM架構中MOV指令機器碼格式,修改其中立即數(shù)即可。(鏈接庫\ARM架構rotate=12immed8=11000000000x100cond00I1101SSBZRdshifter_operand立即數(shù)二imined_8循環(huán)右移(2xrotate)MOV指令機器碼312827262524232221201916151211-vro,0x100 11110011101000000000 110000000001度攫)3曬空頌e0-循環(huán)右移24位C 高四位:rotate■^日nwJ,低八位,immed_8即數(shù) 00x10000000000000000000000000000000123位rotate=U (立即數(shù))Ox4oolOOOOOOOOOOQi循環(huán)右移8=;?>1011-0000>00018、進制I無論是十進制、十六進制還是二進制都是對同一數(shù)值的不同描述,其實質一數(shù)值大小是不變的。如:對數(shù)字17該如何表示?「十進制:17二進制:10001二進制:10001十六進制:11--->表示同一個數(shù)值(可以通過計算方式驗證)〔八進制:21II十進制一->n進制(二進制、十六進制、八進制)III為何引入:1)二進制(從硬件方面):在電子系統(tǒng)中,晶體管只有兩個狀態(tài)(on:1;off:0),數(shù)據(jù)使用多個晶體管來表示。如:8bit數(shù)據(jù)-->8個晶體管用二進制描述,吻合硬件狀態(tài)。2)八進制:方便對二進制的記憶。3bit一組(1組用八進制1位表示)。「000---0黑二2J11---73)十六進制:更加方便對二進制的記憶。4bit一組(1組用十六進制1位表示)?!?000---00001---140010---2J111---15IV快速轉換2/8/16進制:8421-->二進制權重1111=1X23+1X22+1X21+1X20=1X8+1X4+1X2+1X1二進制一>八進制(劃分為3bit一組,按組計算:421二進制一>十六進制(劃分為4bit一組,按組計算:8421八進制或十六進制轉成二進制同理。V在C語言中表示二進制、八進制、十進制、十六進制:1)C語言中沒有語法表示二進制,只能表示八進制、十進制和十六進制inta=96;//表示十進制inta=0140;//0開頭表示八進制inta=0x60;//0x開頭表示十六進制以上表示方法都為C語言中語法,即在C語言中以這種格式書寫會被編譯器識別所采用的進制。(也可以看出不同的進制表示的同一數(shù)值參考:鏈接庫\003.編程知識.進制.jpg9、字節(jié)序inta=0x12345678;1)對于十六進制,一位表示4bit,兩位表示1個字節(jié)。2)計算機中,一個字節(jié)對應一個地址編號。即,1個地址中存放1個字節(jié)數(shù)據(jù)(十六進制的兩位3)數(shù)據(jù)在內(nèi)存中兩種存放方式:小字節(jié)序:低位存在低地址;(一般arm芯片都使用小字節(jié)序,S3C2440可修改字節(jié)序)大字節(jié)序:高位存在低地址10、位操作移位左移:a<<2=aX22右移:a>>2=a/22取反(~,not原來為0的位一>1原來為1的位一>0位與(And)1&1=1;1&0=0;0&1=0;0&0=0。位或(or1|1=1;1|0=1;0|1=1;010=0。置位(由基本位操作完成,置位指將相應位設置為1如:inta=0x123,把Bit7、8置位intb=a|(1<<7)|(1<<8)=0x1a3。清位(由基本位操作完成,清位指將相應位設置為0如:inta=0x123,把Bit7、8清位intb=(a&(?(1<<7)))&(?(1<<8))=0x23參考:鏈接庫\004.編程知識.節(jié)序—位操作.jpg11、C語言操作LEDI指針:1)所有變量在內(nèi)存中都有一塊區(qū)域inta=123;int*p=&a;-->p所在內(nèi)存中存放a所在內(nèi)存的起始地址。2)可以通過變量或指針來操作內(nèi)存。int*p=A1;*p=789;-->若①p的值是A1;②p的類型是1世*-->把789寫入A1對應的4字節(jié)(int)內(nèi)存中。II寫出了main函數(shù),誰來調用它?main函數(shù)中變量保存在內(nèi)存中,這個內(nèi)存地址是多少?答:還需要寫一個匯編代碼,給main函數(shù)設置內(nèi)存,調用main函數(shù)IIINand和Nor啟動區(qū)別:當從NAND啟動時cpu會自動從NANDflash中讀取前4KB的數(shù)據(jù)放置在片內(nèi)SRAM里(s3c2440是soc),同時把這段片內(nèi)SRAM映射到nGCS0片選的空間(即0x00000000)cpu是從0x00000000開始執(zhí)行,也就是NANDflash里的前4KB內(nèi)容。因為NANDFLASH連地址線都沒有,不能直接把NAND映射到0x00000000,只好使用片內(nèi)SRAM做一個載體。通過這個載體把nandflash中大代碼復制到RAM(一般是SDRAM)中去執(zhí)行。當從非NANDflash啟動時norflash被映射到0x00000000地址(就是nGCS0,這里就不需要片內(nèi)SRAM來輔助了,所以片內(nèi)SRAM的起始地址還是0x40000000).然后cpu從0x00000000開始執(zhí)行(也就是在Norflash中執(zhí)行)。即,Nor中可以直接執(zhí)行程序,Nand必須以SRAM為載體,將Nand中程序轉存到SRAM中,在SRAM中執(zhí)行程序。Nand啟動時,需要把做核心的啟動程序放在NandFlash的前4K中。IV理解棧頂與棧底(棧區(qū)向下增長SRAM大小為4k,故只能從NandFlash中轉移前SRAM大小為4k,故只能從NandFlash中轉移前4k數(shù)據(jù)到SRAM中,4k=4096字手動申請.手動回收未初始化的全局變量和好態(tài)變量發(fā)起函數(shù)調用時存放函數(shù)內(nèi)局部變量自動申請.自動回收中、3?BSS(BlockStartedbySymbol)節(jié),1字節(jié)對應一個地址,4k對應4096個地址,地址編碼從0x0000到0x1000(0d4096),高地址為棧頂,故棧頂指針sp可設置為sp=4096(0x1000)IV為何為什么nor啟動要將棧頂指針sp設置為0x40000000+4096sdram的地址是:0x30000000-0x40000000。nand啟動時,片內(nèi)ram在0地址處。nor啟動時,片內(nèi)ram在0x40000000往后的4k(即此時SRAM地址范圍是0x40000000-0x40000000+4k),此時的棧頂可以設置到內(nèi)存的上限0x40000000+4kVI將地址數(shù)據(jù)直接賦給指針會報警告,如:unsignedunsignedint*pGPFCON=0x56000050;unsignedunsignedint*pGPFDAT=0x56000054;警告:led.c:5:warning:initializationmakespointerfromintegerwithoutacastled.c:6:warning:initializationmakespointerfromintegerwithoutacast這對結果沒有影響,可以將地址數(shù)據(jù)強制轉化成unsignedint*型就可消除警告。如:unsignedint*pGPFCON=(unsignedint*)0x56000050;unsignedint*pGPFDAT=(unsignedint*)0x56000054;12、補充匯編指令add:addr0,r1,#4;r0=r1+4subsubr0,r1,#4;r0=r1-4subr0,r1,r2;r0=r1-r2BL:branchandlinkblxxx:1)跳轉到xxx;2)把返回地址(下一條指令地址)保存在lr寄存器
1dm(m_many):讀內(nèi)存,寫入多個寄存器stm(m_many):把多個寄存器的值寫入內(nèi)存stmdb:先減、后存sp!:sp等于最終的被修改的sp的值Idmia:先讀、后增。參考:鏈接庫\002—編寫LED程序.jpg注:1)_start:〃可理解為C語言中的函數(shù)名2)R0-R3(即a1-a4)寄存器為工作寄存器,可以被破壞,隨意使用。(可以理解為一般的內(nèi)存,能夠存儲中間數(shù)據(jù)等)寄存器芻字Reg#APCS意義RO al 工作寄存器TOC\o"1-5"\h\zRI :i2 ”R2 a:3 ”R3 ”R4 vl 必須保護R5 v2 ”KB v3 r,RT v4 ”E8 v5 ”R9 v6 ”RID h1 棧限制Ml fp 楨指針RI2 ipR13 國 棧指針lr 連接寄存器R15 pc 程序計數(shù)器3)BSS(BlockStartedbySymbol)發(fā)起函數(shù)調用時存放函數(shù)內(nèi)局部變?自動申請,自動回收BSS(BlockStartedbySymbol)發(fā)起函數(shù)調用時存放函數(shù)內(nèi)局部變?自動申請,自動回收對于上圖棧區(qū)、堆區(qū)、BSS、data段、代碼段的解釋:該整塊空間(包含棧區(qū)、...、代碼段)可以為SRAM(Nand啟動時,4k)、Nor(Nor啟動時)。比如Nand啟動時,內(nèi)存地址從低地址0x0000開始到高地址0x1000,共4字節(jié)從低地址開始依次為代碼段、數(shù)據(jù)區(qū) 棧區(qū),中間可能有部分區(qū)段沒有(如,可能只有代碼區(qū)和棧區(qū))因為代碼段和棧區(qū)使用的較多,因此應該將棧區(qū)在高地址,距離代碼段最遠,防止出現(xiàn)內(nèi)存覆蓋現(xiàn)象。(參考講課筆記深入理解)4)調用函數(shù)之前需要把寄存器(fp、ip、pc等)數(shù)據(jù)壓入棧中,調用結束之后把棧中數(shù)據(jù)取回寄存器。(保護現(xiàn)場)壓棧:push{fp};或stmdbsp!,{fp,ip,lr,pc)出棧:pop{fp};或ldmiasp,{fp,sp,pc)5)pc:程序計數(shù)器,保存當前所執(zhí)行指令的地址(從0地址指令開始執(zhí)行,即pc=0,依次增加)。6)bxlr:相當于MOVpclr,Ir中保存子程序返回地址,在子程序執(zhí)行結束后,執(zhí)行bxlr將返回地址復制到程序計數(shù)器pc中,便可實現(xiàn)子程序的返回。(因為程序跳轉到子程序后,程序計數(shù)器pc必定發(fā)生變化,pc中的值為當前子程序指令所在的地址)7)同一代碼的反匯編結果可能不同。8)棧:sp所指向的內(nèi)存(本質上就是一塊普通的內(nèi)存空間)。作用:①保存寄存器值(壓棧、出棧一>保護現(xiàn)場)②局部變量。9)程序中并不一定需要main函數(shù),之前寫程序都是以main函數(shù)開始,是因為編譯器給封裝好了,程序開始直接跳轉到main函數(shù)來執(zhí)行(bmain)。我們也可以不寫main函數(shù),寫成其他函數(shù)(bfun)。可以理解為這些過程都在一個匯編文件中封裝好的,而我們現(xiàn)在就要自己動手寫這個匯編文件(start.S),來實現(xiàn)這些功能。匯編中調用函數(shù)傳參方法:MOVr0,p1;MOVr1,p2;MOVr2,p3bfun;(相當于:fun(p1,p2,p3);)。10)棧指向一塊內(nèi)存,該內(nèi)存可讀可寫,只要不與代碼存儲區(qū)域沖突即可棧從上往下增長,代碼存儲區(qū)從下往上增長)11)區(qū)分Nand啟動和NOR啟動:Nand啟動時,0地址對應片內(nèi)內(nèi)存;NOR啟動時,0地址對應NORFlashNORFlash可以理解為類似硬盤的東西,可以像內(nèi)存一樣讀,但不能像內(nèi)存一樣寫(對于NOR
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度綠色環(huán)保型社區(qū)門衛(wèi)管理服務協(xié)議4篇
- 風機安裝施工方案
- 強夯土方施工方案
- 速度課程設計講解
- 2025年度新能源項目公司成立合作協(xié)議書規(guī)范文本4篇
- 2025年銷售人員保密與反不正當競爭協(xié)議維護企業(yè)合法權益2篇
- 2025年度個人向公司借款用于房屋維修貸款合同范本3篇
- 2025年度智能房屋租賃管理服務承包合同書4篇
- 2025年教育機構廚師團隊聘用及餐飲服務質量標準合同2篇
- 二零二五版民房建筑施工安全生產(chǎn)責任合同4篇
- 家庭年度盤點模板
- 2024年公需科目培訓考試題及答案
- 2024年江蘇鑫財國有資產(chǎn)運營有限公司招聘筆試沖刺題(帶答案解析)
- 2024年遼寧石化職業(yè)技術學院單招職業(yè)適應性測試題庫含答案
- 廣西桂林市2023-2024學年高二上學期期末考試物理試卷
- 財務指標與財務管理
- 部編版二年級下冊道德與法治第三單元《綠色小衛(wèi)士》全部教案
- 保安春節(jié)安全生產(chǎn)培訓
- 初一語文上冊基礎知識訓練及答案(5篇)
- 血液透析水處理系統(tǒng)演示
- GB/T 27030-2006合格評定第三方符合性標志的通用要求
評論
0/150
提交評論