在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在DS80C400應(yīng)用中使用SDCC編譯器

星星科技指導(dǎo)員 ? 來(lái)源:ADI ? 作者:ADI ? 2023-06-16 17:32 ? 次閱讀

介紹

DS80C400包含一個(gè)提供網(wǎng)絡(luò)棧、內(nèi)存管理和進(jìn)程調(diào)度的ROM,可以靈活地用于由Java、C和8051匯編編程的應(yīng)用中。SDCC為8051器件提供了一個(gè)免費(fèi)、開放源碼的編譯器,并兼容DS80C400的24位尋址模式。用C編寫的復(fù)雜應(yīng)用程序在Dallas Semiconductor提供的庫(kù)的幫助下,可以很容易地使用DS80C400 ROM功能創(chuàng)建。

本應(yīng)用筆記闡述了如何使用SDCC工具來(lái)創(chuàng)建DS80C400應(yīng)用程序。從一個(gè)HelloWorld應(yīng)用程序開始,然后說(shuō)明如何使用ROM庫(kù)來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的HTTP服務(wù)器。這里的應(yīng)用程序是針對(duì)TINIm400參考模塊編寫和創(chuàng)建的,用于具有其它存儲(chǔ)器配置的設(shè)計(jì)時(shí)必須進(jìn)行相應(yīng)修改。

從SDCC編譯器開始

遵循以下步驟,使用SDCC編譯器來(lái)完成您的第一個(gè)DS80C400的C應(yīng)用程序:

  1. 安裝SDCC編譯器1

    • 從SDCC網(wǎng)站上下載最新版本SDCC編譯器的安裝文件。
    • 遵循安裝文件的指示(可能是sdcc/doc/INSTALL.txt)。
  2. 使用你喜歡的文本編輯器創(chuàng)建一個(gè)新文件"main.c"。在文件中寫入以下代碼:

    #include < stdio.h >
    void main ()
    {
    	printf("Hello Universe!!!!....Welcome to SDCC Tini Test Program");
    
    			while (1)
    			{
    }
    		}
    

    一定要保存文件內(nèi)容。

  3. 從SDCC C庫(kù)站點(diǎn)2中拷貝文件startup400.a51和reg400.inc (包含在啟動(dòng)代碼下載中),并保存到您保存main.c文件的目錄中。此文件包含startup_code函數(shù),將在應(yīng)用程序啟動(dòng)時(shí)調(diào)用該函數(shù),從而對(duì)DS80C400芯片進(jìn)行初始化。啟動(dòng)代碼完成以下工作:

    • 將DS80C400配置成24位連續(xù)地址模式
    • 配置定時(shí)器2用來(lái)為串口產(chǎn)生115200的波特率
    • 初始化數(shù)據(jù)存儲(chǔ)器
  4. 從SDCC C庫(kù)站點(diǎn)拷貝ROM initialization庫(kù)文件(從init庫(kù)文件下載的rominit.lib和rom400.h),并將其解壓縮至相同目錄下。庫(kù)文件是壓縮的,使用WinZip或gunzip/tar解壓縮包。

  5. 在編譯我們的"Hello Universe"應(yīng)用程序之前,我們需要在一個(gè)SDCC安裝的支持文件中作一個(gè)小改動(dòng),覆蓋缺省的DS80C400支持函數(shù)并使用Dallas Semiconductor的C庫(kù)代替。進(jìn)行以下改動(dòng):

    • 將\\SDCC\\lib\\ds400\\libds400.lib文件重命名為\\SDCC\\lib\\ds400\\libds400.lib.old
    • 建立一個(gè)名為\\SDCC\\lib\\ds400\\libds400.lib的空文件(使用touch命令或在您喜歡的文本編輯器中建立一個(gè)新文件)
  6. 構(gòu)建"Hello Universe"應(yīng)用程序...

    • 要由我們的startup400.a51文件創(chuàng)建一個(gè)目標(biāo)文件(.rel),在命令行執(zhí)行以下命令:

      asx8051 -losffgp startup400.a51
      

      asx8051是SDCC工具提供的匯編器。匯編器提供的參數(shù)選項(xiàng)有:| Option | Purpose |

      | -------- | ----------------------------------------------------- |

      | l | generates a list file |

      | o | generates an object file |

      | s | generates a symbol file |

      | ff | flag reolcatable references by mode in listing file |

      | g | make undefined symbols be global |

      | p | disables listing pagination |

      "los"參數(shù)是必須的,因?yàn)?a target="_blank">連接器需要列表、目標(biāo)和符號(hào)文件來(lái)生成可執(zhí)行文件。"ff"和"p"參數(shù)生成一個(gè)可讀的列表文件。"g"參數(shù)通知匯編器在發(fā)現(xiàn)一個(gè)沒有定義的符號(hào)且該符號(hào)未聲明為外部變量時(shí)不報(bào)錯(cuò)。

    • 為了由main.c生成一個(gè)目標(biāo)文件,執(zhí)行以下命令:

      sdcc -c -mds400 --model-flat24 --stack-10bit --no-xinit-opt main.c
      

      sdcc為編譯器。

      傳遞給編譯器的參數(shù)選項(xiàng)為:

      Option Purpose
      -c compiles main.c and creates an object file
      -mds400 generates code for the DS80C400 processor
      --model-flat24 use the 24-bit contiguous memory model
      --stack-10bit use the 1024-byte extended stack (10 bit stack addresses)
      --no-xinit-opt don't initialize the external RAM memory area
      p disables listing pagination

      注意列表中最后三個(gè)參數(shù)是雙破折號(hào)。

    • 為了連接目標(biāo)文件并構(gòu)建可執(zhí)行文件,執(zhí)行以下命令:

      sdcc -mds400 --model-flat24 --stack-10bit -Wl-r --xram-loc
      0x10000 --xram-size 0x3fff --code-loc 0x400000 main.rel startup400.rel -l
      rominit.lib
      

      這里使用的新參數(shù)為:| Option | Purpose |

      | ------------- | -------------------------------------------------------------- |

      | -WI | pass options through to the linker |

      | --xram-loc | external RAM start address (only RAM for SDCC variable use!) |

      | --xram-size | external RAM size (only RAM for SDCC variable use!) |

      | --code-loc | code starting address |

      | -l | include the specified libraries |

      | p | disables listing pagination |

      請(qǐng)注意xram-loc、 xram-size和code-loc參數(shù)為雙破折號(hào)。也要注意給命令指定的RAM將會(huì)用來(lái)存儲(chǔ)SDCC變量,不應(yīng)該和init_rom函數(shù)中用來(lái)初始化DS80C400所使用的存儲(chǔ)器范圍沖突―此存儲(chǔ)器用作網(wǎng)絡(luò)棧和存儲(chǔ)器管理。

    • 為了壓縮可執(zhí)行文件并生成一個(gè)十六進(jìn)制文件,執(zhí)行以下命令:

      packihx main.ihx>hellouniverse.hex

      packihx命令通過(guò)將連續(xù)數(shù)據(jù)記錄累積至16個(gè)字節(jié)來(lái)壓縮可執(zhí)行文件。

