顯示具有 WSN 標籤的文章。 顯示所有文章
顯示具有 WSN 標籤的文章。 顯示所有文章

2008年7月27日 星期日

用 traits classes 以表現型別的資訊

Traits classes 是一種在 STL 中廣泛應用的型別辨視技術,考慮以下情境,我們有四種自定型別 ClassA, ClassB, ClassC, ClassD,以及一個 function template F 如下:
template<typename ClassT>
void F( ClassT myType)
{
if ( myType is ClassA)
{
// operating for ClassA
}
else
{
// operaing for ClassB, C, D
}
}


雖然 F 可以對這四種型別做運算,但有時候可能因為此四種型別的實作方式不一,某些型別對於 F 運算,可以有更有效率的作法 (或是不同的作法),例如 STL 中,對於某種 iterator 的運算,會因為 iterator 的不同類型 (STL 有五種 iterators:input, output, forward, bidirectional, random access) 而有不一樣的方法,所以我們希望能在 template 中辨視型別。

首先我們建立一些 tag struct 用以表示型別的特徵:
struct classA_tag {} ;

struct classBCD_tag {} ;


然後在目的型別中,利用 typedef 定義一個子型別
class ClassA
{
public:
typedef classA_tag category ;
};


class ClassB
{
public:
typedef classBCD_tag category ;
};


class ClassC
{
public:
typedef classBCD_tag category ;
};


class ClassD
{
public:
typedef classBCD_tag category ;
};


接著,建立 traits class template:
template<typename ClassT>
struct MyTraits
{
typedef typename ClassT::category category;
};


此時我們的 function template F 大概變成這樣:
template<typename ClassT>
void F( ClassT myType)
{

if ( typeid (typename myTraits<ClassT>::category ) == typeid (classA_tag ) )
{
// operating for ClassA
}
else
{
// operaing for ClassB, C, D
}
}


但是這樣的程式碼在編譯時可能會有問題 (因為 operating for ClassA 當中的所有敘述,必需被 ClassT 型別所支援,既使這些敘述不會被執行到),但此時有件更重要的事要解決,ClassT 也就是 myType 的型別在編譯時期就可以決定,而myTraits<ClassT>::category 也是在編譯時期就可以決定,但 if else 卻是執行期才會執行的語句,因此我們必須將 if else 提到編譯時期確定,做法即是使用 function overloading。我們 overload 兩個 function template F如下:
template<typename ClassT>
void doF( ClassT myType, classA_tag)
{
// operaing for ClassA
}


template<typename ClassT>
void doF( ClassT myType, classBCD_tag)
{
// operaing for ClassB, C, D
}


最後,我們就可以將 F 改寫如下:
template<typename ClassT>
void F( ClassT myType)
{
doF ( myType , typename MyTraits<ClassT>::category( ) );
}


完工。

2008年1月26日 星期六

Moteiv Boomerang Bug Fixes

新版的 msp430-gcc 搭配 nesc 工作時會有個小問題,就是在編譯某些 code 時,會產生 segmentation fault 如下:
/opt/moteiv/tinyos-1.x/tos/platform/msp430/HPLUSARTFeedback.nc: In
function `VirtualizeAlarmC$0$signalAlarms':
/opt/moteiv/tinyos-1.x/tos/platform/msp430/HPLUSARTFeedback.nc:46:
internal error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
make: *** [exe0] Error 1

好在官方已經修正了這個 bug,而且還釋出了一個 script,把它抓下來然後取代 /opt/tinyos-1.x/tools/src/mspgcc/build-mspgcc,直接執行就會幫你修正, 在 install patch 的過程會自動從網站下載修正檔,請保持網路通暢,在等候一段時間完成後,再去編譯程式就不會發生錯誤了。如果是使用 Vista 或 Linux 的話,要記得用管理者來執行這個 script。

參考網址

2007年9月24日 星期一

Octopus !?

本來想逛逛 TinyOS 首頁看有沒有什麼新東西,於是就在首頁上看到一篇以 Octopus 為題的 news,瞬間嚇了一跳,還以為實驗室的成果被 Berkeley 看上了,仔細看後發現是撞名了,對方的 Octopus 是個可以監控 mote 的軟體,跟我們大不相干,那麼,我們可以檢舉他們嗎?還是我們會被檢舉呢?哈哈!

2007年8月25日 星期六

快速安裝開發micaz,tmote還有客製 mote 的 tinyos 1.x

因為我們實驗室有自行開發的 mote,要用同一套 tinyos 來開發這些 mote,常常會有設定不好的情形出現,底下簡單記錄一下快速安裝步驟,可以用來開發 micaX 系列的 mote 還有 tmote-sky,連自行開發的硬體也只要簡單加入組態檔就能輕易使用.

1. 先下載 t-mote 的開發工具組 (boomerang),解開並安裝 :台灣官方網站,載點

2. 安裝好後你應該已經有了cygwin的環境以及msp430的開發工具.然後到 tinyos 的官方網站下載下列套件:下載頁面

  • Atmel AVR Tools










然後將這些檔案複製到 cygwin 的目錄裡,開 shell 進去安裝.

$rpm -ivh --force xxx.rpm

3. 再來可以選擇性地更新其它套件,例如 msp430 tools,nesc 或是 tinyos-tools.到此為止,你的環境已經可以開發micaX的 mote了.

4. 接著就是要加入敝實驗室的 mote 組態,使 tinyos 可以編譯出我們要的 image.
首先下載 octopusX.zip,解開來會有兩個目錄:octopus,octopus2 及兩個檔案:octopus.target 及 octopus2.target

把

octopus 目錄放到 /opt/tinyos-1.x/tos/platform/

octopus.target 放到 /opt/tinyos-1.x/tools/make/

octopus2 目錄放到 /opt/moteiv/tos/platform/

octopus2.target 放到 /opt/moteiv/tools/make/

5. 完工,這麼一來,你應該可以在 tinyos 的 apps 目錄裡編譯 octopus;在 moteiv 的 apps 目錄裡編譯 octopus2 了

2007年8月14日 星期二

新生訓練投影片:WSN TestBed

投影片在此。

作了四十幾張,扣掉一些不重要的頁面也還有二三十張,可是卻跟Zigbee的十幾張花一樣的時間講完 @@

2007年7月29日 星期日

新生訓練投影片:Zigbee and Z-Stack

上週給實驗室碩一(零)新生上的zigbee簡單介紹,內容大約半小時,簡單地講了什麼是Zigbee還有Z-Stack,及以實驗室的一套Zigbee開發套件。

投影片

2007年7月28日 星期六

WSN TestBed 架構圖

wsn.jpg

其實這個 TestBed 是 saturn 學長 的畢業論文,前兩天他把架構圖給畫好了,看了一下覺得功能寫得太完美了吧,接下來是我要完成耶@@,例如資料庫的部分,目前應該是還沒用到(還是已經偷偷弄好了?),不過系統上的功能已經差不多都可以上線了,最重要的是,學長都把最難搞的網路線及電線佈好了,未來我應該只要改良,以及加入一些人文上的機制,應該就差不多了吧?