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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

在DS80C400應用中使用SDCC編譯器

星星科技指導員 ? 來源:ADI ? 作者:ADI ? 2023-06-16 17:32 ? 次閱讀

介紹

DS80C400包含一個提供網絡棧、內存管理和進程調度的ROM,可以靈活地用于由Java、C和8051匯編編程的應用中。SDCC為8051器件提供了一個免費、開放源碼的編譯器,并兼容DS80C400的24位尋址模式。用C編寫的復雜應用程序在Dallas Semiconductor提供的庫的幫助下,可以很容易地使用DS80C400 ROM功能創建。

本應用筆記闡述了如何使用SDCC工具來創建DS80C400應用程序。從一個HelloWorld應用程序開始,然后說明如何使用ROM庫來實現一個簡單的HTTP服務器。這里的應用程序是針對TINIm400參考模塊編寫和創建的,用于具有其它存儲器配置的設計時必須進行相應修改。

從SDCC編譯器開始

遵循以下步驟,使用SDCC編譯器來完成您的第一個DS80C400的C應用程序:

  1. 安裝SDCC編譯器1

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

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

    一定要保存文件內容。

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

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

  5. 在編譯我們的"Hello Universe"應用程序之前,我們需要在一個SDCC安裝的支持文件中作一個小改動,覆蓋缺省的DS80C400支持函數并使用Dallas Semiconductor的C庫代替。進行以下改動:

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

    • 要由我們的startup400.a51文件創建一個目標文件(.rel),在命令行執行以下命令:

      asx8051 -losffgp startup400.a51
      

      asx8051是SDCC工具提供的匯編器。匯編器提供的參數選項有:| 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"參數是必須的,因為連接器需要列表、目標和符號文件來生成可執行文件。"ff"和"p"參數生成一個可讀的列表文件。"g"參數通知匯編器在發現一個沒有定義的符號且該符號未聲明為外部變量時不報錯。

    • 為了由main.c生成一個目標文件,執行以下命令:

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

      sdcc為編譯器。

      傳遞給編譯器的參數選項為:

      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

      注意列表中最后三個參數是雙破折號。

    • 為了連接目標文件并構建可執行文件,執行以下命令:

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

      這里使用的新參數為:| 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 |

      請注意xram-loc、 xram-size和code-loc參數為雙破折號。也要注意給命令指定的RAM將會用來存儲SDCC變量,不應該和init_rom函數中用來初始化DS80C400所使用的存儲器范圍沖突―此存儲器用作網絡棧和存儲器管理。

    • 為了壓縮可執行文件并生成一個十六進制文件,執行以下命令:

      packihx main.ihx>hellouniverse.hex

      packihx命令通過將連續數據記錄累積至16個字節來壓縮可執行文件。

有了一個可執行文件后,我們需要將應用程序下載到TINIm400模塊中并運行它。### 將示例應用程序加載到TINIm400模塊

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

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

最新版本的MTK應用軟件可下載。要安裝MTK,請運行安裝文件并遵照提示操作。成功安裝后,會增加一個新的菜單項: Start->All Programs->Dallas Semiconductor MTK。 MTK啟動后,會出現圖1所示的對話框。

圖1. 啟動時MTK選項

圖1. 啟動時MTK選項

選擇選項TINI,以操作TINIm400評估板。

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

圖2. 選擇TINIm400配置選項

圖2. 選擇TINIm400配置選項

選擇Tini->Open COMx at xxx baud菜單選項打開串口。接著選擇Tini->Reset選項復位評估板。會出現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文件并選中。一旦您的程序加載后有兩種方法運行它。因為我們將程序加載到40區,您可以輸入:

> B40 
 > X

要選擇40區并運行那里的代碼。您也可以輸入:

> E

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

