<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

DS80C400的Keil C語(yǔ)言編程

作者: 時(shí)間:2012-02-01 來(lái)源:網(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語(yǔ)句位于40區的地址0000處。由于sjmp語(yǔ)句占兩個(gè)字節,所以緊隨其后的執行標記{'T', 'I', 'N', 'I', 40h}位于地址0002。當鍵入'E'時(shí),ROM在FEh存儲區中向下查找可執行代碼。如果鍵入'E'后執行了其他代碼,就說(shuō)明ROM在高于 400000h (裝載你的代碼的位置)的地址處找到了執行標記,你可能需要找到該標記,并刪除該存儲區中的內容。

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

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

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

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

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

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

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

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

      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語(yǔ)言相關(guān)文章:c語(yǔ)言教程




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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>