- Keil Cx51 V7.0單片機高級語言編程與μVision2應(yīng)用實踐
- 徐愛鈞 彭秀華編著
- 2004字
- 2018-12-29 19:18:13
第1章 8051單片機與Keil Cx51基礎(chǔ)
1.1 8051單片機的存儲器組織結(jié)構(gòu)
8051單片機最早由Intel公司推出,它在一塊超大規(guī)模集成電路芯片上同時集成了CPU、ROM、RAM以及TIMER/COUNTER,使用者只需外接少量的接口電路就可組成自己的專用微處理器系統(tǒng)。目前,市場上8051單片機的硬件支持芯片及軟件應(yīng)用程序的種類十分豐富,除了Intel公司之外,還有Philips、Siemens、ADM、Fujutsu、OKI、ATMEL等公司都推出了以8051為核心的單片機。新一代的8051單片機集成度更高,在片內(nèi)集成了更多的功能部件,如A/D、PWM、PCA、WDT以及高速I/O口等,在工業(yè)測量控制領(lǐng)域內(nèi)得到極為廣泛的應(yīng)用,因此,有人指出8051單片機已成為事實上的工業(yè)標(biāo)準(zhǔn)。目前已有多個廠家生產(chǎn)不同型號的8051單片機,它們各有特點,但其基本內(nèi)核相同,指令系統(tǒng)也完全兼容。
圖1.1所示為8051基本內(nèi)核的結(jié)構(gòu)框圖,包括:
● 中央處理器CPU,用于執(zhí)行各種指令和運算處理;
● 內(nèi)部數(shù)據(jù)存儲器RAM,用于存放可以讀寫的數(shù)據(jù);
● 內(nèi)部程序存儲器ROM,用于存放程序指令或某些常數(shù)表格;
● 4個8位的并行I/O接口P0、P1、P2和P3(每個接口都可以用做輸入或者輸出);
● 2個定時器/計數(shù)器,用做外部事件計數(shù)器或內(nèi)部定時;
● 中斷系統(tǒng)具有5個中斷源(2個外部中斷、2個定時器中斷、1個串行口中斷,采用2個優(yōu)先級的嵌套中斷結(jié)構(gòu),可實現(xiàn)二級中斷服務(wù)程序嵌套,每一個中斷源都可用軟件程序規(guī)定為高優(yōu)先級中斷或低優(yōu)先級中斷);
● 1個串行接口電路(用做異步接收發(fā)送器);
● 內(nèi)部時鐘電路(晶體和微調(diào)電容需要外接,振蕩頻率可以高達40MHz)。
以上各部分通過內(nèi)部總線相連接。在很多情況下,單片機還要和外部設(shè)備或外部存儲器相連接,連接方式采用三總線(地址、數(shù)據(jù)、控制)方式,但在8051單片機中,沒有單獨的地址總線和數(shù)據(jù)總線,而是與并行I/O口中的P0口及P2口公用的,進行外部擴展時,P0口分別作為低8位地址線和8位數(shù)據(jù)線,P2口則作為高8位地址線用,所以也是16條地址線和8條數(shù)據(jù)線。但是讀者一定要建立一個明確的概念,單片機進行外部擴展的地址線和數(shù)據(jù)線都不是獨立的總線,而是與并行I/O口公用的,這是8051單片機結(jié)構(gòu)上的一個特點。
對于采用高級語言Keil Cx51的用戶來說,了解和熟悉8051單片機的存儲器組織結(jié)構(gòu)是十分必要的,這樣在具體編程時可以合理安排各種變量,最大限度實現(xiàn)代碼優(yōu)化。從使用者的角度看,8051單片機有如下3個存儲器空間。

