<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # 背景說明 在做開發的時候,涉及到了雙核cpu兩個之間的通信,根據自己項目的實際需求,可以簡單的認為`cpu0`是`cpu1`的上位機,也就是所`cpu0`只需要向`cpu1`發送少量的信息,而且操作頻率不高,`cpu1`可能會向`cpu0`發送很多數據,根據`zynq7021`的內部架構,決定使用`OCM`實現,如果一個`cpu`寫數據另一個`cpu`讀數據,同時操作可能會出錯,因此我將OCM劃出256個字節作為內存共享區,并設計了`FIFO`的緩沖。**在最初,使用結構體的方法來設計隊列,會因為內存對齊,導致很多空間會被浪費掉**,于是在實現命令發送的FIFO緩沖時,采用了循環隊列來實現,但這里由于要共享,因此實現時使用指針來操作,并且規避可使用結構體,通過自己劃分字節來組成想要的類型數據的存儲字節,項目中設計的命令占用了5個字節,組成結構如下: |1字節 | 2-5 字節| |--------|----------| |命令|int型數據| # 循環隊列 使用循環隊列可以節省本來就很拮據的OCM空間的使用,使得使用空間的效率更高。</br> ![](https://img.kancloud.cn/96/1d/961d05812a244e3e5bc46bd0cf38f420_733x422.png) **滿空判斷** * 隊滿:Q.front == (Q.rear + 1) % MAXSIZE * 隊空:Q.front == Q.rear c實現: ```c #include <stdio.h> #include <malloc.h> #define MAXSIZE 100 //最大隊列長度 #define OK 1 #define ERROR 0 typedef int ElemType; typedef int Status; typedef struct { ElemType *base; //隊列空間 int front; //隊頭指針 int rear; //隊尾指針,若隊尾不為空,則指向隊尾元素的下一個位置 }SqQueue; //初始化循環隊列 Status initQueue(SqQueue &Q) { Q.base = (ElemType *) malloc(MAXSIZE * sizeof(ElemType)); //申請空間 Q.front = Q.rear = 0; //隊空 return OK; } //入隊 Status enQueue(SqQueue &Q, ElemType e) { if ((Q.rear + 1) % MAXSIZE == Q.front) return ERROR; //隊滿,無法添加 Q.base[Q.rear] = e; //插入元素 Q.rear = (Q.rear + 1) % MAXSIZE; //隊尾指針+1 return OK; } //出隊 Status deQueue(SqQueue &Q, ElemType &e) { if (Q.front == Q.rear) return ERROR; //隊空,無法刪除 e = Q.base[Q.front]; Q.front = (Q.front + 1) % MAXSIZE; //隊頭指針+1 return OK; } //返回隊列長度 Status length(SqQueue &Q) { return (Q.rear - Q.front + MAXSIZE) % MAXSIZE; } ``` # 自定義數據,強制轉換為所需數據格式 在zynq平臺的sdk上,提供了io操作函數,可以直接操作內存中數據: * Xil_Out8 * Xil_Out16 * Xil_Out32 * Xil_In8 * Xil_In16 * Xil_In32 使用上述函數訪問內存,對其結果直接強制轉換就可以了!
                  <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>

                              哎呀哎呀视频在线观看