有了一個(gè)可執(zhí)行文件后,我們需要將應(yīng)用程序下載到TINIm400模塊中并運(yùn)行它。### 將示例應(yīng)用程序加載到TINIm400模塊

本節(jié)說(shuō)明如何使用Maxim/Dallas Semiconductor提供的 微控制器工具包(MTK) 向TINIm400驗(yàn)證模塊中加載由SDCC編譯器生成的十六進(jìn)制文件。目前可用的MTK版本只支持Windows?。

如果您的開發(fā)環(huán)境不是Windows,需要使用JavaKit應(yīng)用程序來(lái)下載和執(zhí)行應(yīng)用程序。要使用JavaKit,您必須有Java運(yùn)行環(huán)境3 (版本至少為1.2)并且安裝Java Communications API ^4^ 。JavaKit工具包含在TINI軟件開發(fā)包中。寫本文的時(shí)候,發(fā)布的最新固件是固件版本1.13。運(yùn)行JavaKit的指導(dǎo)說(shuō)明可以在TINI SDK docs目錄下的Running_JavaKit.txt文件中找到。如果您在運(yùn)行MTK或JavaKit時(shí)遇到技術(shù)問題,可能其他人已經(jīng)遇到過(guò)類似問題并且已經(jīng)發(fā)表在Dallas Semiconductor的討論區(qū)中。

最新版本的MTK應(yīng)用軟件可下載。要安裝MTK,請(qǐng)運(yùn)行安裝文件并遵照提示操作。成功安裝后,會(huì)增加一個(gè)新的菜單項(xiàng): Start->All Programs->Dallas Semiconductor MTK。 MTK啟動(dòng)后,會(huì)出現(xiàn)圖1所示的對(duì)話框。

圖1. 啟動(dòng)時(shí)MTK選項(xiàng)