.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語句位于40區的0000h地址。其后跟隨可執行標簽{ 'T', 'I', 'N', 'I', 0h},由于simp語句為兩個字節,因此該標簽位于地址0002處。當您鍵入'E'時,ROM從C0h區開始向下搜索可執行代碼。如果您鍵入'E'時,執行了其它的代碼,則意味著ROM在一個比您的代碼加載位置400000h更高的地址找到了一個可執行標簽。您可能需要找到此標簽的位置,并刪除那個區的內容。### 和ROM以及SDCC ROM庫接口

在高速微控制器用戶指南DS80C400補充資料中說明了在匯編語言中調用ROM函數的過程。但是,在C中調用這些ROM函數會復雜一些。必須將參數從SDCC C編譯器的規則轉換成ROM使用的規則。SDCC編譯器通過硬件堆棧、累加器和數據指針相結合的方式來傳遞參數。ROM函數采用許多不同的方式來接受參數。例如,socket函數接收存儲在一個外部RAM緩沖區中的參數。相反地,許多功能函數接收由特殊功能寄存器或直接存儲器位置傳遞的參數。為了從SDCC調用方式轉換成ROM參數方式,Dallas Semiconductor已經編寫了訪問ROM函數的庫。

在您的C程序中使用ROM函數只需包含一個頭文件并與相應的庫文件連接即可。用于SDCC編譯器的ROM庫包括:

  • ROM初始化程序
  • DHCP客戶端
  • 進程調度
  • Sockets (TCP、UDP和Multicast)
  • TFTP客戶端
  • 功能函數(CRC16, 隨機數)

在寫本文時,還沒有為SDCC編譯器提供包括如文件系統、郵件客戶端和HTTP服務器之類的擴展庫。請關注SDCC庫主頁上的DS80C400升級信息,我們會添加支持SDCC的庫。### 簡單應用:HTTP服務器

編寫了一個簡單的http服務器來說明如何使用一些ROM庫函數,特別是socket和進程調度庫。這個示例會偶爾通過網絡時間服務器更新它的時間,并且通過它的web服務器提供這個信息。

示例應用程序由兩個模塊組成,一個HTTP服務器和SNTP客戶端。主程序生成一個新的子任務來運行http服務器,用于處理80端口上的客戶連接。父任務每60秒會試圖通過時間服務器同步當前時間。

SNTP客戶端模塊

以下代碼段實現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客戶端模塊同樣是通過RFC 1361實現的。SNTP模塊通過使用UDP協議和time.nist.gov通訊,并請求一個時間戳。需注意編寫這個應用筆記時還不提供SDCC編譯器的DNS支持,因此time.nist.gov的IP地址是手工設定的。

首先,創建一個數據包socket并分配一個大約2秒(0x800==2048 milliseconds)的超時。這樣會保證如果和我們選擇的服務器通訊失敗,我們不會無休止地等待響應。

接下來的一行用來設置請求的參數。在RFC 1361的第3節對這些位進行了說明。值0x23在一個跳秒時不要求產生警告,要求使用版本4的NTP,并聲明模式為"Client"。我們使用普通數據包函數sendto和recvfrom發送請求和接收響應之后,將時間戳數值的秒部分賦予變量timeStamp,然后調整至參考日期1970年1月1日。用函數formatTimeString將時間戳轉換成一個可讀的字符串,比如說"In Marseille, France it is 9:37:37 on September 3, 2000。"

用getTimeSeconds函數來確定基于DS80C400內部時鐘的最后一次更新的時間。由于程序只是大約每60秒更新一次,HTML網頁time.html將會使用這一數值來報告上一次時間更新后已經過了多長時間。最后,socket關閉并且SNTP客戶端進入另一個60秒的休眠期。

簡易的HTTP服務器

這個時間服務器應用程序的另一個子模塊為一個web服務器。此應用程序中的服務器實現了一個RFC 2068中描述的HTTP服務器簡易版本。只支持"GET"方法--忽略輸入包頭,并且幾乎不給出輸出包頭。當編寫這個應用筆記時尚未提供文件系統庫,因此示例應用程序動態地生成HTML頁面。