圖1.1 8051基本內(nèi)核的結(jié)構(gòu)框圖
程序存儲器ROM 對于普通8051單片機,程序存儲器ROM空間大小為64KB,用于存放程序代碼和一些表格常數(shù),稱為CODE空間。普通8051可采用“代碼分組”(CODE BANK)設(shè)計技術(shù),將ROM空間擴展到32×64KB,新型Philips 80C51Mx單片機的ROM空間最大可擴展到16 MB,稱為ECODE和HCONST空間。8051單片機專門提供一個引腳“EA”來區(qū)分片內(nèi)ROM和片外ROM,EA引腳接高電平時,單片機從片內(nèi)ROM中讀取指令,當(dāng)指令地址超過片內(nèi)ROM空間范圍后,就自動地轉(zhuǎn)向片外ROM讀取指令;EA引腳接低電平時,所有的取指操作均對片外ROM進行。程序存儲器的某些地址單元是保留給系統(tǒng)使用的:0000H~0002H單元是所有執(zhí)行程序的入口地址,復(fù)位后CPU總是從0000H地址開始執(zhí)行程序;0003H~002BH單元均勻地分為5段,用于5個中斷服務(wù)程序的入口,產(chǎn)生某個中斷時,將自動進入其對應(yīng)入口地址開始執(zhí)行中斷服務(wù)程序,一些新型8051單片機增加了更多的中斷源,它們的中斷入口地址也相應(yīng)增加。
片內(nèi)數(shù)據(jù)存儲器RAM 對于普通8051單片機,片內(nèi)數(shù)據(jù)存儲器RAM空間最大為256 B,用于存放程序執(zhí)行過程的各種變量及臨時數(shù)據(jù)。片內(nèi)RAM的低128個字節(jié)可用直接尋址方式進行訪問,也可用間接尋址方式訪問,稱為DATA區(qū)。其中,00H~1FH地址范圍平均分為4組,每組都有8個工作寄存器R0~R7,稱為工作寄存器區(qū)(Register Banks)。20H~2FH地址范圍中,每個存儲器單元的每一位都可以用位處理指令直接操作,該段地址范圍稱為位尋址區(qū)(BDATA區(qū)),其中每一位稱為一個bit。對于51子系列單片機僅有上述低128個字節(jié),對于52子系列單片機,增加了高128個字節(jié)的片內(nèi)RAM,地址范圍為80H~FFH,該范圍只能采用間接尋址方式訪問,整個片內(nèi)RAM地址范圍00H~FFH稱為IDATA區(qū)。與IDATA空間高128個字節(jié)(地址范圍80H~FFH)重疊部分稱為特殊功能寄存器區(qū)(SFR SPACE),有些特殊功能寄存器是可以位尋址的,其可尋址位稱為sbit。Philips公司推出的新型單片機80C51Mx,其片內(nèi)RAM最大可擴充到64 KB,稱為EDATA區(qū)。
片外數(shù)據(jù)存儲器RAM 對于普通8051單片機,片外數(shù)據(jù)存儲器RAM空間大小為64 KB,稱為XDATA區(qū)。在XDATA空間內(nèi)進行分頁尋址操作時,稱為PDATA區(qū)。有些新型80C51單片機的擴充片內(nèi)RAM,需要用專門的特殊功能寄存器“映像”(MAP)到XDATA地址空間;還有一些新型80C51單片機可以將片外RAM最大擴展到16 MB,稱為HDATA區(qū)。
圖1.2所示為普通8051單片機的存儲器組織結(jié)構(gòu),其中,各部分空間說明及地址范圍見表1-1。
表1-1 普通8051單片機存儲器空間分配表


圖1.2 普通8051單片機的存儲器組織結(jié)構(gòu)
圖1.3所示為新型80C51單片機的擴展存儲器組織結(jié)構(gòu),其中各部分空間說明及地址范圍見表1-2。
表1-2 新型80C51單片機擴展存儲器空間分配表

圖1.4所示為Philips 80C51Mx單片機的存儲器組織結(jié)構(gòu),其中各部分空間說明及地址范圍見表1-3。
表1-3 Philips 80C51Mx單片機存儲器空間分配表


圖1.3 新型8051單片機的擴展存儲器組織結(jié)構(gòu)

