最近翻起讀研期間在evernote中的一些瑣碎記錄,主要包括c語言,fpga和dsp開發的,那個時候還是初學者,犯了很多很弱的錯誤
c語言
1) 當乙個變數存放的值為位址值時,想要取出該位址上的值,需要將該變數轉化為指標變數。
也可以這麼寫uint32 pa=0xb000 0000,pa=(int*)pa 。
二級指標,如果pa = (int**)
0xb000 0000。pa存放位址
0xb000 0000,
*pa則取出
0xb000 0000上的值但是編譯器認為這個值是指向存放int值的位址。
錯例:int *pa; void fun(int **a) fun(&pa);
這裡形參a為指向指標pa的指標,這裡a已經被賦值。fun函式中將malloc的申請空間的指標返回給a,注意這時a的值為指向malloc申請空間的指標,但是這裡強制將其變為二級指標,意味著malloc的空間中存放的值,被認為是指向存放int資料空間的位址。
2)《的優先順序低於加減運算子,a<<1+3,相當於a<<4
3)c語言讀檔案,比如利用fscanf函式,讀資料的單位是乙個位元組,單位元組符號包括回車和空格等都會被逐個讀出。
4)static資料型別和全域性變數都被安排到靜態區儲存,但是static只能在單一原始檔用,全域性變數可以在其他原始檔extern。
5)在c語言中%f 對應float,而double對應%lf,切記,經常出現用%f對應double導致錯誤。
6)#ifdef __cplusplus
extern "c"
#endif
這個主要解決c與c++相容的問題,c++支援函式過載,乙個函式fun(int)在c++編譯後的名字為 _fun_int,而c編譯僅為_fun,因此重名(過載)函式在c中絕不容許,而c++可根據引數列表區分。
這段**意義為:如果是在c++環境下用c編譯**,當然,如果當前環境就為c,那不做操作。
fpga
盡量在上公升沿位址準備,下降沿寫入資料。
fpga fifo向dsp傳送資料存在如下疑問,
1)為何fifo中數出列,要向emif匯流排0x0110h上執行寫操作;可能是dsp讀脈衝間隔太短,導致無法及時出數,需要乙個寫操作形成兩個節拍;經過驗證,確實是這樣,而且只要執行乙個不相關的操作(也可以稱為是空操作),給fpga響應留下乙個節拍即可。[ft=rgb(255, 0, 0),,](這裡還需要對持續時間,並且需要對每條指令執行用時加強分析)
2)以寫操作為時鐘,fpga收到上公升沿觸發後即刻移動讀位址,那麼讀位址為1,為什麼首次讀取為位址0;
**如下:
always @(posedge(r_addr == 0x0110h))
ren<=1;
read_addr<=read_addr+1;
end當訪問emif匯流排 0x0110h 時,讀使能ren 被使能,此時read_addr 為0,這時emif匯流排已經滿足傳數操作,於是將0處的數傳送出去了。而且從fpga整個文件中來看,ren的值一直為1,也就是說,只要訪問匯流排,馬上就能傳送資料。
3)emif匯流排上雜資料出現是為什麼。
串列埠除錯,如下
fpga
=>max232晶元
==>ttl電平==>
max232晶元
==>
電腦(rs232)
rs232 為負邏輯,可雙向傳輸,全雙工通訊,最高傳輸速率20kbps,
max232電平轉換,ttl訊號並行傳輸方式,由於訊號不對稱,有效傳輸距離不過10英呎,一般232電平很高正負15v,而fpga的ttl電平才5v。
在這裡我們選擇rs232的傳輸速率為19200bps,選定每個位元組的傳送頻率為
1/80的19200,需要
fpga每隔
1/80的19200才接收乙個
byte;同時
傳送數的起始位為0,終止位為1,也就是發乙個位元組的數需要10位, 當fpga接收到乙個byte後在這個週期內需要10個脈衝分別傳送這10bit數,fpga傳送1bit的速率為1/8的19200。
關於fifo,讀空標誌和寫空標誌意義並不一樣,如果用雙口ram模擬fifo,就可以發現,由於用的是非阻塞賦值,每次讀數和能讀出來的數相差乙個節拍,也就是說當你進行第二次讀操作的時候,其實讀出來的是第乙個數的值。也就是說流程為:寫=>讀=>清零=>寫,假定每個操作都只有乙個dspclk,那麼當最後乙個寫操作的時候,最後乙個數要等到第乙個讀操作的時候才被放置到ram中,那麼進入流程的第一次讀操作這個時候匯流排上的值為多少呢,應該是0,因為資料線要等到下乙個讀操作才會有值,最後乙個讀操作要等到下乙個操作來的時候才將值放到資料匯流排上,也就是說此時我們沒來的及將最後的乙個數存放到dsp的緩衝區中,然後清零操作,當下一次寫操作的時候,才真正清零,寫的最後乙個數要等到下一次讀操作的時候才被放置在ram上,這時讀出來的數就是上一次讀的最後乙個數,它被保持在讀的資料匯流排上。
dsp1)乙個最基本的dsp工程包括cmd檔案,c原始檔,c執行時庫檔案rts6400.lib。
2)dsp與外設進行資料交換必須要事先配置鎖相環pll,進行時鐘倍頻。
3)資料匯流排用來傳遞資料,資料是各種資訊的數位化表示,emifa 64位的資料匯流排表示可以有8m的範圍來傳送資訊,這就是說只要將資料放到這個範圍內的任意位址上都可以傳送資料。
位址匯流排用來傳送位址,與資料匯流排不同,這裡的資料變成位址,專門用來傳送位址,20位位址匯流排表示有1m的範圍來傳送位址資訊。
雜記箱 有待整理
初始話之一 檢視通過org id進行資料遮蔽時,須在同乙個sql視窗進行賦值給client info responsibility id,作用 在資料庫的會話中設定全域性變數,和使用者概要資訊。引數獲得 引數一,使用者id select user id from fnd user where use...
Sql 整理備忘 雜記
1 排序 order order isread asc,createtime desc sort conf b order.isread asc 正序 sort conf b order.createtime desc 降序 order sort conf 不等於 等於null is null 不等...
Evernote語法高亮
參考博文 evernote本身不支援語法高亮,這讓經常做技術類積累的人著實苦惱。但是evernote貼上是會對源格式進行保留,複製源是已語法高亮的,複製過來可以保留格式。這也提供了一些其他途徑來做語法高亮標記。1 提供了多種語言支援,但是測試xml,發現轉換後將換行符去掉了。這真是囧了個囧啊。不過支...