圖1. 啟動(dòng)時(shí)MTK選項(xiàng)

選擇選項(xiàng)TINI,以操作TINIm400評(píng)估板。

選擇了TINI之后,會(huì)打開MTK主窗口。從Options->Configure Serial Port菜單選項(xiàng)中選擇您將用來(lái)和TINIm400通訊的串口。然后,選擇Tini->Tini Options菜單項(xiàng),就會(huì)出現(xiàn)下面的對(duì)話框。選擇DSTINIm400按鈕,配置MTK用于和TINIm400板通訊。圖2顯示了帶有DSTINIm400按鈕的對(duì)話框。

圖2. 選擇TINIm400配置選項(xiàng)

圖2. 選擇TINIm400配置選項(xiàng)

選擇Tini->Open COMx at xxx baud菜單選項(xiàng)打開串口。接著選擇Tini->Reset選項(xiàng)復(fù)位評(píng)估板。會(huì)出現(xiàn)DS80C400的加載提示:

DS80C400 Silicon Software - Copyright (C) 2002 Maxim Integrated
Detailed product information available at http://www.maximintegrated.com

Welcome to the TINI DS80C400 Auto Boot Loader 1.0.1
>

從文件菜單中選擇Load HEX File。找到我們剛剛生成的hellouniverse.hex文件并選中。一旦您的程序加載后有兩種方法運(yùn)行它。因?yàn)槲覀儗⒊绦蚣虞d到40區(qū),您可以輸入:

> B40 
 > X

要選擇40區(qū)并運(yùn)行那里的代碼。您也可以輸入:

> E

這會(huì)使ROM查找可執(zhí)行的代碼。它查找一個(gè)標(biāo)識(shí)當(dāng)前區(qū)具有可執(zhí)行代碼的特定標(biāo)簽。此標(biāo)簽由文本'TINI'組成,其后面緊跟著當(dāng)前區(qū)的號(hào)碼(或零),并位于當(dāng)前區(qū)的0002h地址。SDCC編譯器在生成的匯編代碼中插入此標(biāo)簽。如果打開為hellouniverse工程生成的main.asm源代碼,您會(huì)找到下面的代碼段:

.area CSEG    (CODE)
interrupt_vect:
   ; DS80C400 IVT must be generated at runtime.
	sjmp	__sdcc_400boot
	.ascii	'TINI'	; required signature for 400 boot loader.
	.db	0	; selected bank or zero...
__sdcc_400boot:
	ljmp	__sdcc_gsinit_startup

注意sjmp__sdcc_400boot語(yǔ)句位于40區(qū)的0000h地址。其后跟隨可執(zhí)行標(biāo)簽{ 'T', 'I', 'N', 'I', 0h},由于simp語(yǔ)句為兩個(gè)字節(jié),因此該標(biāo)簽位于地址0002處。當(dāng)您鍵入'E'時(shí),ROM從C0h區(qū)開始向下搜索可執(zhí)行代碼。如果您鍵入'E'時(shí),執(zhí)行了其它的代碼,則意味著ROM在一個(gè)比您的代碼加載位置400000h更高的地址找到了一個(gè)可執(zhí)行標(biāo)簽。您可能需要找到此標(biāo)簽的位置,并刪除那個(gè)區(qū)的內(nèi)容。### 和ROM以及SDCC ROM庫(kù)接口

在高速微控制器用戶指南DS80C400補(bǔ)充資料中說(shuō)明了在匯編語(yǔ)言中調(diào)用ROM函數(shù)的過(guò)程。但是,在C中調(diào)用這些ROM函數(shù)會(huì)復(fù)雜一些。必須將參數(shù)從SDCC C編譯器的規(guī)則轉(zhuǎn)換成ROM使用的規(guī)則。SDCC編譯器通過(guò)硬件堆棧、累加器和數(shù)據(jù)指針相結(jié)合的方式來(lái)傳遞參數(shù)。ROM函數(shù)采用許多不同的方式來(lái)接受參數(shù)。例如,socket函數(shù)接收存儲(chǔ)在一個(gè)外部RAM緩沖區(qū)中的參數(shù)。相反地,許多功能函數(shù)接收由特殊功能寄存器或直接存儲(chǔ)器位置傳遞的參數(shù)。為了從SDCC調(diào)用方式轉(zhuǎn)換成ROM參數(shù)方式,Dallas Semiconductor已經(jīng)編寫了訪問ROM函數(shù)的庫(kù)。