圖1.4 Philips 80C51Mx單片機的存儲器組織結(jié)構(gòu)
1.2 Keil Cx51開發(fā)工具
C語言是一種通用的計算機程序設(shè)計語言,在國際上十分流行,它既可用來編寫計算機的系統(tǒng)程序,也可用來編寫一般的應(yīng)用程序。以前計算機的系統(tǒng)軟件主要是用匯編語言編寫的,對于單片機應(yīng)用系統(tǒng)來說更是如此。由于匯編語言程序的可讀性和可移植性都較差,采用匯編語言編寫單片機應(yīng)用程序的周期長,而且調(diào)試和排錯也比較困難。為了提高編制單片機應(yīng)用程序的效率,改善程序的可讀性和可移植性,采用高級語言無疑是一種最好的選擇。
C語言既具有一般高級語言的特點,又能直接對計算機的硬件進行操作,表達和運算能力也較強,許多以前只能采用匯編語言來解決的問題現(xiàn)在都可以改用C語言來解決。德國Keil Software公司多年來致力于單片機C語言編譯器的研究,該公司開發(fā)的Keil Cx51是一種專為8051單片機設(shè)計的高效率C語言編譯器,符合ANSI標(biāo)準(zhǔn),生成的程序代碼運行速度極高,所需要的存儲器空間極小,完全可以和匯編語言相媲美。
Keil公司目前已經(jīng)推出了V7.0以上版本的Cx51編譯器,為8051單片機軟件開發(fā)提供了全新的C語言環(huán)境,同時保留了匯編代碼高效、快速的特點。Cx51已被完全集成到一個功能強大的全新集成開發(fā)環(huán)境μVision2中,其中包括項目(Project)管理器、Cx51編譯器、Ax51宏匯編器、BL51/Lx51連接定位器、RTX51實時操作系統(tǒng)、Simulator軟件模擬器以及Monitor51硬件目標(biāo)調(diào)試器,所有這些功能均可在μVision2提供的單一而靈活的開發(fā)環(huán)境中極為簡便地進行操作。
μVision2提供了強大的項目管理功能,可以十分方便地進行結(jié)構(gòu)化多模塊程序設(shè)計。μVision2內(nèi)部集成源級瀏覽器(Browser)利用符號數(shù)據(jù)庫中詳細的符號信息,使用戶可以快速瀏覽源文件,并優(yōu)化用戶的變量數(shù)據(jù)存儲器。
μVision2內(nèi)部集成器件數(shù)據(jù)庫(Device Database)儲存了多種不同型號單片機的片上資源信息,通過它可以自動設(shè)置Cx51編譯器、Ax51宏匯編器、BL51/Lx51連接定位器及調(diào)試器的默認選項,充分滿足用戶利用特定單片機片上集成外圍功能的要求。
μVision2內(nèi)部集成源程序編輯器允許用戶在編輯源程序文件時(甚至在未經(jīng)編譯和匯編之前)設(shè)置程序調(diào)試斷點,便于在程序調(diào)試過程中快速檢查和修改程序。
μVision2提供文件查找功能,能對單一文件或全部項目文件進行指定搜索。此外還提供了用戶工具菜單接口,允許在μVision2中直接啟動用戶功能。
μVision2支持軟件模擬仿真(Simulator)和用戶目標(biāo)板調(diào)試(Monitor51)兩種工作方式,在軟件模擬仿真方式下不需要任何8051單片機硬件即可完成用戶程序仿真調(diào)試,極大地提高了用戶程序開發(fā)效率,在用戶目標(biāo)板調(diào)試方式下,利用硬件目標(biāo)板中的監(jiān)控程序可以直接調(diào)試目標(biāo)硬件系統(tǒng),使用戶可以節(jié)省購買昂貴硬件仿真器的費用。
1.3 Cx51簡單編程與調(diào)試
采用Keil Cx51開發(fā)8051單片機應(yīng)用程序一般需要以下步驟。
① 在μVision2集成開發(fā)環(huán)境中創(chuàng)建一個新項目(Project),并為該項目選定合適的單片機CPU器件。
② 利用μVision2的文件編輯器編寫C語言(或匯編語言)源程序文件,并將文件添加到項目中去。一個項目可以包含多個文件,除源程序文件外還可以有庫文件或文本說明文件。
③ 通過μVision2的各種選項,配置Cx51編譯器、Ax51宏匯編器、BL51/Lx51連接定位器以及Debug調(diào)試器的功能。
④ 利用μVision2的構(gòu)造(Build)功能對項目中的源程序文件進行編譯連接,生成絕對目標(biāo)代碼和可選的HEX文件,如果出現(xiàn)編譯連接錯誤則返回到第②步,修改源程序中的錯誤后重新構(gòu)造整個項目。
⑤ 將沒有錯誤的絕對目標(biāo)代碼裝入μVision2調(diào)試器進行仿真調(diào)試,調(diào)試成功后將HEX文件寫入到單片機應(yīng)用系統(tǒng)的EPROM中。
下面通過一個簡單實例進行說明這幾個步驟。啟動μVision2后,單擊“Project/New Project”菜單選項,在彈出的對話框窗口中輸入項目文件名max,并選擇合適的保存路徑(通常為每個項目建一個單獨的文件夾),單擊“保存”按鈕,這樣就創(chuàng)建了一個文件名為max.uv2的新項目文件,如圖1.5所示。

