<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ># 說明 使用zynq系列的FPGA或者使用其他的一些嵌入式的器件進行開發,我們會經常使用串口來調試,如果開發裸機的代碼,那么很多事會在中斷中去做,如果我們想查看某些數據,少量的可以在中斷中直接傳輸,但是會存在一部分數據很多,傳輸會影響到系統的穩定性,為此我門可以做一個軟件的FIFO,產生數據后直接壓入FIFO,然后在主循環中查詢FIFO,存在數據則可以以數據頭和數據為保住數據發送到上位機進行分析。 > # C語言實現簡單的FIFO 直接參考如下代碼: ```c #include <stdio.h> typedef float Dtype; //自定義qmini的數據類型 typedef struct _queue_{ char empty; char full; Dtype *buf; unsigned int rptr; //讀指針 unsigned int wptr; //寫指針 int depth; //fifo深度 int len; //現存的數據量 } QMINI; /******************************************** * Qinit * 初始化 mini 隊列 * 參數1:QMINI對象 * 參數2:數據緩存buf * 參數3:mini 隊列大小(fifo深度) * 返回值:操作成功返回 0 ,否則返回 正數 ********************************************/ int Qinit(QMINI *q,Dtype *buf, int bufSize){ if(buf == 0 || bufSize <= 0) return 1; q->buf = buf; q->empty = 1; q->full = 0 ; q->rptr = 0; q->wptr = 0; q->depth = bufSize; q->len = 0; return 0; } /******************************************** * Qpush * 數據入隊操作 * 參數1:QMINI對象 * 參數2:入隊數據 * 返回值:操作成功返回 0 ,否則返回 正數 ********************************************/ int Qpush(QMINI *q,Dtype data){ if(q == 0 && q->buf == 0) return 1;//未創建 mini 隊列 q->buf[q->wptr] = data ; q->wptr ++ ; if( q->wptr == q->depth ) q->wptr = 0; q->full = ( ++ q->len >= q->depth) ? 1 : 0; q->empty = 0; return 0; } /******************************************** * Qpop * 數據出隊操作 * 參數1:QMINI對象 * 返回值:出隊的數據 ********************************************/ Dtype Qpop(QMINI *q){ if( -- q->len <= 0) { q->empty = 1; } q->full = 0; Dtype rt = q->buf[q->rptr]; q->rptr = (q->rptr >= q->depth ) ? 0 : q->rptr + 1; return rt; } //--------------------------- Dtype a[10] ; QMINI mq; int main(){ int i ; if( Qinit(&mq,a,10) ){ printf("初始化失敗\r\n"); } for(i=0;i<=mq.depth;i++){ if( !mq.full ) Qpush(&mq,i*3.3); else printf("%d:隊列已滿\r\n",i); } printf("-----------------------\r\n"); for(i=0;i<=mq.depth;i++){ if( !mq.empty ) { Dtype data = Qpop(&mq); printf("%d:獲得數據為%f\r\n",i,data); } else printf("%d:隊列為空\r\n",i); } return 0; } ``` 運行結果 ``` ++++++++++++ 測 試 +++++++++++++++ 10:隊列已滿 ----------------------- 0:獲得數據為0.000000 1:獲得數據為3.300000 2:獲得數據為6.600000 3:獲得數據為9.900000 4:獲得數據為13.200000 5:獲得數據為16.500000 6:獲得數據為19.799999 7:獲得數據為23.100000 8:獲得數據為26.400000 9:獲得數據為29.700001 10:隊列為空 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看