通過調用Berkley-style socket函數來創建服務器soket。這使得建立一個服務器socket十分容易。下面的代碼給出了我們的簡易HTTP服務器如何創建、綁定和接收新的連接。

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);
}

要注意當接收一個新的socket時,這個簡易應用程序不會啟動一個新的線程或進程來對請求進行處理,而是在同一進程中處理請求。任何優于演示品質的HTTP服務器都會在一個新的線程中處理到來的請求,允許同時發生多個連接并能進行處理。請求處理完畢后我們關閉socket并等待下一個到來的連接。

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

為SDCC編譯器編寫DS80C400匯編函數的注意事項

雖然SDCC提供了豐富的庫函數集合,但是有時我們會想用匯編語言編寫優化的模塊,或將現有的8051匯編模塊移植到我們的應用程序中。若8051匯編語言函數由SDCC編譯器編寫的C程序來調用時,在編寫這些匯編函數時需切記以下要點:

  1. 函數參變量傳遞約定:下表說明了重入函數的變量傳遞方式

    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

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

  2. 數據類型存儲規則:

    SDCC遵循低字節在前(Little Endian)的存儲規則。換句話說,SDCC使用最低有效字節在前的二進制數據存儲格式。
    例如,一個32位長的數值0xDEADBEEF將會按如下方式存儲:

  3. 地址指針大小

    SDCC使用四個字節來保存存儲器地址。下表給出了存儲器地址的格式:

    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

    近距離地址指針使用間接尋址、內部RAM存儲器(idata)來進行存儲,并且其地址大小只有一個字節。原地址的高16位不用。

    遠距離地址指針用于訪問外部存儲器,為24位。

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

局限性以及開發問題

以下是我們使用4.0版本的SDCC編譯器時發現的局限性:

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

由于SDCC一直處于飛速發展之中,如果在你的SDCC工具現有版本中發現任何的缺陷或者你的版本比當前發布的版本早很久時,請下載最新版本。### 結論

Dallas Semiconductor為SDCC編譯器提供的DS80C400 ROM庫為嵌入式網絡應用設計者們尋找低成本網絡微控制器解決方案提供了更多的選擇。和TINI Java運行環境相比,使用C語言的DS80C400開發者將能夠編寫精巧的應用程序,賦予系統足夠的速度、能力和代碼空間來解決任何問題。Dallas Semiconductor正致力于將所有目前工作于Keil編譯器的DS80C400庫移植到SDCC。請經常訪問DS80C400 SDCC庫主頁來獲得升級。

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 存儲器
    +關注

    關注

    38

    文章

    7517

    瀏覽量

    164065
  • ROM
    ROM
    +關注

    關注

    4

    文章

    575

    瀏覽量

    85857
  • 編譯器
    +關注

    關注

    1

    文章

    1637

    瀏覽量

    49191