圖1.5 在μVision2中新建一個項目
項目名保存完畢后將彈出如圖1.6所示器件數(shù)據(jù)庫對話框窗口,用于為新建項目選擇一個CPU器件(窗口的Description欄對不同公司生產(chǎn)的8051CPU器件做了必要說明),根據(jù)需要選擇CPU器件(例如Atmel公司的AT89C51),選定后μVision2將按所選器件自動設(shè)置默認的工具選項,從而簡化了項目的配置過程。

圖1.6 為項目選擇CPU器件
創(chuàng)建一個新項目后,項目中會自動包含一個默認的目標(biāo)(Target 1)和文件組(Source Group 1)。用戶可以給項目添加其他文件組(Group)以及文件組中的的源文件,這對于模塊化編程特別有用。項目中的目標(biāo)名、組名以及文件名都顯示在μVision2的項目窗口“Files”標(biāo)簽頁中。接下來要給項目添加源程序文件,源文件可以是已有的,也可以是新建的。新建源文件時單擊菜單“File /New”,在打開的編輯窗口中輸入下例的C51源程序。
例:求兩個輸入數(shù)據(jù)中的較大者。
# include<stdio.h> /* 預(yù)處理命令 */ # include<reg51.h> char max (char x , char y) { /* 定義max函數(shù),x、y為形式參數(shù)*/ if ( x > y ) return (x); /* 將計算得到的最大值返回到調(diào)用處*/ else return(y) ; } /* max函數(shù)結(jié)束 */ main() { /* 主函數(shù) */ char a, A, c; /* 主函數(shù)的內(nèi)部變量類型說明 */ SCON=0x52; /* 8051單片機串行口初始化 */ TMOD=0x20; TCON=0x69; TH1=0x0F3; scanf ("%c %c", &a, &A); /* 輸入變量a和b的值 */ c= max (a,A); /* 調(diào)用max函數(shù) */ printf ( " \n max =%c \n ", c); /* 輸出變量c的值 */ } /* 主程序結(jié)束 */
程序輸入完成后,單擊菜單“Files /Save As…”,如圖1.7所示,將其另存為擴展名為.C的源程序文件,其存放的路徑一般設(shè)為與項目文件相同。

圖1.7 保存新建項目中的源程序文件
μVision2具有十分完善的右鍵功能,將鼠標(biāo)指向項目窗口的“Files”標(biāo)簽頁中的“Source Group 1”文件組并單擊右鍵,會彈出一個快捷菜單,如圖1.8所示。

圖1.8 項目窗口的右鍵菜單
單擊快捷菜單中的“Add Files to Group ‘Source Group 1’”選項,彈出如圖1.9所示添加源文件選擇窗口,選中剛才保存的源程序文件“max.c”,并單擊“Add”按鈕,將其添加到新創(chuàng)建的項目中去。

圖1.9 添加源文件選擇窗口
接下來根據(jù)需要配置Cx51編譯器、Ax51宏匯編器、BL51/Lx51連接定位器以及Debug調(diào)試器的各項功能。單擊菜單“Project/Options for Target”,彈出如圖1.10所示窗口,這是一個十分重要的窗口,包括“Device”、“Target”、“Output”、“Listing”、“C51”、“A51”、“BL51 Locate”、“BL51 Misc”和“Debug”等多個選項標(biāo)簽頁,其中許多選項可以直接用其默認值,必要時可進行適當(dāng)調(diào)整。
圖1.10所示為其中的“Target”標(biāo)簽頁,用于設(shè)定目標(biāo)硬件系統(tǒng)的時鐘頻率Xtal為24.0 MHz;C51編譯器的存儲器模式為Small(C51程序中局部變量位于片內(nèi)數(shù)據(jù)存儲器DATA空間);程序存儲器ROM空間設(shè)為Large(使用64KB程序存儲器);不采用實時操作系統(tǒng);不采用代碼分組設(shè)計。

