Social Icons

twitterfacebookgoogle plusrss feedemail
顯示具有 2.1 C語言 標籤的文章。 顯示所有文章
顯示具有 2.1 C語言 標籤的文章。 顯示所有文章

11/15/2013

[verilog][c] CRC 循環冗餘校驗 實踐

沒有留言:
最近幾位學弟妹在問verilog的作業(QAM 16、QAM256以及CRC),順便也學習寫了一下

CRC的概述我這邊就不說明了,請參考WiKi 或者是這篇文章,在這邊只介紹程式碼。
(不過稍微注意一下維基百科裡面原理是對的,但下面舉的例子有點問題)


CRC 16 的 Verilog 程式碼(P(x) = x16+ x12+ x5+ x0)

module CRC_Unit(BITVAL, BITSTRB, CLEAR, CRC);
   input        BITVAL;                            // Next input bit
   input        BITSTRB;                           // Current bit valid (Clock)
   input        CLEAR;                             // Init CRC value
   output [15:0] CRC;                               // Current output CRC value

   reg    [15:0] CRC;                               // We need output registers
   wire         inv;
   
   assign inv = BITVAL ^ CRC[15];                   // XOR required?
   
   always @(posedge BITSTRB or posedge CLEAR) begin
      if (CLEAR) begin
         CRC = 0;                                  // Init before calculation
         end
      else begin
         CRC[15] = CRC[14];
         CRC[14] = CRC[13];
         CRC[13] = CRC[12];
         CRC[12] = CRC[11] ^ inv;
         CRC[11] = CRC[10];
         CRC[10] = CRC[9];
         CRC[9] = CRC[8];
         CRC[8] = CRC[7];
         CRC[7] = CRC[6];
         CRC[6] = CRC[5];
         CRC[5] = CRC[4] ^ inv;
         CRC[4] = CRC[3];
         CRC[3] = CRC[2];
         CRC[2] = CRC[1];
         CRC[1] = CRC[0];
         CRC[0] = inv;
         end
      end
   
endmodule


6/02/2013

[OpenCV] 人臉偵測 (Face Detection)

沒有留言:
點圖可放大

Paul Viola等人利用了三個演算法,來快速找到人臉。第一個是Integral Image,第二個是 AdaBoost,第三個是Cascade classifier。
Cascade Detection

詳細步驟可以參考"Robust Real-Time Face Detection" 這篇paper,或者可以看下面我整理的幾份文章
1.robust-real-time-face-detection 介紹
載點
2.robust-real-time-face-detection 投影片
載點

[OpenCV]在DEVC++中安裝openCV

沒有留言:



(1)下載 OpenCV
   原版:
   載點1   載點2 
   程式碼修正版 
   載點1 
(2)
如果您是下載原版 安裝OpenCV2.0在C:\OpenCV2.0
如果您是下載修正版 解壓縮在C:\OpenCV2.0
(3)在DEV 工具/編譯器選項/編譯器/編譯器設定組態
新增編譯器設定(綠色加號按鈕)並命名為"OpenCV2.0″



5/30/2013

C語言製作音樂 -小蜜蜂

沒有留言:

其實寫程式並沒有那麼的無趣~
大家可以用C語言寫些歌曲出來XD

以下程式碼如果不能執行,應該是編碼問題~ 可以直接下載.C檔
載點一
載點二

5/21/2013

檔案傳送與效能分析(4)-程式下載