收藏 人收藏

    評論

    相關推薦

    用IAR編譯器開發DS80C400

    本應用筆記闡述了如何開始使用8051 IAR Embedded Workbench?來創建DS80C400C語言應用程序。通過一個簡單的HTTP服務演示如何使用DS80C400的R
    發表于 12-07 09:35 ?3103次閱讀
    用IAR<b class='flag-5'>編譯器</b>開發<b class='flag-5'>DS80C400</b>

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

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

    如何在音視頻范例網絡多媒體系統中應用DS80C400網絡型微控制

    本文對如何在音視頻范例網絡多媒體系統中應用DS80C400網絡型微控制進行分析與討論。
    發表于 06-02 06:24

    安裝編譯器SDCC的方法

    STC單片機+SDCC+Stcgal(MAC環境)1. 安裝編譯器SDCC:我們Mac上通常使用 brew 這個包管理工具,通過 brew 來安裝
    發表于 11-25 08:12

    DS80C400評估板中文資料pdf

    DS80C400評估板
    發表于 04-15 17:42 ?50次下載

    采用DS80C400創建網絡多媒體應用

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

    DS80C400嵌入式智能網橋中的應用

    文章提出了以DS80C400 為核心處理將多路CAN 網絡與多路以太網互連的嵌入式智能網橋實現方案。給出了 DS80C400 MII 與外部物理設備之間的連接,詳細闡述JAVAKIT
    發表于 06-03 08:51 ?7次下載

    使用免費的SDCC C編譯器開發DS89C430/450系列

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

    基于DS80C400微控制實現音視頻范例網絡多媒體系統的設計

    新型DS80C400是具有高性能結構和多層網絡節點和I/O口及穩定的ROM固件的網絡微控制,它廣泛應用于工業控制/自動化、數據轉換、遠距離數據采集設備、環境監測、家庭/辦公室自動化、交易/支付
    的頭像 發表于 06-23 15:38 ?2536次閱讀
    基于<b class='flag-5'>DS80C400</b>微控制<b class='flag-5'>器</b>實現音視頻范例網絡多媒體系統的設計

    SDCC編譯器和FreeRTOSC8051F上的開發的應用

    SDCC編譯器和FreeRTOSC8051F上的開發的應用(通訊電源技術2020年15期)-SDCC
    發表于 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上的開發的應用

    SDCC編譯器和FreeRTOSC8051F上的開發應用

    SDCC編譯器和FreeRTOSC8051F上的開發應用(肇慶理士電源技術有限公司怎么樣)-引言MCS-51系列單片機應用廣泛,我國學習
    發表于 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上的開發應用

    SDCC編譯器和FreeRTOSC8051F上的開發應用

    SDCC編譯器和FreeRTOSC8051F上的開發應用(核達中遠通電源技術有限公司招聘信息)-SDCC
    發表于 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上的開發應用

    利用DS16C32/DS80C390加速80/400位數學運算

    Maxim DS80C390/DS80C400高速微控制為最終用戶提供專用的硬件16/32位數學加速。訪問數學加速是通過使用五個專用的
    的頭像 發表于 02-21 10:36 ?1239次閱讀
    利用<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>位數學運算

    采用DS80C400芯片軟件的互聯網揚聲

    DS80C400 是支持互聯網的揚聲的完美選擇。DS80C400的ROM使應用能夠以傳輸原始音頻數據的速度通過網絡進行通信。通過增加一個16位DAC、一些電阻和少量的焊接工作,DS80C40
    的頭像 發表于 06-13 15:41 ?624次閱讀
    采用<b class='flag-5'>DS80C400</b>芯片軟件的互聯網揚聲<b class='flag-5'>器</b>

    SDCC-Linux下的51 MCU編譯器

    SDCC (小型設備C編譯器)是為8位微控制開發的免費C編譯器。盡管兼容多種不同體系結構,但
    的頭像 發表于 06-16 15:19 ?5320次閱讀
    主站蜘蛛池模板: 俺去啦最新官网| 天天爽夜夜爽人人爽免费| 欧美人与动性行为网站免费| 日本久操| 男女爱爱爽爽福利免费视频| 来吧成人综合网| 福利片免费一区二区三区| 97视频免费上传播放| 手机在线观看国产精选免费| 女bbbbxxxx毛片视频丶| 操片免费| 欧美色亚洲图| 亚洲色图视频在线| 色多多在线观看视频| 久久青草国产免费观看| 成人久久久| 色图插插插| 日本69sex护士wwxx| 热久在线| 四虎影院观看| 美女黄色在线| 91欧美精品激情在线观看| 日韩一级视频| 91在线视频观看| 尤物啪啪| 女人张开腿 让男人桶个爽 免费观看| 国产三级观看| 色天天综合色天天看| 免费高清在线视频色yeye| 免费在线亚洲| 色五月激情小说| 国产美女免费观看| 天天操综| 国产高清小视频| 色综合视频一区二区三区| 亚洲阿v天堂2018在线观看| 欧美日韩一区二区三区视频在线观看 | 国产日本三级| 天天干天天草| 22sihu国产精品视频影视资讯| 一级做a爰片久久毛片看看|