2012年12月13日 星期四

Web application+php or Python

動機:
因為我以前是學嵌入式的,而除了一般的嵌入式外。
現在的嵌入式都是透過網頁來加以控制(像是家中的router),所以這一學期特別去
加選一門網頁加設的課程。
image
這是我家中的wireless router的控制畫面.可以看到它所用到的相關資料.


其環境架設;將採用Appser(整合apache+php+mysql)也希望把python也加上.(想去學python)
先說明其Appser的架設及設定
1. 首先請先去下載Appserv架站軟體,這是原始下載網站:http://www.appservnetwork.com/
2.接下來,只說明其相關的設定
image 
image
3.在browers,輸入http://localhost
image
4.設定SQL,(選用)
點選phpMyAdmin可以進入MySQL管理設定部份
 image
A.新增使用者
image
image
image
image
image
回權限頁,刪除不必要的
image
測試
image

接著進入電腦的AppServ資夾的WWW資料夾中(一般使用預設值的情況下,應該是C:\AppServ\www),你會發現已經有個預設的頁面─「index.php」,還有一個系統資訊─「phpinfo.php

最後:(在httped中改你的目錄)
image
網頁目錄及權限設定
DocumentRoot "D:/www"
 


索引頁檔名設定
設定說明:

  • 依次以index.html與index.xml為首頁檔名。
DirectoryIndex index.html index.xml
 