在您的C程序中使用ROM函數(shù)只需包含一個(gè)頭文件并與相應(yīng)的庫(kù)文件連接即可。用于SDCC編譯器的ROM庫(kù)包括:

  • ROM初始化程序
  • DHCP客戶端
  • 進(jìn)程調(diào)度
  • Sockets (TCP、UDP和Multicast)
  • TFTP客戶端
  • 功能函數(shù)(CRC16, 隨機(jī)數(shù))

在寫本文時(shí),還沒有為SDCC編譯器提供包括如文件系統(tǒng)、郵件客戶端和HTTP服務(wù)器之類的擴(kuò)展庫(kù)。請(qǐng)關(guān)注SDCC庫(kù)主頁(yè)上的DS80C400升級(jí)信息,我們會(huì)添加支持SDCC的庫(kù)。### 簡(jiǎn)單應(yīng)用:HTTP服務(wù)器

編寫了一個(gè)簡(jiǎn)單的http服務(wù)器來(lái)說(shuō)明如何使用一些ROM庫(kù)函數(shù),特別是socket和進(jìn)程調(diào)度庫(kù)。這個(gè)示例會(huì)偶爾通過(guò)網(wǎng)絡(luò)時(shí)間服務(wù)器更新它的時(shí)間,并且通過(guò)它的web服務(wù)器提供這個(gè)信息。

示例應(yīng)用程序由兩個(gè)模塊組成,一個(gè)HTTP服務(wù)器和SNTP客戶端。主程序生成一個(gè)新的子任務(wù)來(lái)運(yùn)行http服務(wù)器,用于處理80端口上的客戶連接。父任務(wù)每60秒會(huì)試圖通過(guò)時(shí)間服務(wù)器同步當(dāng)前時(shí)間。

SNTP客戶端模塊

以下代碼段實(shí)現(xiàn)SNTP客戶端模塊的核心功能。

socket_handle = socket(0, SOCKET_TYPE_DATAGRAM, 0);

// set a timeout of about 2 seconds
for (i=0;i< 256;i++)
    buffer[i] = 0;
buffer[0] = 0x0;
buffer[1] = 0x0;
buffer[2] = 0x8;
buffer[3] = 0x0;
setsockopt(socket_handle, 0, SO_TIMEOUT, buffer, 200);

buffer[2] = 0;       //reset since we used this in call to setsockopt
buffer[0] = 0x23;    // No warning/NTP Ver 4/Client

address.sin_addr[12] = TIME_NIST_GOV_IP_MSB;
address.sin_addr[13] = TIME_NIST_GOV_IP_2;
address.sin_addr[14] = TIME_NIST_GOV_IP_3;
address.sin_addr[15] = TIME_NIST_GOV_IP_LSB;
address.sin_port_high = (NTP_PORT/0x100); //higher byte of port number
address.sin_port_low = (NTP_PORT%0x100); //lower byte of port number

sendto(socket_handle, buffer, 48, 0, &address, sizeof(struct sockaddr));
recvfrom(socket_handle, buffer, 256, 0, &address, sizeof(struct sockaddr));

//SDCC uses little Endian for storing data, so reorganize the data before converting it to long
buffer[0]=buffer[43];
buffer[1]=buffer[42];
buffer[2]=buffer[41];
buffer[3]=buffer[40];

timeStamp = *(unsigned long *)(&buffer[0]);

formatTimeString(timestamp - (5 * SECONDS_PER_HOUR), "Tampa, USA",
                 last_time_reading_1);
formatTimeString(timeStamp - (3 * SECONDS_PER_HOUR), "Sao Paulo, Brazil",
                 last_time_reading_2);
formatTimeString(timeStamp + (1 * SECONDS_PER_HOUR),"Marseille, France",
                 last_time_reading_3);
formatTimeString(timeStamp + (5 * SECONDS_PER_HOUR) + (30 *
                 SECONDS_PER_MINUTE), "Bangalore, India",
                 last_time_reading_4);
formatTimeString(timeStamp +  (8 * SECONDS_PER_HOUR), "Hsinchu, Taiwan",
                 last_time_reading_5);
last_reading_seconds = getTimeSeconds();
closesocket(socket_handle);

SNTP客戶端模塊同樣是通過(guò)RFC 1361實(shí)現(xiàn)的。SNTP模塊通過(guò)使用UDP協(xié)議和time.nist.gov通訊,并請(qǐng)求一個(gè)時(shí)間戳。需注意編寫這個(gè)應(yīng)用筆記時(shí)還不提供SDCC編譯器的DNS支持,因此time.nist.gov的IP地址是手工設(shè)定的。

