新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > DS80C400的Keil C語言編程

DS80C400的Keil C語言編程

作者: 時間:2012-02-01 來源:網(wǎng)絡(luò) 收藏
      C_STARTUP:   SJMP   STARTUP1DB     'TINI'               ; Tag for TINI Environment 1.02c; or later (ignored in 1.02b)DB     40h                  ; Target bank
注意SJMP STARTUP1語句位于40區(qū)的地址0000處。由于sjmp語句占兩個字節(jié),所以緊隨其后的執(zhí)行標(biāo)記{'T', 'I', 'N', 'I', 40h}位于地址0002。當(dāng)鍵入'E'時,ROM在FEh存儲區(qū)中向下查找可執(zhí)行代碼。如果鍵入'E'后執(zhí)行了其他代碼,就說明ROM在高于 400000h (裝載你的代碼的位置)的地址處找到了執(zhí)行標(biāo)記,你可能需要找到該標(biāo)記,并刪除該存儲區(qū)中的內(nèi)容。

接口至ROM和ROM庫
從C中調(diào)用ROM函數(shù)比較復(fù)雜(調(diào)用ROM函數(shù)的步驟參見High-Speed Microcontroller User's Guide supplement for the 4)。必須將 C編譯器規(guī)范的參數(shù)轉(zhuǎn)換成ROM所使用的規(guī)范。編譯器以XDATA地址和寄存器組合的方式傳遞參數(shù)。而ROM函數(shù)采用不同的方式接收參數(shù)。例如,套接字函數(shù)接受存放在單個參數(shù)緩沖器中的參數(shù),而許多其他應(yīng)用函數(shù)接受特殊功能寄存器或直接存儲器地址傳來的參數(shù)。Dallas Semiconductor編寫了訪問ROM函數(shù)的庫,可完成調(diào)用規(guī)范與ROM參數(shù)規(guī)范間的翻譯工作。

要在你的C程序中使用ROM函數(shù),只需要導(dǎo)入相應(yīng)的庫,并包含一個頭文件。為了在你的項目中導(dǎo)入一個庫,在Keil項目窗口中右擊Source Group 1,并選擇Add Files to Group 'Source Group 1'。將文件過濾器改為‘*.lib’,選擇你需要的庫。然后在源代碼頂部加入頭文件。你可以使用任何一個庫函數(shù)。這些ROM庫可支持:
ROM初始化
DHCP客戶端操作
進程管理
套接字函數(shù)(TCP、UDP、Multicast)
TFTP客戶端操作
一些實用函數(shù)(CRC和偽隨機數(shù)產(chǎn)生等)

使用擴展庫
除了ROM庫,還有許多其他庫(還有更多正在編寫中)提供了很多ROM中沒有的實用功能。這些庫包括:

-文件系統(tǒng),改編自TINI文件系統(tǒng),實現(xiàn)stdio.h中聲明的方法。
-DNS客戶端實現(xiàn)。
-1-Wire?,采用Public Domain Kit (參見www.ibutton.com.cn/software/1wire/wirckit.html)中定義的API。
-I2C,實現(xiàn)一個類似于TINI中所用的設(shè)計。
-CAN,實現(xiàn)一個類似于TINI中所用的設(shè)計。

提供的C庫項目(包括文檔、應(yīng)用實例和發(fā)行說明)可以在http://files.dalsemi.com/tini/ds80c400/c_libraries/index.html上找到。

一個簡單的HTTP服務(wù)器和SNTP客戶端應(yīng)用
Dallas Semiconductor編寫了一個小的應(yīng)用程序來演示這些庫的功能,特別是文件系統(tǒng)、套接字、進程調(diào)度器和TFTP庫等。應(yīng)用實例中包括一個SNTP 客戶端和一個只響應(yīng)'GET'請求的HTTP服務(wù)器。它使用Dallas Semiconductor提供的核心庫調(diào)用套接字和調(diào)度器函數(shù)。它還使用文件系統(tǒng)保存了幾個網(wǎng)頁。該應(yīng)用由兩個進程組成:(1) HTTP服務(wù)器作為一個新進程被創(chuàng)建并用來處理端口80上的連接,以及(2)主進程位于一個循環(huán)中,約每60秒嘗試進行一次時間同步。

文件系統(tǒng)的初始化
啟動HTTP服務(wù)器之前,必須初始化文件系統(tǒng)。演示程序確保兩個靜態(tài)文件,主頁(index.html)和程序源碼(source.html),在服務(wù)器啟動之前已位于文件系統(tǒng)中。 可以用多種方法將這些文件安裝到文件系統(tǒng)。方法之一是在程序代碼數(shù)據(jù)中包含這些文件的文本,然后,在啟動時將文件數(shù)據(jù)寫到文件系統(tǒng)。這是最簡單的方法,而且我們的演示程序也有空閑的代碼空間可供使用。

本演示程序通過TFTP服務(wù)器查找它所需要的文件并初始化其文件系統(tǒng)。這是一種更為有趣、并且更能展示內(nèi)置功能的方法。在我們這個實例中,TFTP服務(wù)器在一個已知的IP地址上運行。文件index.html和source.html由TFTP服務(wù)器獲得,然后被寫入文件系統(tǒng)。

      void initialize_filesystem(){struct sockaddr address;unsigned int i;unsigned int result;void* start = (void*)FS_START;// initialize the file systemint x = finit(FOPEN_MAX, FS_BLOCKS, start);printf("Result of FS init: %d r", x);if ((x==0)  (fexists("index.html")==0)  (fexists("source.html")==0)){printf("File system OK, skip TFTP init.r");return;}// lets get the files we want off a TFTP server// initialize TFTP server settingfor (i=0;i18;i++)address.sin_addr[i] = 0;// since the DS80C400 supports Ipv6, the address is 16 bytes long// however, since we are only using Ipv4 addresses, only the last// 4 bytes are meaningfuladdress.sin_addr[12] = TFTP_IP_MSB;address.sin_addr[13] = TFTP_IP_2;address.sin_addr[14] = TFTP_IP_3;address.sin_addr[15] = TFTP_IP_LSB;result = settftpserver(address, sizeof(struct sockaddr));printf("Set TFTP server to selected server, result: %ur", result);result = tftp_init();printf("Result of TFTP init: %u r", result);get_tftp_file("source.html");get_tftp_file("index.html");}void get_tftp_file(char* filename){unsigned int result;unsigned char* TFTP_MSG;FILE* file;printf("Free FS RAM: %ldr", getFreeFSRAM());TFTP_MSG = getTFTPData();file = fopen(filename, "w");result = tftp_first(filename);if (result==0xFFFF){printf("Error in TFTP_FIRST...r");return;}printf("Result of first segment: %ur", result);fwrite(TFTP_MSG, 1, result, file);while (result >= 512){result = tftp_next(TFTP_MORE_DATA);if (result==0xFFFF){printf("Error in TFTP_NEXT...r");return;}printf("Result of next segment: %ur", result);TFTP_MSG[result] = 0;fwrite(TFTP_MSG, 1, result, file);}tftp_next(TFTP_LAST_SEGMENT);fclose(file);printf("Done with TFTP server.r");} 
				
            
                
			
								

c語言相關(guān)文章:c語言教程




關(guān)鍵詞: DS80C400 Keil C語言編程

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