錯誤頁面設定
設定說明:

  • 在發生 403 Forbidden 與 404 Not Found 時,以 /error/*error.php 的內容取代錯誤訊息。
ErrorDocument 403 /error/403error.php
ErrorDocument 404 /error/404error.php



image

參考:

Apache 的下載、安裝、設定


http://elesson.tceb.edu.tw/~yunol/eec.thu_course01/day1.html



Appserv架站教學-完整安裝設定指南

http://blog.xuite.net/arcloveangel/lovestore/22930165

 


Apache 安裝設定教學


http://www.chweng.idv.tw/serverguide/apache.php

[Server] 在 Windows 上安裝 PHP 5.3 開發環境


http://www.jaceju.net/blog/archives/703/



Python Server Pages - 架構一個PSP環


http://blog.ring.idv.tw/comment.ser?i=259




ASP、JSP、PHP三種技術比較差異
grass.pixnet.net/blog/post/30215497-asp%E3%80%81jsp%E3%80%81php%E4%B8%89%E7%A8%AE%E6%8A%80%E8%A1%93%E6%AF%94%E8%BC%83%E5%B7%AE%E7%95%B0




2012年11月30日 星期五

衝突(conflict)

A。衝突的產生及解決。
image
上圖為,衝突(conflict)的範例。有一專案為二個人處理(Sally、Harry)。首先由專案經理在SVN server建立其Repository
接著由Harry及Sally複制一份(checkout)到本機上,而他們所處理的程序都不一樣故產生('A及''A)二份。
並且由Sally先做commit的到SVN server(ver 2),之後在Harry想要做上傳(commit)時會發生不是最新版本。
(Harry 改第1~3行,Sally 改3~4行 或者 二者改的地方是不同處等情況)。
image
Lock-Modify-Unlock,即文件只能一個人可以去存取方式來避免Confilct問題。
其缺點,在於它太過於不便。因為它只能有一個人可以去checkout故在其時間點上,
它人不可以取得檔案。而且若Harry忘了去unlock時,其它人也沒有方法來update。
所以這種方法在於其於專案管理(文件)時不適合的。
image
Copy-Modify-Merge,其程序如下所示(其Harry 及Sally修改地方不一樣)才比較適合用。
而當其內容相同時,則需另外處理。
 
image

B。版本控管]TortoiseSVN 使用,還原特定版本的異動
將資料還原到某一版本修改之前。
image
image
 image
image

image
image
image
image
image
image

只要是和別人做事,一定會起衝突(conflict)。而問題不只是避免衝突,而更重要的是要處理衝突。
SVN 衝突(conflict)的介紹與解決
http://www.cc.ntut.edu.tw/~wkchen/game/SVN%20documents/SVNConflictOverview.pdf

TortoiseSVN使用簡介

http://www.dev.idv.tw/mediawiki/index.php/TortoiseSVN%E4%BD%BF%E7%94%A8%E7%B0%A1%E4%BB%8B

版本控管]TortoiseSVN 使用,還原特定版本的異動

http://demo.tc/Post/712

TortoiseSVN 更新時發生衝突如何解決(上)

http://demo.tc/Post/708

USB系統架構

1.USB host :在任何USB系統中,只能有一個USB主機(USB host or Root Hub)。由PC系統控制USB host及周邊裝置的溝通。

2.USB 周邊裝置:

a.網路集線器: 提供更多USB裝置的連接點。

b.USB功能裝置

  • USB通訊協定的使用。
  • 對標準的USB的操作提供反應。
  • 提供裝置性能的描述性資訊。

USB架構

定義在一台主機和若干個附屬的USB裝置之的通信方式。

 

image fig 1.從使用者看

通訊分層:

image

其中,

a. USB physical device:實際硬体。

b.Client Software:針對特定的USB裝置而在主機上運行的軟體。

c. USB System Software: 驅動程式

d. Usb Host controller:匯流排在主機上的介面,同時代表軟体和硬体的介面。透過它可以和USB裝置進行溝通。

   提共主機和裝置的物理連接、發送連接、資料封包連接。

 

USB匯流排拓撲的組成。

  • 主機和裝置;USB系統的基礎組成部份
  • 物理拓撲結構;描述USB系統中的各組成部分是如何連接的.
  • 邏輯拓撲結構;描述USB系統中各組成部分的地位和作用,以及從主機和裝置的角度觀察到的USB系統。
  • 客戶軟體層和應用層的關係;描述從客戶軟体層所看到的應用層的情況,以及從應用層看到的客戶軟体層的情況

 

主機拓撲結構;

其中USB host為負責協調的關鍵及控制USB匯流排使用及監督。

image

 

USB device拓撲結構;描述USB系統中的各組成部分是如何連接的.

為了輔助主機辨認及確定USB device,裝置要提供用於辨識的資料,但其資料格式並不固定。

而是由其device class來決定。

image

USB匯流排的物理拓撲結構;

為樹狀連接,其中Hub也視為USB device,它是由一組USB的連接點所組成。

在連接樹的根部為USB host及一個Root Hub。"但禁止環狀連接"

在USB的架構中,提供具体功能的裝置稱為應用裝置。如果許多不同功能的裝置合在一起,也是一個複合裝置。(經由內部hub連接)。

image

 

USB邏輯拓撲結構

image

在物理結構上,周邊是透過Hub連接到Usb host上。在在程式邏輯上,Usb host可以視為直接與邏輯Usb device通訊。

 

客戶軟體層和應用層的關係

在USB 物理及邏輯上,其USB匯流排是被所有周邊裝置所共用的。但是對操縱USB應用裝置的客戶軟体來說,只需

關心周邊裝置上與它相關的介面,而不需顧慮其它的USB裝置。

 

image

-------------------------------------------

USB 2.0 系統架構及通訊協定

USB系統

  • USB 網路
  • USB 裝置
  • USB 主機

當device連接網路時,該裝置就會有一個唯一個usb address,usb主機就可以此(usb address)來操作device。每個usb device可透過一個或多個通道來與usb host通訊,並all usb device 都會在零埠中有一個控制通道。(註冊,device information)

 

零埠中的描述資訊,可分:

  • 標準;USB共同定義(廠商識別、裝置種類及電源)
  • 類別;提供不同device class define.
  • USB廠商;特定。

Hub;

  1. 將不同性質的usb device連接.
  2. 上遊連接主機,下遊連接device or hub
  3. 可偵測下遊的device step , remote並分配power.
  4. 內分為集線控制器(controller)及集線放大器(repeater)

 

USB匯流排硬体介面

電氣物性

Vbus,D+,D- and GND

傳輸率;

480Mb/s

12Mb/s

1.5Mb/s

編碼方式;NRZI(no return zero inverter)

 

USB 2.0規範概論

  1. USB 1.1 和USB 2.0相容.
  2. USB 1.1 device 在USB 2.0 system時,會工作在12Mb/s.
  3. 特性;
    1. 高速
    2. 連接簡單.
    3. 無須電源
    4. 有不同頻宽及距離
    5. 支援多裝置
    6. 提供電話語音及資訊傳輸(非同步及等時資料傳輸)
    7. 高傳真音效

 

USB 2.0資料通訊流

host and device間的service都是透過資料流來達成。而USB 匯流排使用提升效率,可允許不同資料流(速度及傳輸方式)"彼此獨立"進出同一個USB device。

1. 裝置端點(device endpoint)

device--> address-->endpoint

為host與device間通訊流的終點。USB device則是由一組彼此獨立端點所構成。

屬性;

  • 匯流排頻率
  • 匯流排延遲
  • 端點顏寛
  • 端點序號
  • 除錯
  • 最大長度
  • 資料類型
  • 方向

device init process:

connect USB bus,recive a bus reset signal,設定端點0作為裝置輸人和輸出端點。主機去檢查endpoint 0的設定。

 

2.USB通道(channel)

此為device的endpoint和host application間的溝通管道,其格式

  • Stream 資料流;應用程式自定,不會被翻譯
  • Message 訊息;必需符合USB bus定義,但也不會被翻譯。

其建立方式;

1.application 發出 I/O需求package(IRP)

2.其IRP有指定device, endpoint and data director

3.當device 反應其RIP則channel builder

 

3.傳輸類型;

  1. 控制;可靠、非週期,由host sendor ack 'start'。 usual send instruction and state
  2. 同步;週期、連續。常用於傳送與時間相關的資料。(會保留時間在資料中,但並不立即傳送)
  3. 插斷;低data、低速及固定延遲
  4. 批次;非週期、大量、可靠。

一。控制傳輸;

可傳送device setting、command、state and search。

    1. 建立連線;將資料需求從host -->device
    2. 傳送資料;按所建立連線方向傳送data
    3. 狀態回俴;device-->host

建立連線;host -->device point 發送Setup command package 。(資料可自定或USB定義)

其控制傳輸所用的[訊息通道]是雙向傳送的(具有輸入及輸出)。其中其所指定的最大長度是指其資料而非封包。(8~wMaxPacketSize)

 

傳送資料;

當建立連線後,其後送出資料時其結束點,

  • 已傳輸由Setup封包所指定的資料量
  • 收到一個data package,其長度為0或data length小於最大長度(最後一個package)

狀態回應;

傳送資料完後,host進入等待階段。若host不等待回應,而去送出資料,endpoint會認為被插斷。

或者host or device 收到一佪大於長度的回應則會去中斷controller channel。;若成功回傳,則成正式結束這次控制傳輸。

並由host決定下一個階段。

 

二、同步

特點;

  1. 固定延遲,對USB顏寛使用
  2. 傳送速度
  3. Error Tolerant(允許錯誤)

經由[同步channel]傳送。為單向的資料流通道。其傳送速度可以其最大長度來判斷是否可成立,若可以成可建立成功。

所以傳輸的資料長度,需等於或小於其設定長度,才可免於被匯流排截斷。也可由CRC來檢查是否有錯誤。

但不會因此來重傳(一般的傳輸模式可由handshking來檢查,改由IRP來回應)

 

三;插斷

只傳送或接收少量資料,不需常做動作,但是必須確定在固定時間內完成,故其需求

  • 保證通道的最長反應時間
  • 發生錯誤而重送時,需在下一週期時

也為單向的資料流通道,連接端點的描述資訊會指定通道的資料方向。並其送、發的最大長度。

故在建立插斷通道時,也會依其資料長度判斷是否可有足夠的頻寛。若可時才可有成功建立,與控制通道不同的是,

USB系統不會替插斷通道調整匯流排顏宽,故USB不一定能夠建立插斷通道。

 

由於端點所發送的資料封包,長度不可超過端點所設的wMaxPacketSize。若超過時,則需分割封包,並利用IRP來發送。

而接收端可設一個緩衝區來接收(資料及IRP)

其判斷完成方式;

  • 已傳送的資料量和期待資料量相同
  • 傳送長度為0或小於wMaxPacketSize封包

結束時,host會結束IRP並開始下一個IRP。但發生error時,需中止當前IRP並清除error後重新開始IRP。

因為裝置無法送出插斷要求,故由host發出"輸詢"。由其device回應(NAK or ...)來判斷是否需插斷傳輸。

 

四、批次

為了充分利用顏寛,其特性;

  • 可利用整個匯流排顏寛
  • 發生錯誤時,可重發
  • 保證資料傳輸,但不保證傳送的頻寛及延遲

"只有匯流排有足夠頻宽時,才會進行傳輸",若不足時 並不會動作。其資料的長度可由自己決定(8,16,32及64b 並不會動作。其資料的長度可由自己決定(8,16,32及64byte)。

在傳送端時,其先由USB host讀取最大的長度設定,確定其傳送資料長度不會超過。以及wMaxPacketSize大小,所以在超過時會分割來傳送(只有最後為0或小於)。

在完成後,usb host controller會中止目前的IRP後重新開始IRP,若在接收端收到超出預期長度時則所有在這端端的批次傳輸IRP都會被中止。

因為在系統中的批次傳輸會競爭可用頻寛。所以不能預期其頻宽速度。

匯流排頻率決定於一個週期內最多可進行批次傳輸的數量。usb host controller可自行決定其批次傳輸的週期時間。而其以toggle機制來確保送發的同步。

 

USB匯流排協定層;

其USB封包中,基本上由下列組成單元;(傳輸時為LSB,least significant bit開始)

在封包第一欄SYNC欄位,為產生最大的邊緣轉換密度(edge Transition Density)以及EOF(end of packet,3bit=011)

  1. PID(packet identifier)由其前二bit分為;
    1. 封包類型;標記、資料、交握及專用。
    2. 8bit(PID,檢查碼)組成。(檢查碼為PID的二進制反碼)
  2. ADDR;在輸入、建立及輸出時需其裝置的位址。
    1. 在USB device收到bus packet時會去檢查其device addr及endpoint,若有不同時即會括去。
    2. 而在未初始化端點的裝置也會捨去,而其位址0保留做為特殊用(在被定位的裝置端點,在收到位址0的封包時都必須回應)
    3. 共有7bit(127+1)
  3. ENDP,endpoint
    1. 提供端點欄位,共4bits 除端點0(,1 controller channel)外其它則依設計要求。最多為16個
    2. 低速裝置,則最多2個endpoint ,4 channel
  4. Frame Number,段落序號(在PID,SOF後)
    1. 為一個11bit(最大3FFH)
  5. data
    1. 長度0~1023bytes
  6. CRC ,以其PID決定長度(5~16)

 

由PID可分為標記、資料、交握及專用。

a.標記(token packet);由PID,ADDR and ENDP。用於輸入、輸出及建立上。其參考是由USB HOST看(輸入,由usb device to usb host)

image

b.SOF,start of Frame packet

主機每1.00ms發出SOF packet.

image

c.data packet

其又分為DATA0,DATA1.(高速,DATA2,MDATA)

image

其data length依速度而不同

低速;8 byte

全速;1023

高速;1024

d.交握

image

回報資料傳送狀態,也可用來回應及拒紀命令及要求停止動作。

可分為;

  • ACK;正確收到資料封包且PID也正確。
  • NAK;裝置無法從主機收資料,或裝置沒有傳輸資料到host
  • STALL;回應[輸入、輸出]標記封包,表示裝置無法進行傳、收資料。

-----------------------------------------------------------

並非所有場合中都有交握信號。

可以分為

  • USB device對輸入標記封包的回應
    收到錯標記 發送port 發送data 動作
    Y don't care don't care 不回應
    N reset don't care STALL
    N no reset N NAK
    N no reset Y data
  • USB host對輸入標記封包的回應
    收到錯標記 host 接收資料 動作
    Y N/A 不回應,捨
    N N 不回應,捨
    N Y ACK,收
  • USB device對輸出標記封包的回應
    收到錯標記 接收中斷 時序同步錯 USB可收 動作
    Y N/A N/A N/A none
    N Y N/A N/A STALL
    N N N N/A ACK
    N N Y Y ACK
    N N Y N NAK

接收中斷,USB的接收埠無法接收,回應STALL;時序 錯時回ACK並捨;USB可收,裝置忙錄?

 

  • USB device對建立(setup)標記封包的回應
    • 不能建立時回STALL或NAK。若可接收則須接收建立標記後的資料封包。如果沒經過建立標記的初始化,它必須忽略封包(資料)且不回應

-----------------------------------------------------------

封包交換的流程

A.批次傳輸

特點;錯誤檢測及重試方式。保證host and device間的資料不會傳送錯誤。

接收;

對USB device 發出標記,usb device endpoint會返回資料封包。如端點不能回資料時,就會回傳NAK ,STALL。

NAK,表Endpoint忙碌暫不回傳資料。

STALL,表示Endpoint被永久地停止,需進一步處理

若收到資料錯誤,則host 並不會回應給USB device。

 

發送;

對usb device endpoint發出"輸出標記",並一個data packet。若usb device endpoint正確接收,將返回

  • ACK,正確接收(usb device) ,host可傳下一筆
  • NAK,仍為正確接收(usb device),但因usb device忙碌。故資料捨去,host需重傳
  • STALL,usb device發生error。host 需排除error。
  • CRC16,資料錯誤並不會產生任何回應

 

 

image

image

B.控制傳輸

分為三階段;

建立連線,PID=Setup

傳送資料,?由輸入或輸出的過程構成和批次相同

回應,會以前一階段的資料流向回應,且只用DATA1 PID。

若控制端點在控制傳輸的資料和狀態階段中發送STALL,它必須對所有收的封包回對STALL,直到收到建立封包為止。

image

image

C.插斷

在收到由host發出的"輸入標記,token",裝置會回傳

  • DATA0/1,在收到後host發出的ack。device確主機收到資料,會將device的插斷事件清除。
  • NAK,沒有新的資料可回傳
  • STALL,usb device已停止狀態

"此模式(插斷輸入),可用來測量其傳輸速度"

 

image

D。同步

只有標記和資料二個時間。沒有交握

usb device or host可接收 DATA0/1的資料。

但在發送只會由DATA0

image

Builder C++專案組成

最近,找到的工作都是需要我去寫程式。

故重新拿起Builder C++來做為開發環境。

在撰寫程式前,我們應該去了解其開發環境中專案組織。

而在BCB(Bloand builder C++)中

1. 首先在[view]\[project manager]中

image

這裡我們可以為某一專案中,加入一個lib或res

2.在作業系統中,資料夾內容

image

其中特別注意的有

a. 1.project1.bpr:專案描述描(XML),給BCB看為其環境設定。

b.project1.cpp:專案的主檔,裡面是程式執行時的進入點。其內容

第5,6行中的USEFORM("Unit1.",Form1);

image

c.project1.res:專案使用的資源檔。

d.project1.tds:BCB compiler and linker過程中產生的偵錯檔。

e.Unit1.dfm: Form1表單的描述檔,一個表單上的VCL 物件設定,本檔主要作這些VCL及其設定。(在拿到別人程式時,常因沒有別人安裝元件,導致無法成功開啓時。可先復制其*.dfm再去複制其各Unit1.cpp)

f.Unit.cpp,Unit1.h

 

------------------------------------

如何複制別人專案

1.複制*.dfm(表單的元件及設定屬性)

  可必免自行拖拉設定.

2.對Unit1.h中設定

   image

表單(Form)為表單外觀的設定,每一表單對有對應一個Unit而在Unit.h中

__published:中由BCB負責維護(增加元件時),故我們要複制時需要對此宣告其加入的VCL元件。

加入其元件的宣告。

private:本類別所專屬的私有的變數及函式

public:如果希望變數及函式可以被其他的類別或程序呼叫時。外部的程式也可透過此區的變數或函式操作private區的變數。

3.Unit.cpp

image

也是由BCB來負責管理的,像是在表單中Button2 even,寫入程式時在Unit.h中Published中會出現其對應的函式宣告。

在表單中對每個even中,按下後填入其程式。

即可成功複裡它人專案的程式。