圖1.10 配置“Target”標(biāo)簽頁
圖1.11所示為“Output”標(biāo)簽頁,用于設(shè)定當(dāng)前項目在編譯連接之后生成的執(zhí)行代碼輸出文件。輸出文件名默認為與項目文件同名(也可以指定其他文件名),存放在當(dāng)前項目文件所在的目錄中,也可以單擊“Select Folder For Objects”來指定存放輸出文件的目錄路徑。
● 選中“Create Executable”表示項目編譯連接后生成執(zhí)行代碼輸出文件。
● 選中復(fù)選框“Debug Information”將在輸出文件中包含進行源程序調(diào)試的符號信息。
● 選中復(fù)選框“Browse Information”將在輸出文件中包含源程序瀏覽信息。
● 選中復(fù)選框“Create HEX File”表示當(dāng)前項目編譯連接完成之后生成一個用于EPROM編程的HEX文件。
● 在“After Make”欄中選中復(fù)選框“Beep When Complete”和復(fù)選框“Start Debugging”表示編譯連接完成之后計算機將發(fā)出一聲提示音,并立即進入調(diào)試狀態(tài)。

圖1.11 設(shè)定執(zhí)行代碼輸出文件選項
圖1.12所示為“C51”標(biāo)簽頁,用于設(shè)定當(dāng)前項目對Cx51編譯器的控制命令選項。“Preprocessor Symbols”欄用于定義Cx51預(yù)處理器符號,定義符號后一般要在源程序中增加相應(yīng)的“ifdef”、“ifndef”、“endif”等預(yù)處理器命令。
●“Code Optimization”欄用于設(shè)定Cx51編譯器的優(yōu)化級別,需要注意的是優(yōu)化級別并非越高越好,應(yīng)根據(jù)具體要求適當(dāng)選擇,關(guān)于Cx51編譯器優(yōu)化級別的詳細描述請參閱本書第9章。
●“Warning”欄用于選擇編譯時給出警告信息的詳細程度,編號越大越詳細。
●“Include Paths”欄用于指定用戶規(guī)定的包含文件路徑,可以手工指定路徑,也可以通過該欄右邊的“…”按鈕來瀏覽選擇路徑。
●“Misc Controls”用于增加除了Cx51編譯器默認選項之外的其他命令選項。
● 所有選定的編譯命令選項都會顯示在“Compiler control string”欄內(nèi)。
圖1.13所示為“BL51 Locate”標(biāo)簽頁,用于設(shè)定當(dāng)前項目對BL51連接定位器的命令選項。選中復(fù)選框“Use Memory Layout from Target Dialog”時,BL51連接定位器將按前面“Target”標(biāo)簽頁中的設(shè)定對執(zhí)行代碼進行存儲器地址空間定位,這也是BL51的默認選項。不選中該復(fù)選框則應(yīng)在其他欄內(nèi)填入希望的存儲器地址空間范圍值。關(guān)于BL51連接定位器對存儲器地址空間處理的詳細討論請參閱本書第11章。

圖1.12 設(shè)定Cx51編譯器命令選項

圖1.13 設(shè)定BL51連接定位命令選項
圖1.14所示為“Options”選項中的“Debug”標(biāo)簽頁,用于設(shè)定μVision2調(diào)試器的一些選項。在μVision2中可以對經(jīng)編譯連接所生成的執(zhí)行代碼進行兩種仿真調(diào)試:軟件模擬仿真調(diào)試和目標(biāo)硬件仿真調(diào)試,前者不需要8051單片機硬件,僅在PC機上就可以完成對8051單片機各種片內(nèi)資源的仿真,仿真結(jié)果可以通過μVision2的串行窗口、觀察窗口、存儲器窗口及其他一些窗口直接輸出,其優(yōu)點是不言而喻的,缺點是不能觀察到實際硬件的動作。
Keil公司還提供了一種目標(biāo)監(jiān)控程序Monitor51,通過它可以實現(xiàn)μVision2與用戶目標(biāo)硬件系統(tǒng)相連接,進行目標(biāo)硬件的在線仿真調(diào)試,這種方法可以立即觀察到目標(biāo)硬件的實際動作,特別有利于分析和排除各種硬件故障。通常可以先對用戶程序進行軟件模擬仿真,排除一般性錯誤,然后再進行目標(biāo)硬件仿真調(diào)試。
進行軟件模擬仿真時應(yīng)選中“Debug”標(biāo)簽頁中的“Use Simulator”圓形單選框,進行目標(biāo)硬件仿真調(diào)試時則要選中“Use Keil Monitor-51 Driver”圓形單選框,為了便于讀者進一步學(xué)習(xí)Keil Cx51應(yīng)用編程,開發(fā)自己的單片機系統(tǒng),本書作者設(shè)計了一種能直接與μVision2接口的“Keil Cx51源程序仿真硬件目標(biāo)板”,其中預(yù)裝了Keil公司提供的Monitor-51監(jiān)控程序,可以實現(xiàn)與μVision2無縫連接,使用非常方便,節(jié)省用戶購買昂貴硬件仿真器的費用,關(guān)于它的具體使用方法請參閱本書8.4節(jié)。