首先,創(chuàng)建一個(gè)數(shù)據(jù)包socket并分配一個(gè)大約2秒(0x800==2048 milliseconds)的超時(shí)。這樣會(huì)保證如果和我們選擇的服務(wù)器通訊失敗,我們不會(huì)無(wú)休止地等待響應(yīng)。

接下來(lái)的一行用來(lái)設(shè)置請(qǐng)求的參數(shù)。在RFC 1361的第3節(jié)對(duì)這些位進(jìn)行了說(shuō)明。值0x23在一個(gè)跳秒時(shí)不要求產(chǎn)生警告,要求使用版本4的NTP,并聲明模式為"Client"。我們使用普通數(shù)據(jù)包函數(shù)sendto和recvfrom發(fā)送請(qǐng)求和接收響應(yīng)之后,將時(shí)間戳數(shù)值的秒部分賦予變量timeStamp,然后調(diào)整至參考日期1970年1月1日。用函數(shù)formatTimeString將時(shí)間戳轉(zhuǎn)換成一個(gè)可讀的字符串,比如說(shuō)"In Marseille, France it is 9:37:37 on September 3, 2000。"

用getTimeSeconds函數(shù)來(lái)確定基于DS80C400內(nèi)部時(shí)鐘的最后一次更新的時(shí)間。由于程序只是大約每60秒更新一次,HTML網(wǎng)頁(yè)time.html將會(huì)使用這一數(shù)值來(lái)報(bào)告上一次時(shí)間更新后已經(jīng)過(guò)了多長(zhǎng)時(shí)間。最后,socket關(guān)閉并且SNTP客戶端進(jìn)入另一個(gè)60秒的休眠期。

簡(jiǎn)易的HTTP服務(wù)器

這個(gè)時(shí)間服務(wù)器應(yīng)用程序的另一個(gè)子模塊為一個(gè)web服務(wù)器。此應(yīng)用程序中的服務(wù)器實(shí)現(xiàn)了一個(gè)RFC 2068中描述的HTTP服務(wù)器簡(jiǎn)易版本。只支持"GET"方法--忽略輸入包頭,并且?guī)缀醪唤o出輸出包頭。當(dāng)編寫這個(gè)應(yīng)用筆記時(shí)尚未提供文件系統(tǒng)庫(kù),因此示例應(yīng)用程序動(dòng)態(tài)地生成HTML頁(yè)面。

通過(guò)調(diào)用Berkley-style socket函數(shù)來(lái)創(chuàng)建服務(wù)器soket。這使得建立一個(gè)服務(wù)器socket十分容易。下面的代碼給出了我們的簡(jiǎn)易HTTP服務(wù)器如何創(chuàng)建、綁定和接收新的連接。

struct sockaddr local;
unsigned int socket_handle, new_socket_handle, temp;

socket_handle = socket(0, SOCKET_TYPE_STREAM, 0);
local.sin_port = 80;
bind(socket_handle, &local, sizeof(local));
listen(socket_handle, 5);