沒有留言:
雖然還沒開始看程式碼,但這邊我還是要先稍微說明一下我程式上的幾個問題點。
(寫在後面就沒人想看了(=...=)

1.由於在寫這份作業時得到重感冒...程式碼的部分寫得非常不好...,這邊很抱歉之後有空我會再改改。
2.不該使用nonblock因為會使效能變差
3.應該要設定SO_SENDTO,在這邊要注意一下select並不能完全的取代掉SO_SENDTO!問題點在於write的buffsize大小會出問題(傳送者大,接收者小時,有機會發生問題)
4.盡量少使用fwrite,盡量使用system calls 也就是write。
5.改使用UDP在傳送時,記得每個封包前面要加上Sequence number,以及最後要判斷data是否遭到串改(類似checksum)。
6.在嵌入式系統的設備上盡量使用udp,因為嵌入式系統的晶片如果用來處理tcp的話,在某些方面來說處理可能太過於複雜。
....等

檔案傳送與效能分析(2)-基本的檔案傳送

沒有留言:
因為有太多人不知道怎麼寫檔案傳送..(汗)
在這邊弄一個簡單的範例給各位,不過請別忘了將以下程式修改達到以下目的
------------------------------------------------

1. 將作業一改成用 select, 不需使用http, 只需傳一個大檔, 譬如 1G 的 zip 檔
2. 設計 client, 不需顯示UI, 只需存檔, 只需用 zip 驗證正確性
3. 請不要用 sendfile 來處理, 這是練習
4. 當1個client 連線, 仍夠正確傳完, 分析您的處理過程
5. 當1個client 連線,  但是您的網路頻寬有限, 仍夠正確傳完.
6. 當多個(2個以上)client 連線, 仍夠正確傳完
7. 當接收端 (client), 程式異常終止, 製造SIGPIPE, 參考 man 7 siganl, 與範例
8. 處理 SIGPIPE
9. Server 與  Client 網路速度不匹配, 或bandwidth 不夠, 發生 send 這 system call, block 現象
10. 同時使用 Wireshark 分析TCP 現象
11. 不穩定網路續傳, 這需處理續傳問題, 如同http partial get 的問題
12. 連續傳送過程中, 設計 recv 或 read 回傳值 與期望大小不同的現象
13. 使用pthread 處理多工傳送
14. man 7 socket , SO_SNDTIMEO, 處理  send blocking 問題
15. 不要太相信 SO_LINGER 是好方法

16. pthread如果傳入參數時,會有什麼bug!
17. thread 中的結果如何用一般 stdout/stdin 或透過 unix domain socket  取代 (請參考http/cgi 程式), 這是下份作業


------------------------------------------------
以下附上"簡單"的檔案傳送接收範例,這只是參考的範例架構並不是本次實驗的目的...!!如果你拿這份來交作業...那我真不知道要說什麼了...
請不要直接複製下面程式碼,因為裡面會包含亂碼唷~ 請盡量自己打

common.h
#include <stdio.h>  
#include <stdlib.h>  
#include <unistd.h>  
#include <string.h>  
#include <sys/types.h>  
#include <sys/stat.h>  
#include <sys/socket.h>  
#include <netinet/in.h>  
  
#define PORT 6000  
#define LISTENQ 20  
#define BUFFSIZE 4096  
#define FILE_NAME_MAX_SIZE 512 

5/14/2013

檔案傳送與效能分析(1)-實驗過程與結果

沒有留言:



建議切換全螢幕高畫質欣賞~!

本程式在實際網路可以正常執行,為了錄影方便所以才在同一台機器上做測試

看影片可能覺得很簡單...,平常的檔案傳輸都是在穩定的網路下做傳輸,而本程式在不穩定的網路下可以做到大檔傳送、斷線續傳、多工、timeout、pipe、reconnect...等功能...,雖然只是單純的傳送檔案...但寫起來要考慮的東西還真不少....。
影片內容忘記錄多工的部分.... ( 0 . 0)

實驗結果如下,之後有空再對步驟以及程式碼做解釋
(以下圖片點及都可以放大)
62byteTXT文字檔
49.9kb小圖檔(jpg)
1.1Mb大圖檔(jpg)
1014.5Mb壓縮檔(zip)

實驗測試網路環境:
1.都在同一台機器中
2.兩台有線網路
3.一台有線網路 一台無線網路 (此為影片拍測的環境)
4.兩台無線網路



傳輸時百分比進度


傳送文字檔封包分析


C語言 如何知道檔案大小

沒有留言:

1.利用fseek(或lseek)
FILE* f = fopen(fileName, "r+");
fseek(f, 0, SEEK_END);
size = ftell(f);
fseek(f, 0, SEEK_SET);


2.用stat函式
struct stat st;
stat(fileName, &st);
size = st.st_size;


其中stat結構如下

struct stat {
    dev_t     st_dev;     /* ID of device containing file */
    ino_t     st_ino;     /* inode number */
    mode_t    st_mode;    /* protection */
    nlink_t   st_nlink;   /* number of hard links */
    uid_t     st_uid;     /* user ID of owner */
    gid_t     st_gid;     /* group ID of owner */
    dev_t     st_rdev;    /* device ID (if special file) */
    off_t     st_size;    /* total size, in bytes */
    blksize_t st_blksize; /* blocksize for file system I/O */
    blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
    time_t    st_atime;   /* time of last access */
    time_t    st_mtime;   /* time of last modification */
    time_t    st_ctime;   /* time of last status change */
};

5/05/2013

解決 linux 沒有 itoa 問題解法

沒有留言:

因為在ANSI-C 與一些compiler中並沒有支援
所以在linux裡沒有itoa(int , char[] ,int) 這個函數
不過可用sprintf(str , "%d" ,i) 代替

itoa( 456 , str , 10)
sprintf(str, "%d" ,456)

4/14/2013

影像處理 -透明遮罩

沒有留言:
在前面幾篇文章中已經介紹了許多影像處理的方法,今天稍微介紹一下怎麼加一個透明遮罩在影像上面。

其實稍微想一下應該就可以知道~,只要在矩陣的某一個區塊,把那個區域的值加上一個數值,就可以得到這個效果。

影像處理 -圖片濾光

沒有留言:

影像主要由RGB所構成,如果要將一張彩色圖片過濾成只有單一顏色,只要將其它兩者設成0即可!

影像處理 -均值濾波器 (mean Filter)

沒有留言:

在影像上如果有一些圖片銳度如果太高(上圖),我們可以使用均值濾波器來做一些平滑的處理,讓某些圖片看起來比較自然一點(下圖)
點圖可放大
所謂的均值,也就是平均值的意思,意思就是先找一個點為中心,把3*3的範圍加總起來做平均寫入覆蓋原本的值。

影像處理 -中值濾波器 (Median Filter)

沒有留言:
點圖可放大
圖片上經常會看到有一點一點雜訊這種雜訊稱之為胡椒鹽雜訊(Salt and pepper noise),這種雜訊我們可以利用中值濾波器將它給濾除,讓圖片比較接近原始的狀態。
什麼是中值濾波器呢?
假設圖檔裡面有一組矩陣內容如下,我們以97為中心點找出3*3的範圍所有的數字,然後將這組數字依照大小經過排列得到0,2,3,3,4,6,10,15,97,接下然我們選擇中間那個數字4 取代原本的97做輸出,這樣的做法則稱為中值濾波器。


3/31/2013

抓取網路ARP封包

沒有留言:
點圖可放大
前面幾篇文章談到過Sock_RAW用法ARP介紹以及攻擊防禦方法,在這邊我們要先學習如何抓取封包資訊,這樣我們才能夠去更改封包欄位資訊~!
以下系列文章只用於學術學習,請不要拿來攻擊別人電腦

完整程式碼會在教完作業後發佈上來,這邊稍為介紹一下怎麼抓ARP封包
記得使用root權限執行!
一、步驟:
1.假設自己IP為192.168.1.131
2.假設arp請求發起方的IP為192.168.1.254
3.在自己電腦中開啟程式
4.觀察程式的輸出

3/30/2013

老鼠走迷宮-簡易版

沒有留言:
由於前幾個老鼠走迷宮版本可能對有些人來說可能比較難,所以這邊提供幾個最基本的版本~
不要看到下面一大堆程式碼就嚇到了...我只是把它放在一起而已~~

在提供版本之前先來講解一下老鼠怎麼走迷宮
所有的遊戲地圖基本上都是由矩陣所構成,而矩陣中美一個元素可能代表著不同的意思,下圖試一個迷宮的矩陣,我們可以看到裡面有許多的數字:
其中4表示外牆、3表示內牆、1表示起點、2表示終點而0表示可以走的通道!

當然我們一般在玩遊戲時根本不知道原來地圖是長這樣的,因為這些數字對於玩家來說只會眼花撩亂而已,當電腦只要知道這些數字,再將這些數字利用不同的圖片或者符號印出時,就可以得到我們平常玩遊戲時的場景,比如說下面這張圖:

點圖可放大
這張圖片我只是將剛剛第一張圖片不能走的區域弄成黑色,在經由程式印出,這樣就可以畫出遊戲的迷宮了!!這樣大家有沒有比較有概念了?

老鼠走迷宮-easyx版本

沒有留言:

最近資料結構已經邁入第三個作業了,所以在這邊我也把之前做的東西跟一些參考資料給放上來~
本篇這個版本是使用easyx這套繪圖引擎來幫忙製作的,這套繪圖引擎我很推薦大家使用,主要是因為使用上簡單,而且很適合教學!
程式碼的部分感覺起來好像很長,但其實還好有問題在留言即可~我想程式碼應該很好理解!在這邊說明一下這個程式碼是論壇中某位大大寫的,我再稍微修改一下裡面的內容~

演算法與資料結構

沒有留言:
演算法與資料結構解說一覽


概論

演算法簡介 - Introduction of Algorithm
資料結構簡介 - Introduction of Data Structure - coming soon...
複雜度分析 - Complexity Analysis
非確定性多項式理論 - Non-deterministic Polynomial Theory - coming soon...
遞迴函式 - Recursive Function


資料結構

堆疊 - Stack
佇列 - Queue
連結串列 - Linked List
樹 - Tree
雜湊表 - Hash Table - coming soon...
這是網路上看到有人整理的文章
裡面解釋的還蠻仔細的 可以參考看看

3/28/2013

[資料結構] 資料搜尋

沒有留言:

字串搜尋
本程式只是一篇範例,用於搜尋文章中的關鍵字
並沒有使用到課本的失敗函數,如果想要加速搜尋請自行修改pmatch函數!
本程式是我教導別人一步一步慢慢寫出來的,可能會有許多問題(參數命名、...等)
但如果想學字串搜尋的人是個可以參考的程式!

當如果會這個程式之後,那麼我們就可以直接使用 strstr 來做字串搜尋!這樣會比較方便一點~ 不過一開始對於寫程式不熟的人來說,最好可以練習一下怎麼重頭自己寫!

1/02/2013

[C]解決Dev C++無法在Windows8 上正常執行

2 則留言:
有許多人在windows 8下裝了Dev C++,在寫程式編譯時會出現g++.exe已停止工作(如下)

這是怎麼回事呢?
我想是因為電腦心疼你不讓你寫作業  因為你電腦安裝的 Dev C++ 版本的  MinGW  與GCC版本太低了,必須要更新才可以!不知道怎麼更新的話可以直接下載這個版本比較新的Dev C++ 。

[C] AES加解密

沒有留言:
點圖可放大

下載: 點此下載
進入TestAESCipher\Debug\TestAESCipher.exe可直接執行檔案