<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 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區(qū)的地址0000處。由于sjmp語(yǔ)句占兩個(gè)字節(jié),所以緊隨其后的執(zhí)行標(biāo)記{'T', 'I', 'N', 'I', 40h}位于地址0002。當(dāng)鍵入'E'時(shí),ROM在FEh存儲(chǔ)區(qū)中向下查找可執(zhí)行代碼。如果鍵入'E'后執(zhí)行了其他代碼,就說(shuō)明ROM在高于 400000h (裝載你的代碼的位置)的地址處找到了執(zhí)行標(biāo)記,你可能需要找到該標(biāo)記,并刪除該存儲(chǔ)區(qū)中的內(nèi)容。

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

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

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

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

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

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

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

          本演示程序通過(guò)TFTP服務(wù)器查找它所需要的文件并初始化其文件系統(tǒng)。這是一種更為有趣、并且更能展示內(nèi)置功能的方法。在我們這個(gè)實(shí)例中,TFTP服務(wù)器在一個(gè)已知的IP地址上運(yùn)行。文件index.html和source.html由TFTP服務(wù)器獲得,然后被寫(xiě)入文件系統(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語(yǔ)言相關(guān)文章:c語(yǔ)言教程




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

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();