printf("Ready to accept HTTP connections...\\r
");

// here is the main loop of the HTTP server
while (1)
{
    new_socket_handle = accept(socket_handle, &address, sizeof(address));
    handleRequest(new_socket_handle);
    closesocket(new_socket_handle);
}

要注意當(dāng)接收一個(gè)新的socket時(shí),這個(gè)簡(jiǎn)易應(yīng)用程序不會(huì)啟動(dòng)一個(gè)新的線程或進(jìn)程來(lái)對(duì)請(qǐng)求進(jìn)行處理,而是在同一進(jìn)程中處理請(qǐng)求。任何優(yōu)于演示品質(zhì)的HTTP服務(wù)器都會(huì)在一個(gè)新的線程中處理到來(lái)的請(qǐng)求,允許同時(shí)發(fā)生多個(gè)連接并能進(jìn)行處理。請(qǐng)求處理完畢后我們關(guān)閉socket并等待下一個(gè)到來(lái)的連接。

HandleRequest方法從接入的請(qǐng)求中解析出文件名并且檢查驗(yàn)證請(qǐng)求方法為'GET'。不允許使用其它的方法(即使是'POST'、 'HEAD'或'OPTIONS')。

為SDCC編譯器編寫DS80C400匯編函數(shù)的注意事項(xiàng)

雖然SDCC提供了豐富的庫(kù)函數(shù)集合,但是有時(shí)我們會(huì)想用匯編語(yǔ)言編寫優(yōu)化的模塊,或?qū)F(xiàn)有的8051匯編模塊移植到我們的應(yīng)用程序中。若8051匯編語(yǔ)言函數(shù)由SDCC編譯器編寫的C程序來(lái)調(diào)用時(shí),在編寫這些匯編函數(shù)時(shí)需切記以下要點(diǎn):

  1. 函數(shù)參變量傳遞約定:下表說(shuō)明了重入函數(shù)的變量傳遞方式

    Argument position Character Integer Long Address
    First argument Dpl Dph:dpl B:dpx:dph:dpl B:dpx:dph:dpl
    Second argument onwards the values will be passed through hardware stack from right to left

    函數(shù)void sample_func(long x, long y,int z) reentrant;的參數(shù)傳遞如下:

  2. 數(shù)據(jù)類型存儲(chǔ)規(guī)則:

    SDCC遵循低字節(jié)在前(Little Endian)的存儲(chǔ)規(guī)則。換句話說(shuō),SDCC使用最低有效字節(jié)在前的二進(jìn)制數(shù)據(jù)存儲(chǔ)格式。
    例如,一個(gè)32位長(zhǎng)的數(shù)值0xDEADBEEF將會(huì)按如下方式存儲(chǔ):

  3. 地址指針大小

    SDCC使用四個(gè)字節(jié)來(lái)保存存儲(chǔ)器地址。下表給出了存儲(chǔ)器地址的格式:

    Most significant byte 3^rd^ byte 2^nd^ Byte Least significant byte
    address type (possible values for ds80c400: 0-near, 1-far, 2-code) MSB of address 2^nd^ byte of address LSB of address

    近距離地址指針使用間接尋址、內(nèi)部RAM存儲(chǔ)器(idata)來(lái)進(jìn)行存儲(chǔ),并且其地址大小只有一個(gè)字節(jié)。原地址的高16位不用。

    遠(yuǎn)距離地址指針用于訪問外部存儲(chǔ)器,為24位。

    有關(guān)SDCC ASx8051匯編器的更多信息,請(qǐng)參考ASxxxx assembler reference manual (ASxxxx匯編器參考手冊(cè))。所有SDCC文檔可以從http://sdcc.sourceforge.net/snap.php#Docs/處下載。

局限性以及開發(fā)問題

以下是我們使用4.0版本的SDCC編譯器時(shí)發(fā)現(xiàn)的局限性:

  1. 編譯器不支持遞歸函數(shù)
  2. 庫(kù)程序未優(yōu)化
  3. 編譯器不支持宏指令
  4. 像printf和sprintf之類的函數(shù)存在一些問題,在一些參數(shù)組合下不能正常工作。例如,以下代碼會(huì)導(dǎo)致應(yīng)用程序掛起:
    char temp[50];
    sprinf(temp,"%d",234234);
    
  5. 帶有長(zhǎng)常量的算術(shù)表達(dá)式不能正常工作。
  6. 用于數(shù)組初始化('int[] values={1, 2, 3, 4, 5};')所生成的匯編代碼不能正確初始化存儲(chǔ)器區(qū)域。

由于SDCC一直處于飛速發(fā)展之中,如果在你的SDCC工具現(xiàn)有版本中發(fā)現(xiàn)任何的缺陷或者你的版本比當(dāng)前發(fā)布的版本早很久時(shí),請(qǐng)下載最新版本。### 結(jié)論