圖1.14 設(shè)定Debug仿真調(diào)試選項
在該窗口所有的標(biāo)簽頁中都有一個“Defaults”按鈕,用于設(shè)定各種默認命令選項,初次使用時可以直接采用這些默認值,待熟悉之后再進一步采用其他選項。有關(guān)其他標(biāo)簽頁的詳細描述請參閱本書第7章。
完成上述關(guān)于編譯、連接定位、仿真調(diào)試工具配置的基本選項設(shè)定之后,就可以對當(dāng)前新建項目進行整體創(chuàng)建(Build target)。將鼠標(biāo)指向項目窗口中的文件“max.c”并單擊右鍵,從彈出的快捷菜單中單擊“Build target”選項,如圖1.15所示,μVision2將按“Options for Target”窗口內(nèi)各種選項設(shè)置,自動完成對當(dāng)前項目中所有源程序模塊文件的編譯連接,同時μVision2的輸出窗口將顯示編譯連接提示信息,如圖1.16所示,如果有編譯連接錯誤,將鼠標(biāo)指向窗口內(nèi)的提示信息后雙擊,光標(biāo)將自動跳到編輯窗口源程序文件發(fā)生錯誤的地方,以便于修改。如果沒有編譯連接錯誤則生成絕對目標(biāo)代碼文件。
編譯連接完成后將μVision2轉(zhuǎn)入仿真調(diào)試狀態(tài),在此狀態(tài)下的“項目窗口”自動轉(zhuǎn)到“Regs”標(biāo)簽頁,顯示調(diào)試過程中單片機內(nèi)部工作寄存器R0~R7、累加器A、堆棧指針SP、數(shù)據(jù)指針DPTR、程序計數(shù)器PC以及程序狀態(tài)字PSW等的值,如圖1.17所示。
在仿真調(diào)試狀態(tài)下單擊“Debug/Go”菜單項,啟動用戶程序全速運行,再單擊“View/Serial Window #1”選項,打開調(diào)試狀態(tài)下μVision2的串行窗口1,用戶程序中采用scanf()和printf()所進行的輸入和輸出操作,都是通過串行窗口1實現(xiàn)的,將鼠標(biāo)指向該窗口并鍵入數(shù)字2和9,立即得到輸出結(jié)果“max=9”,如圖1.18所示。

圖1.15 利用右鍵快捷菜單對當(dāng)前項目進行編譯連接

圖1.16 編譯連接完成后輸出窗口的提示信息
μVision2調(diào)試器的仿真功能十分完善,除了全速運行之外還可以進行單步、設(shè)置斷點、運行到光標(biāo)指定位置等多種操作,調(diào)試過程中可隨時觀察局部變量以及用戶設(shè)置的觀察點狀態(tài)、存儲器狀態(tài)、片內(nèi)集成外圍功能狀態(tài),通過調(diào)用信號函數(shù)或用戶函數(shù)可實現(xiàn)其他多種仿真功能。關(guān)于μVision2調(diào)試器的詳細介紹請參閱本書第7章。

圖1.17 μVision2的仿真調(diào)試狀態(tài)窗口

圖1.18 μVision2調(diào)試狀態(tài)下串行窗口1及其數(shù)據(jù)輸入和結(jié)果輸出
- C語言程序設(shè)計案例教程(第2版)
- Python爬蟲開發(fā):從入門到實戰(zhàn)(微課版)
- JavaScript前端開發(fā)與實例教程(微課視頻版)
- Learning Apache Kafka(Second Edition)
- 深度強化學(xué)習(xí)算法與實踐:基于PyTorch的實現(xiàn)
- 微信小程序全棧開發(fā)技術(shù)與實戰(zhàn)(微課版)
- AIRIOT物聯(lián)網(wǎng)平臺開發(fā)框架應(yīng)用與實戰(zhàn)
- Apache Camel Developer's Cookbook
- Orchestrating Docker
- Fastdata Processing with Spark
- 數(shù)據(jù)分析與挖掘算法:Python實戰(zhàn)
- 3ds Max 2018從入門到精通
- Mastering ArcGIS Server Development with JavaScript
- 可視化H5頁面設(shè)計與制作:Mugeda標(biāo)準(zhǔn)教程
- Node.js Web Development