Dallas Semiconductor為SDCC編譯器提供的DS80C400 ROM庫(kù)為嵌入式網(wǎng)絡(luò)應(yīng)用設(shè)計(jì)者們尋找低成本網(wǎng)絡(luò)微控制器解決方案提供了更多的選擇。和TINI Java運(yùn)行環(huán)境相比,使用C語(yǔ)言的DS80C400開發(fā)者將能夠編寫精巧的應(yīng)用程序,賦予系統(tǒng)足夠的速度、能力和代碼空間來(lái)解決任何問題。Dallas Semiconductor正致力于將所有目前工作于Keil編譯器的DS80C400庫(kù)移植到SDCC。請(qǐng)經(jīng)常訪問DS80C400 SDCC庫(kù)主頁(yè)來(lái)獲得升級(jí)。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7636

    瀏覽量

    166425
  • ROM
    ROM
    +關(guān)注

    關(guān)注

    4

    文章

    578

    瀏覽量

    87015
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1656

    瀏覽量

    49893
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    用IAR編譯器開發(fā)DS80C400

    本應(yīng)用筆記闡述了如何開始使用8051 IAR Embedded Workbench?來(lái)創(chuàng)建DS80C400C語(yǔ)言應(yīng)用程序。通過(guò)一個(gè)簡(jiǎn)單的HTTP服務(wù)演示如何使用DS80C400的R
    發(fā)表于 12-07 09:35 ?3398次閱讀
    用IAR<b class='flag-5'>編譯器</b>開發(fā)<b class='flag-5'>DS80C400</b>

    Xilinx SDK中使DS-5編譯器嗎?

    Platform Cable USB II(DLC10)將其加載到我的zc702板上。如何在SDK中成功編譯它?我應(yīng)該在Xilinx SDK中使DS-5編譯器嗎?但是,我不知道如何
    發(fā)表于 03-27 07:43

    如何在音視頻范例網(wǎng)絡(luò)多媒體系統(tǒng)中應(yīng)用DS80C400網(wǎng)絡(luò)型微控制

    本文對(duì)如何在音視頻范例網(wǎng)絡(luò)多媒體系統(tǒng)中應(yīng)用DS80C400網(wǎng)絡(luò)型微控制進(jìn)行分析與討論。
    發(fā)表于 06-02 06:24

    安裝編譯器SDCC的方法

    STC單片機(jī)+SDCC+Stcgal(MAC環(huán)境)1. 安裝編譯器SDCC:我們Mac上通常使用 brew 這個(gè)包管理工具,通過(guò) brew 來(lái)安裝
    發(fā)表于 11-25 08:12

    DS80C400評(píng)估板中文資料pdf

    DS80C400評(píng)估板
    發(fā)表于 04-15 17:42 ?50次下載

    采用DS80C400創(chuàng)建網(wǎng)絡(luò)多媒體應(yīng)用

    采用DS80C400建立網(wǎng)絡(luò)多媒體應(yīng)用令人振奮的多媒體應(yīng)用——包括有線廣播(PA)系統(tǒng)、網(wǎng)絡(luò)門、MP3播放以及安全攝像機(jī)等——可以采用一種低成本的網(wǎng)絡(luò)型微處理建立。本
    發(fā)表于 07-21 00:47 ?16次下載

    DS80C400嵌入式智能網(wǎng)橋中的應(yīng)用

    文章提出了以DS80C400 為核心處理將多路CAN 網(wǎng)絡(luò)與多路以太網(wǎng)互連的嵌入式智能網(wǎng)橋?qū)崿F(xiàn)方案。給出了 DS80C400 MII 與外部物理設(shè)備之間的連接,詳細(xì)闡述JAVAKIT
    發(fā)表于 06-03 08:51 ?7次下載

    使用免費(fèi)的SDCC C編譯器開發(fā)DS89C430/450系列

    摘要:SDCC (小型設(shè)備C編譯器)是為8位微控制開發(fā)的免費(fèi)C編譯器。本應(yīng)用筆記演示如何使用
    發(fā)表于 04-23 13:55 ?6261次閱讀
    使用免費(fèi)的<b class='flag-5'>SDCC</b> <b class='flag-5'>C</b><b class='flag-5'>編譯器</b>開發(fā)<b class='flag-5'>DS89C</b>430/450系列

    基于DS80C400微控制實(shí)現(xiàn)音視頻范例網(wǎng)絡(luò)多媒體系統(tǒng)的設(shè)計(jì)

    新型DS80C400是具有高性能結(jié)構(gòu)和多層網(wǎng)絡(luò)節(jié)點(diǎn)和I/O口及穩(wěn)定的ROM固件的網(wǎng)絡(luò)微控制,它廣泛應(yīng)用于工業(yè)控制/自動(dòng)化、數(shù)據(jù)轉(zhuǎn)換、遠(yuǎn)距離數(shù)據(jù)采集設(shè)備、環(huán)境監(jiān)測(cè)、家庭/辦公室自動(dòng)化、交易/支付
    的頭像 發(fā)表于 06-23 15:38 ?2792次閱讀
    基于<b class='flag-5'>DS80C400</b>微控制<b class='flag-5'>器</b>實(shí)現(xiàn)音視頻范例網(wǎng)絡(luò)多媒體系統(tǒng)的設(shè)計(jì)

    SDCC編譯器和FreeRTOSC8051F上的開發(fā)的應(yīng)用

    SDCC編譯器和FreeRTOSC8051F上的開發(fā)的應(yīng)用(通訊電源技術(shù)2020年15期)-SDCC
    發(fā)表于 08-31 11:38 ?4次下載
    <b class='flag-5'>SDCC</b><b class='flag-5'>編譯器</b>和FreeRTOS<b class='flag-5'>在</b><b class='flag-5'>C</b>8051F上的開發(fā)的應(yīng)用

    SDCC編譯器和FreeRTOSC8051F上的開發(fā)應(yīng)用

    SDCC編譯器和FreeRTOSC8051F上的開發(fā)應(yīng)用(肇慶理士電源技術(shù)有限公司怎么樣)-引言MCS-51系列單片機(jī)應(yīng)用廣泛,我國(guó)學(xué)習(xí)
    發(fā)表于 09-17 12:53 ?8次下載
    <b class='flag-5'>SDCC</b><b class='flag-5'>編譯器</b>和FreeRTOS<b class='flag-5'>在</b><b class='flag-5'>C</b>8051F上的開發(fā)應(yīng)用

    SDCC編譯器和FreeRTOSC8051F上的開發(fā)應(yīng)用

    SDCC編譯器和FreeRTOSC8051F上的開發(fā)應(yīng)用(核達(dá)中遠(yuǎn)通電源技術(shù)有限公司招聘信息)-SDCC
    發(fā)表于 09-18 17:14 ?21次下載
    <b class='flag-5'>SDCC</b><b class='flag-5'>編譯器</b>和FreeRTOS<b class='flag-5'>在</b><b class='flag-5'>C</b>8051F上的開發(fā)應(yīng)用

    利用DS16C32/DS80C390加速80/400位數(shù)學(xué)運(yùn)算

    Maxim DS80C390/DS80C400高速微控制為最終用戶提供專用的硬件16/32位數(shù)學(xué)加速。訪問數(shù)學(xué)加速是通過(guò)使用五個(gè)專用的
    的頭像 發(fā)表于 02-21 10:36 ?1612次閱讀
    利用<b class='flag-5'>DS16C</b>32/<b class='flag-5'>DS80C</b>390加速<b class='flag-5'>80</b>/<b class='flag-5'>400</b>位數(shù)學(xué)運(yùn)算

    采用DS80C400芯片軟件的互聯(lián)網(wǎng)揚(yáng)聲

    DS80C400 是支持互聯(lián)網(wǎng)的揚(yáng)聲的完美選擇。DS80C400的ROM使應(yīng)用能夠以傳輸原始音頻數(shù)據(jù)的速度通過(guò)網(wǎng)絡(luò)進(jìn)行通信。通過(guò)增加一個(gè)16位DAC、一些電阻和少量的焊接工作,DS80C40
    的頭像 發(fā)表于 06-13 15:41 ?818次閱讀
    采用<b class='flag-5'>DS80C400</b>芯片軟件的互聯(lián)網(wǎng)揚(yáng)聲<b class='flag-5'>器</b>

    SDCC-Linux下的51 MCU編譯器

    SDCC (小型設(shè)備C編譯器)是為8位微控制開發(fā)的免費(fèi)C編譯器。盡管兼容多種不同體系結(jié)構(gòu),但
    的頭像 發(fā)表于 06-16 15:19 ?6489次閱讀
    主站蜘蛛池模板: 在线播放 你懂的 | 亚洲日本精品 | 第四色亚洲| 欧美性爽xxxⅹbbbb | 人人草人人插 | 日日干狠狠干 | 黄色的网站在线观看 | 在线色色视频 | 欧美性猛交xxxx黑人喷水 | 色婷婷色综合 | 黄色a网| 射菊吧| 欧洲一级鲁丝片免费 | 免费视频久久看 | 激情五月激情综合色区 | 看视频免费网站 | 啪啪91视频| 琪琪午夜伦埋大全影院 | 天天操天天摸天天射 | 欧美成人午夜毛片免费影院 | 亚洲精品综合网在线8050影院 | 中文一区二区 | 免费黄色一级毛片 | 五月综合激情久久婷婷 | 五月天婷婷视频在线观看 | 国产成年女一区二区三区 | 免费精品美女久久久久久久久 | 久青草免费视频手机在线观看 | 丁香婷婷开心激情深爱五月 | 日本免费人成黄页网观看视频 | 狠狠去 | 免费特黄 | 农村妇女野外一级毛片 | 两人性潮高免费视频看 | 国产好深好硬好爽我还要视频 | 天天看片天天操 | 国内外精品免费视频 | 啪啪免费看视频 | 在线免费观看h视频 | 性xxxxbbbb免费播放视频 | 爱草免费视频 |