就在剛才,我的MBA突然變的很lag,
lag到整台機器無法運作,直接當在那邊,
只有滑鼠會動,其他鍵盤什麼的都卡住了。
強制開機之後,還是很lag,
後來發現是mdworker這支程式在做怪。
原來這個程式是spotlight在做index用的,
可是它吃掉了我9x%的cpu和1g多的記憶體,
導致系統無法運作,即使重新啟動電腦,他還是會痴痴地把index做完。
所以,這個時候就必須耐心的等候它10~20分鐘,讓他建立好hash index,
而且什麼事都不能做,因為他吃掉了所有的資源。
可是我以前從來沒遇到需要建立這麼久又花這麼多資源的情況,可能是電腦用久了,資料太多了吧。
參考來源:
http://osxdaily.com/2009/09/14/mdworker-what-is-mdworker/
2010年7月20日 星期二
2010年6月20日 星期日
變更VLC字幕顯示時間的方法
其實很久以前我就知道VLC可以調整字幕的顯示時間了,
這樣就不用擔心字幕檔的時間差了個幾秒,而導致影音和字幕不一致的窘境。
但是每一次要設定的時候,都找不到正確位置,
所以還是勤勞一點,自己記一下比較好,不然每次都忘記。
其實這篇文章主要是參考以下來源:
http://froggyleaps.blogspot.com/2009/06/vlc.html
主要的差別是原作者是在Windows底下操作,而我是在Mac OSX下設定,使用的vlc版本為1.0.3。
設定的過程如下:
首先點選VLC的『偏好設定』:

接著選擇顯示所有設定:

看到了所有的選項之後,找到『解多工器』,並點選『Subtitles』,接著就會看到Subtitles delay:

重頭戲來了,這裡我們只要修改delay的數值,字幕播放的時間點就會跟著改變。這裡的數值的單位為10之1秒,所以假設我想要讓字幕提前10秒播放,這裡的數值就要填-100。如果想晚3秒播放則填入30。
如上圖所示,我設定的數值為-185,就是要提早18.5播放。其實還滿簡單的,只是找不到設定檔位置的時候,就只能一個一個點開慢慢尋找。
此外,我設定完之後,都會重啟VLC,讓新的設定生效。
這樣就不用擔心字幕檔的時間差了個幾秒,而導致影音和字幕不一致的窘境。
但是每一次要設定的時候,都找不到正確位置,
所以還是勤勞一點,自己記一下比較好,不然每次都忘記。
其實這篇文章主要是參考以下來源:
http://froggyleaps.blogspot.com/2009/06/vlc.html
主要的差別是原作者是在Windows底下操作,而我是在Mac OSX下設定,使用的vlc版本為1.0.3。
設定的過程如下:
首先點選VLC的『偏好設定』:
接著選擇顯示所有設定:
看到了所有的選項之後,找到『解多工器』,並點選『Subtitles』,接著就會看到Subtitles delay:
重頭戲來了,這裡我們只要修改delay的數值,字幕播放的時間點就會跟著改變。這裡的數值的單位為10之1秒,所以假設我想要讓字幕提前10秒播放,這裡的數值就要填-100。如果想晚3秒播放則填入30。
如上圖所示,我設定的數值為-185,就是要提早18.5播放。其實還滿簡單的,只是找不到設定檔位置的時候,就只能一個一個點開慢慢尋找。
此外,我設定完之後,都會重啟VLC,讓新的設定生效。
標籤:
[作業系統]--Mac
2010年5月23日 星期日
Yeti 2 讓你用eclipse開發TinyOS2
本來是想找看看有沒有什麼其它工具可以用來Debug Nesc的,
結果讓我找到了Yeti 2這個eclipse上的外掛。
Yeti 2非常的強大,除了可以顯示Nesc的特殊字元,
還可以自動呈現出component之間的關係,
而且可以隨時查看各函式的內容,相當的方便。
官方網站如下:
http://tos-ide.ethz.ch/wiki/pmwiki.php
底下紀錄我自己安裝的過程和一些使用上的心得:
Yeti 2的安裝還滿簡單的,只需要按照官網的說明安裝,
請參考http://tos-ide.ethz.ch/wiki/pmwiki.php?n=Site.Installation
要注意的是eclipse的版本要3.5以上會比較穩一點,
所以,我在安裝Yeti 2之前有先行將eclipse更新到最新的版本。
因為官網有提到不確定在MAC OSX下可不可以正常執行,
所以我想有必要在作一份紀錄供MAC的使用者參考。
簡略的步驟如下:
Step 1 下載Yeti 2
首先開啟eclipse,點選"Help" > "Install new software" 。
如下圖所示:

接著新增一個來源位置: http://tos-ide.ethz.ch/update/site.xml,如下圖所示:

新增完之後,eclipse會自動取得套件列表,如下圖所示:

方框中的套件是我有安裝的,因為我是用snow leopard,所以我選擇的環境是TinyOS 2.x on Unix,
接著按下“next“,Yeti就會自動安裝了。
Step 2 設定環境參數
原則上,因為我是先安裝好TinyOS2.x的,所以,eclipse會自行找到TinyOS的環境變數如TOSDIR和TOSROOT,
個人的猜測是eclipse自行去讀bash的環境設定,
不過我發現CLASSPATH和PATH還是沒有設定完善,
所以還是要自行確認,請開啟“偏好設定“,
並且在"TinyOS" > "Environments" > "TinyOS 2.x Unix-environment" > "environment Variables"中,
自行新增環境變數。
如下圖所示:

如果環境變數都沒有什麼問題,現在就可以使用eclipse開啟TinyOS的專案了。
要檢查安裝有沒有成功,最簡單的方法就是新增一個example project。
可以參考官網的說明:
http://tos-ide.ethz.ch/wiki/pmwiki.php?n=Site.NewExampleProject
不過,我自己也不免俗的開了一個Base station專案來測試,
他會自動幫你新增相對應的原始碼和makefile,感覺就好像copy了一份apps/Basestation/給你。
個人覺得最貼心的地方是它會自動產生程式的component連結圖,
如下圖所示:

可以馬上看到現在各component連結的狀況。
如果要編譯,就按下run就可以了,感覺還算容易上手的。
以上就是目前的使用心得,有進一步有趣的東西,我會再補充。
結果讓我找到了Yeti 2這個eclipse上的外掛。
Yeti 2非常的強大,除了可以顯示Nesc的特殊字元,
還可以自動呈現出component之間的關係,
而且可以隨時查看各函式的內容,相當的方便。
官方網站如下:
http://tos-ide.ethz.ch/wiki/pmwiki.php
底下紀錄我自己安裝的過程和一些使用上的心得:
Yeti 2 安裝步驟
Yeti 2的安裝還滿簡單的,只需要按照官網的說明安裝,
請參考http://tos-ide.ethz.ch/wiki/pmwiki.php?n=Site.Installation
要注意的是eclipse的版本要3.5以上會比較穩一點,
所以,我在安裝Yeti 2之前有先行將eclipse更新到最新的版本。
因為官網有提到不確定在MAC OSX下可不可以正常執行,
所以我想有必要在作一份紀錄供MAC的使用者參考。
簡略的步驟如下:
Step 1 下載Yeti 2
首先開啟eclipse,點選"Help" > "Install new software" 。
如下圖所示:
接著新增一個來源位置: http://tos-ide.ethz.ch/update/site.xml,如下圖所示:
新增完之後,eclipse會自動取得套件列表,如下圖所示:
方框中的套件是我有安裝的,因為我是用snow leopard,所以我選擇的環境是TinyOS 2.x on Unix,
接著按下“next“,Yeti就會自動安裝了。
Step 2 設定環境參數
原則上,因為我是先安裝好TinyOS2.x的,所以,eclipse會自行找到TinyOS的環境變數如TOSDIR和TOSROOT,
個人的猜測是eclipse自行去讀bash的環境設定,
不過我發現CLASSPATH和PATH還是沒有設定完善,
所以還是要自行確認,請開啟“偏好設定“,
並且在"TinyOS" > "Environments" > "TinyOS 2.x Unix-environment" > "environment Variables"中,
自行新增環境變數。
如下圖所示:
如果環境變數都沒有什麼問題,現在就可以使用eclipse開啟TinyOS的專案了。
新增TinyOS範例專案
要檢查安裝有沒有成功,最簡單的方法就是新增一個example project。
可以參考官網的說明:
http://tos-ide.ethz.ch/wiki/pmwiki.php?n=Site.NewExampleProject
不過,我自己也不免俗的開了一個Base station專案來測試,
他會自動幫你新增相對應的原始碼和makefile,感覺就好像copy了一份apps/Basestation/給你。
個人覺得最貼心的地方是它會自動產生程式的component連結圖,
如下圖所示:
可以馬上看到現在各component連結的狀況。
如果要編譯,就按下run就可以了,感覺還算容易上手的。
以上就是目前的使用心得,有進一步有趣的東西,我會再補充。
2010年5月17日 星期一
Pages的垂直選取
前幾天聽說TextMate有垂直選取這項功能,
就覺得Textmate不虧是Mac上必備的編輯器之一。
聽說完這樣功能之後,我剛好正在用Pages寫我的報告,
想說Pages不知道會不會有這樣功能?
所以我就按著Option鍵,接著用滑鼠選取我要的內容,
果然,神奇的事情發生了,我成功地將垂直的內容選取出來了。
如下圖所示:

選起來之後,就能對所選的內容進行格式上的修改,
還挺方便,這樣就可以如圖中所示地將行號用不同的顏色標示,
不用再一個一個慢慢點選了,真是一個貼心的功能。
就覺得Textmate不虧是Mac上必備的編輯器之一。
聽說完這樣功能之後,我剛好正在用Pages寫我的報告,
想說Pages不知道會不會有這樣功能?
所以我就按著Option鍵,接著用滑鼠選取我要的內容,
果然,神奇的事情發生了,我成功地將垂直的內容選取出來了。
如下圖所示:
選起來之後,就能對所選的內容進行格式上的修改,
還挺方便,這樣就可以如圖中所示地將行號用不同的顏色標示,
不用再一個一個慢慢點選了,真是一個貼心的功能。
標籤:
[作業系統]--Mac
2010年5月9日 星期日
移除MacTex 2008
一陣子沒碰latex了,Mactex 2009都出了好一陣子了,我都沒有發現(偷懶中~~),
趁著這幾天比較有空,就下載了MacTex 2009下來安裝,
但是MacTex總是如此的肥大,灌完要2G多,
而且安裝程式也不會幫你把MacTex 2008移除,
所以,就必須要自行手動移除。
=== 請注意 ===
我自己是先移除才灌MacTex 2009的,如果你是先灌了新版的2009,
我不敢保証以下步驟會不會誤刪2009需要的檔案,有任何疑問,請自己參閱官網:
http://www.tug.org/mactex/uninstalling.html
移除的步驟如下:
Step 1 移除主要函式庫
請在終端機下輸入以下指令:
$ cd /usr/local/texlive
$ open .
接著就會開啟一個Finder,如果還沒有灌MacTex 2009的話,裡面會有兩個資料夾 2008 和 texmf-local,
原則上2008這個資料夾是可以刪掉的,裡面是MacTex 2008的函式庫,
而texmf-local則是你之前安裝的字型之類的資料夾,如果有需要,可以留下來,
我個人是刪掉,因為沒有灌過什麼字型之類的東西。
Step 2 移除GUI應用程式
所有的圖型介面應用程式都存放在/Applications/TeX底下,所以可以將這個資料夾整個移到垃圾桶;還有/Applications/Utilities裡面的i-Installer也可以刪除。
Step 3 移除其他雜七雜八相關的套件設定
我將一些可能可以刪的目錄和檔案條列如下:
/Library/TeX
這個資料夾理論上是可以刪的,不過官網有說明,如果你個人有灌其他版本的latex,這個資料夾就不一定能刪,請自行考量。
/Library/PreferencePanes/TeX Distribution
這個檔案是系統偏好設定裡面的設定檔,應該也是用不到。
Step 4 移除Ghostscript和Convert
這裡我沒有真的移除這兩個套件,不過官網指出,這些套件可以使用MacTex 2009的安裝包移除。首先點開MacTex 2009安裝包,再點選“File” > "Show Files",接著就會看到安裝過的檔案和其位置,然後就可以到相對應的資料夾將其刪除。
大致上就是這樣啦,我刪除完MacTex 2008之後,再安裝2009,
目前為止沒有什麼大問題,而且發現Latexit原來是內建的程式,害我之前還另外新裝了一個,看來可以把多裝的給砍掉啦~~
趁著這幾天比較有空,就下載了MacTex 2009下來安裝,
但是MacTex總是如此的肥大,灌完要2G多,
而且安裝程式也不會幫你把MacTex 2008移除,
所以,就必須要自行手動移除。
=== 請注意 ===
我自己是先移除才灌MacTex 2009的,如果你是先灌了新版的2009,
我不敢保証以下步驟會不會誤刪2009需要的檔案,有任何疑問,請自己參閱官網:
http://www.tug.org/mactex/uninstalling.html
移除的步驟如下:
Step 1 移除主要函式庫
請在終端機下輸入以下指令:
$ cd /usr/local/texlive
$ open .
接著就會開啟一個Finder,如果還沒有灌MacTex 2009的話,裡面會有兩個資料夾 2008 和 texmf-local,
原則上2008這個資料夾是可以刪掉的,裡面是MacTex 2008的函式庫,
而texmf-local則是你之前安裝的字型之類的資料夾,如果有需要,可以留下來,
我個人是刪掉,因為沒有灌過什麼字型之類的東西。
Step 2 移除GUI應用程式
所有的圖型介面應用程式都存放在/Applications/TeX底下,所以可以將這個資料夾整個移到垃圾桶;還有/Applications/Utilities裡面的i-Installer也可以刪除。
Step 3 移除其他雜七雜八相關的套件設定
我將一些可能可以刪的目錄和檔案條列如下:
/Library/TeX
這個資料夾理論上是可以刪的,不過官網有說明,如果你個人有灌其他版本的latex,這個資料夾就不一定能刪,請自行考量。
/Library/PreferencePanes/TeX Distribution
這個檔案是系統偏好設定裡面的設定檔,應該也是用不到。
Step 4 移除Ghostscript和Convert
這裡我沒有真的移除這兩個套件,不過官網指出,這些套件可以使用MacTex 2009的安裝包移除。首先點開MacTex 2009安裝包,再點選“File” > "Show Files",接著就會看到安裝過的檔案和其位置,然後就可以到相對應的資料夾將其刪除。
大致上就是這樣啦,我刪除完MacTex 2008之後,再安裝2009,
目前為止沒有什麼大問題,而且發現Latexit原來是內建的程式,害我之前還另外新裝了一個,看來可以把多裝的給砍掉啦~~
使用Finder打開隱藏資料夾
我想大家一定都曾遇到這個問題,
就是Finder會自動隱藏 .開頭的檔案,
所以假設我想要安裝新的VIM外掛,
是不是就只能打iterm,用mv指令將檔移過去了。
其實網路上有教學可以把所有的隱藏檔通通顯示出來,
但是還是要輸入指令才能開啟這樣功能,實在是太不人性化。
其實,山不轉路轉,要開啟隱藏資料夾並沒有這麼困難,
假設我要打開VIM的設定資料夾 ~/.vim,
只要打開Finder,選擇“前往” > “前往資料夾”,
如下圖所示:

再輸入~/.vim,

這樣神祕的隱藏檔就開起來啦。
如此一來不用使用mv也能將外掛移到~/.vim底下。
用Mac一年多了才知道可以這樣用,
消息實在是太不靈通啦。
就是Finder會自動隱藏 .開頭的檔案,
所以假設我想要安裝新的VIM外掛,
是不是就只能打iterm,用mv指令將檔移過去了。
其實網路上有教學可以把所有的隱藏檔通通顯示出來,
但是還是要輸入指令才能開啟這樣功能,實在是太不人性化。
其實,山不轉路轉,要開啟隱藏資料夾並沒有這麼困難,
假設我要打開VIM的設定資料夾 ~/.vim,
只要打開Finder,選擇“前往” > “前往資料夾”,
如下圖所示:
再輸入~/.vim,
這樣神祕的隱藏檔就開起來啦。
如此一來不用使用mv也能將外掛移到~/.vim底下。
用Mac一年多了才知道可以這樣用,
消息實在是太不靈通啦。
標籤:
[作業系統]--Mac
2010年5月2日 星期日
在Mac osx 10.6.3(Snow leopard)中灌TinyOS2.x
好久沒寫有關TinyOS的文章了,最近又要開始動手改code了,
看來不在自己的MBA上灌TinysOS不行啦,
近期之內,應該會寫幾篇有關TinyOS的文章,
也算是對TinyOS社群有所貢獻。
所以廢話不多說,在Mac osx 10.6.3灌TinyOS2.x的安裝步驟如下:
我的安裝環境是OSX 10.6.3,現在要安裝TinyOS已經變的很簡單了,
只要先行安裝必要的工具,就可以無痛安裝,需要的工具如下:
1. Xcode
由於我本身就已經安裝了Xcode ,所以我不確定如果沒有Xcode,會不會在安裝的過程中出現問題。
下載位置:
http://developer.apple.com/tools/xcode/
2.MacPorts
因為已經有熱心的朋友將TinyOS所需要的軟體發佈在Ports上,所以只要安裝MacPorts,
一些TinyOS必要的軟體像是NesC、AVR GCC,就不用自己手動去抓下來安裝了。
下載位置:
http://www.macports.org/
3.Git
Git為版本控制軟體,因為我希望能下載到TinyOS的程式,
所以需要透過版本控制軟體來下載,其實用CVS也可以下載最新的code回來,
但是,我發現用Git速度快上好幾倍,所以,當然要用Git啦。
您可以使用port安裝Git,不過我自己是到google code上抓git的installer,因為我有搜集dmg的習慣。
下載位置:
http://code.google.com/p/git-osx-installer/
安裝完基本的工具之後,現在我們要正式開始安裝TinyOS了,
首先,我們必須修改並新增一個Port的來源,並且增修port的設定,方法如下:
到你的家目錄底下,用Git下載Razvan包好的port來源。
接著修改macports的sources.conf,在裡面加入剛才下載回來的檔案位置:
加入
設定完port之後,我們可以開始安裝NesC和avr/msp430 tools
這裡我們到家目錄,用Git將最新版的TinyOS下載回來:
下載回來之後,我們必需要設定一些環境變數,才能讓TinyOS正確的運行,
這裡通常是最難搞的地方,因為只要有環境變數設定錯誤,TinyOS就無法正常編譯成功。
還好TinyOS官方有提供一個環境設定檔tinyos.sh,但是我覺得並不好用,還是有一些參數沒有設定完整,所以,參考了我之前下載的script,改了一份新的設定檔,加入了一些常用的指令和java的設定,大家可以參考看看。
請記得修改.bashrc,並加入
接著將TinyOS的一些Tool安裝起來:
安裝完所有的tool之後,可以輸入以下指令確認是否有TinyOS的工具可以使用:
或者也可以檢查一下有沒有什麼設定或是軟體還沒安裝:
原則上,到這一步,如果環境設定都沒有問題的話,就算是安裝完成了,
有任何的問題,一定是環境設定沒有設定好,就必須檢查有那一個步驟遺漏掉了。
為了要讓motelist可以正常讀取到Mote的資訊,請下載安裝FTDI driver
下載位置:
http://www.ftdichip.com/Drivers/VCP.htm
如果需要不需要重編java tool的朋友,這個步驟可以跳過。
由於官方建議使用gcc44來編繹程式,所以我使用port下載,不過安裝gcc44需要很多時間,好幾個小時吧,我是放給他跑,睡一覺起來才安裝好的,安裝指㐴如下:
gcc_select是用來切換所需要的gcc,可用gcc_select -l察看主機上有灌了什麼版本的GCC,
如果要切換成gcc44,可輸入以下指令:
如果要切回原來的gcc42,指令如下:
目前我自己測試是沒有需要用到gcc44,因為我沒有重新編譯TinyOS的java tool,
如果有需要重新編譯java tool的朋友,才會需要使用到gcc44
重頭戲來了,讓我們來編譯一個程式看看:
如果沒有error,而且看到以下訊息,就表示TinyOS已經安裝成功:
恭喜啦,您可以開始編寫TinyOS的程式了~~
例如,如果在編譯estSerial過程中,出現了以下的錯誤訊息:
這表示你的mig工具設定有問題,請使用以下指令解決:
這裡主要是因為mig的權限問題,所以,只要讓mig可執行問題就可以解決。
但是,修改完權限之後,在MAC OSX上還會出現另外一個問題,如下所示:
這個問題的解法有兩種:
第一種解法--
這是因為Makefile的問題,請將你的Makefile中,
編譯java欄位裡的target值,從null改為$(PLATFORM),
如下所示:
這樣就能夠正常compile了。
參考來源:
http://old.nabble.com/Re:-Build-errors-for-TestSerial----resolved-td26123725.html
第二種解法--
剛才我們有提到是Makefile的問題,
但是追根究底,主要還是因為Snow leopard上的gcc42對null語法的解讀錯誤,
所以,如果不想改Makefile,而且在之前Step 5有安裝gcc_select的朋友,
可以使用以下指令,在每次compile java程式之前,先將預設的gcc版本改為gcc44。
感覺在ubuntu上安裝TinyOS2比在OSX上安裝方便而且快速,
果然有編譯的執行檔還是比較方便,可惜MAC上還沒有人將TinyOS包成DMG檔,
有空再來研究看看好了。
此外,本篇文件主要是參考這篇文章,如有需要可以前往參考。
參考來源:
http://research-machine.blogspot.com/2010/01/how-to-install-tinyos-2-on-macosx-106.html
http://docs.tinyos.net/index.php/Installing_from_CVS/GIT
http://www.mail-archive.com/tinyos-help@millennium.berkeley.edu/msg31149.html
http://www.mobilab.unina.it/TinyOSMAC.htm
看來不在自己的MBA上灌TinysOS不行啦,
近期之內,應該會寫幾篇有關TinyOS的文章,
也算是對TinyOS社群有所貢獻。
所以廢話不多說,在Mac osx 10.6.3灌TinyOS2.x的安裝步驟如下:
Step 1 安裝之前需要的工具
我的安裝環境是OSX 10.6.3,現在要安裝TinyOS已經變的很簡單了,
只要先行安裝必要的工具,就可以無痛安裝,需要的工具如下:
1. Xcode
由於我本身就已經安裝了Xcode ,所以我不確定如果沒有Xcode,會不會在安裝的過程中出現問題。
下載位置:
http://developer.apple.com/tools/xcode/
2.MacPorts
因為已經有熱心的朋友將TinyOS所需要的軟體發佈在Ports上,所以只要安裝MacPorts,
一些TinyOS必要的軟體像是NesC、AVR GCC,就不用自己手動去抓下來安裝了。
下載位置:
http://www.macports.org/
3.Git
Git為版本控制軟體,因為我希望能下載到TinyOS的程式,
所以需要透過版本控制軟體來下載,其實用CVS也可以下載最新的code回來,
但是,我發現用Git速度快上好幾倍,所以,當然要用Git啦。
您可以使用port安裝Git,不過我自己是到google code上抓git的installer,因為我有搜集dmg的習慣。
下載位置:
http://code.google.com/p/git-osx-installer/
Step 2 安裝NesC、 AVR GCC compiler 和MSP GCC
安裝完基本的工具之後,現在我們要正式開始安裝TinyOS了,
首先,我們必須修改並新增一個Port的來源,並且增修port的設定,方法如下:
cd /Users/user git clone git://hinrg.cs.jhu.edu/git/ports.git
到你的家目錄底下,用Git下載Razvan包好的port來源。
接著修改macports的sources.conf,在裡面加入剛才下載回來的檔案位置:
sudo vi /opt/local/etc/macports/sources.conf
加入
#在rsync之前加入以下這行,記得一定要放在rsync之前,不然會發生錯誤,如下所示 file:///Users/hdj/ports rsync://rsync.macports.org/release/ports/ [default]
設定完port之後,我們可以開始安裝NesC和avr/msp430 tools
sudo port install msp430-binutils-tinyos msp430-gcc-tinyos msp430-libc-tinyos (for MSP430) sudo port install avr-binutils-tinyos avr-gcc-tinyos avr-libc-tinyos avrdude-tinyos (for AVR) sudo port install nesc
Step 3 下載TinyOS source code並且安裝相關的程式
這裡我們到家目錄,用Git將最新版的TinyOS下載回來:
cd /Users/user git clone git://hinrg.cs.jhu.edu/git/tinyos-2.x.git
下載回來之後,我們必需要設定一些環境變數,才能讓TinyOS正確的運行,
這裡通常是最難搞的地方,因為只要有環境變數設定錯誤,TinyOS就無法正常編譯成功。
還好TinyOS官方有提供一個環境設定檔tinyos.sh,但是我覺得並不好用,還是有一些參數沒有設定完整,所以,參考了我之前下載的script,改了一份新的設定檔,加入了一些常用的指令和java的設定,大家可以參考看看。
請記得修改.bashrc,並加入
source ~/Documents/tinyos/tinyos.sh其中,~/Documents/tinyos/是你下載tinyos.sh的存放位置。
接著將TinyOS的一些Tool安裝起來:
cd $TOSROOT/tools ./Bootstrap ./configure make sudo make install sudo tos-install-jni
安裝完所有的tool之後,可以輸入以下指令確認是否有TinyOS的工具可以使用:
motelist
或者也可以檢查一下有沒有什麼設定或是軟體還沒安裝:
tos-check-env
原則上,到這一步,如果環境設定都沒有問題的話,就算是安裝完成了,
有任何的問題,一定是環境設定沒有設定好,就必須檢查有那一個步驟遺漏掉了。
Step 4 安裝 FTDI Drivers
為了要讓motelist可以正常讀取到Mote的資訊,請下載安裝FTDI driver
下載位置:
http://www.ftdichip.com/Drivers/VCP.htm
Step 5 重編java tool
如果需要不需要重編java tool的朋友,這個步驟可以跳過。
由於官方建議使用gcc44來編繹程式,所以我使用port下載,不過安裝gcc44需要很多時間,好幾個小時吧,我是放給他跑,睡一覺起來才安裝好的,安裝指㐴如下:
sudo port install gcc44 sudo port install gcc_select
gcc_select是用來切換所需要的gcc,可用gcc_select -l察看主機上有灌了什麼版本的GCC,
如果要切換成gcc44,可輸入以下指令:
gcc_select mp-gcc44
如果要切回原來的gcc42,指令如下:
gcc_select gcc42
目前我自己測試是沒有需要用到gcc44,因為我沒有重新編譯TinyOS的java tool,
如果有需要重新編譯java tool的朋友,才會需要使用到gcc44
Step 6 試著編譯應用程式
重頭戲來了,讓我們來編譯一個程式看看:
cd $TOSROOT/apps/Blink make telosb
如果沒有error,而且看到以下訊息,就表示TinyOS已經安裝成功:
compiled BlinkAppC to build/telosb/main.exe
2648 bytes in ROM
54 bytes in RAM
msp430-objcopy --output-target=ihex build/telosb/main.exe build/telosb/main.ihex
writing TOS image
恭喜啦,您可以開始編寫TinyOS的程式了~~
疑難雜症
Problem 1 Compile 含有Java的程式
例如,如果在編譯estSerial過程中,出現了以下的錯誤訊息:
hdj@MBA:~/tinyos-2.x/apps/tests/TestSerial$ make telosb
mkdir -p build/telosb
mig java -target=null -I/Users/hdj/Documents/tinyos/tinyos-2.x/tos/lib/T2Hack -DIDENT_APPNAME=\"TestSerialAppC\" -DIDENT_USERNAME=\"hdj\" -DIDENT_HOSTNAME=\"Huang-Ding-jiet\" -DIDENT_USERHASH=0x8527c6dbL -DIDENT_TIMESTAMP=0x4bfc99feL -DIDENT_UIDHASH=0x69b76063L -java-classname=TestSerialMsg TestSerial.h test_serial_msg -o TestSerialMsg.java
cat: java: No such file or directory
mig: fatal: "java", line 1: no SubSystem declaration
warning: option "-target=null" after filename(s) ignored
warning: option "-I/Users/hdj/Documents/tinyos/tinyos-2.x/tos/lib/T2Hack" after filename(s) ignored
warning: option "-DIDENT_APPNAME="TestSerialAppC"" after filename(s) ignored
warning: option "-DIDENT_USERNAME="hdj"" after filename(s) ignored
warning: option "-DIDENT_HOSTNAME="Huang-Ding-jiet"" after filename(s) ignored
warning: option "-DIDENT_USERHASH=0x8527c6dbL" after filename(s) ignored
warning: option "-DIDENT_TIMESTAMP=0x4bfc99feL" after filename(s) ignored
warning: option "-DIDENT_UIDHASH=0x69b76063L" after filename(s) ignored
warning: option "-java-classname=TestSerialMsg" after filename(s) ignored
/usr/bin/mig: line 207: /var/folders/5W/5WdvGkinHMGZ7JuCEC53Pk+++TI/-Tmp-//mig.YPmOow/TestSerial.h.19983.c: No such file or directory
i686-apple-darwin10-gcc-4.2.1: /var/folders/5W/5WdvGkinHMGZ7JuCEC53Pk+++TI/-Tmp-//mig.YPmOow/TestSerial.h.19983.c: No such file or directory
i686-apple-darwin10-gcc-4.2.1: no input files
mig: fatal: "<no name yet>", line -1: no SubSystem declaration
/usr/bin/mig: line 207: /var/folders/5W/5WdvGkinHMGZ7JuCEC53Pk+++TI/-Tmp-//mig.YPmOow/test_serial_msg.19983.c: No such file or directory
i686-apple-darwin10-gcc-4.2.1: /var/folders/5W/5WdvGkinHMGZ7JuCEC53Pk+++TI/-Tmp-//mig.YPmOow/test_serial_msg.19983.c: No such file or directory
i686-apple-darwin10-gcc-4.2.1: no input files
mig: fatal: "<no name yet>", line -1: no SubSystem declaration
warning: option "-o" after filename(s) ignored
/usr/bin/mig: line 207: /var/folders/5W/5WdvGkinHMGZ7JuCEC53Pk+++TI/-Tmp-//mig.YPmOow/TestSerialMsg.java.19983.c: No such file or directory
i686-apple-darwin10-gcc-4.2.1: /var/folders/5W/5WdvGkinHMGZ7JuCEC53Pk+++TI/-Tmp-//mig.YPmOow/TestSerialMsg.java.19983.c: No such file or directory
i686-apple-darwin10-gcc-4.2.1: no input files
mig: fatal: "<no name yet>", line -1: no SubSystem declaration
rmdir: /var/folders/5W/5WdvGkinHMGZ7JuCEC53Pk+++TI/-Tmp-//mig.YPmOow: No such file or directory
javac -target 1.4 -source 1.4 *.java
TestSerial.java:45: cannot find symbol
symbol : class TestSerialMsg
location: class TestSerial
this.moteIF.registerListener(new TestSerialMsg(), this);
^
TestSerial.java:50: cannot find symbol
symbol : class TestSerialMsg
location: class TestSerial
TestSerialMsg payload = new TestSerialMsg();
^
TestSerial.java:50: cannot find symbol
symbol : class TestSerialMsg
location: class TestSerial
TestSerialMsg payload = new TestSerialMsg();
^
TestSerial.java:69: cannot find symbol
symbol : class TestSerialMsg
location: class TestSerial
TestSerialMsg msg = (TestSerialMsg)message;
^
TestSerial.java:69: cannot find symbol
symbol : class TestSerialMsg
location: class TestSerial
TestSerialMsg msg = (TestSerialMsg)message;
^
5 errors
make: *** [TestSerial.class] Error 1
這表示你的mig工具設定有問題,請使用以下指令解決:
export PATH=$TOSROOT/tools/tinyos/ncc/:$PATH chmod a+x $TOSROOT/tools/tinyos/ncc/mig
這裡主要是因為mig的權限問題,所以,只要讓mig可執行問題就可以解決。
Problem 2
但是,修改完權限之後,在MAC OSX上還會出現另外一個問題,如下所示:
hdj@MBA:~/tinyos-2.x/apps/tests/TestSerial$ make telosb
mkdir -p build/telosb
mig java -target=null -I/Users/hdj/Documents/tinyos/tinyos-2.x/tos/lib/T2Hack -DIDENT_APPNAME=\"TestSerialAppC\" -DIDENT_USERNAME=\"hdj\" -DIDENT_HOSTNAME=\"Huang-Ding-jiet\" -DIDENT_USERHASH=0x8527c6dbL -DIDENT_TIMESTAMP=0x4bfc9a4fL -DIDENT_UIDHASH=0x1795bab5L -java-classname=TestSerialMsg TestSerial.h test_serial_msg -o TestSerialMsg.java
In file included from /usr/include/string.h:148,
from /Users/hdj/Documents/tinyos/tinyos-2.x/tos/system/tos.h:13:
/usr/include/secure/_string.h: In function `__inline_memcpy_chk':
/usr/include/secure/_string.h:58: warning: return makes pointer from integer without a cast
/usr/include/secure/_string.h: In function `__inline_memmove_chk':
/usr/include/secure/_string.h:69: warning: return makes pointer from integer without a cast
/usr/include/secure/_string.h: In function `__inline_memset_chk':
/usr/include/secure/_string.h:80: warning: return makes pointer from integer without a cast
/usr/include/secure/_string.h: In function `__inline_strcpy_chk':
/usr/include/secure/_string.h:91: warning: return makes pointer from integer without a cast
/usr/include/secure/_string.h: In function `__inline_stpcpy_chk':
/usr/include/secure/_string.h:103: warning: return makes pointer from integer without a cast
/usr/include/secure/_string.h: In function `__inline_strncpy_chk':
/usr/include/secure/_string.h:116: warning: return makes pointer from integer without a cast
/usr/include/secure/_string.h: In function `__inline_strcat_chk':
/usr/include/secure/_string.h:127: warning: return makes pointer from integer without a cast
/usr/include/secure/_string.h: In function `__inline_strncat_chk':
/usr/include/secure/_string.h:139: warning: return makes pointer from integer without a cast
In file included from /Users/hdj/Documents/tinyos/tinyos-2.x/tos/system/tos.h:14:
/usr/include/stdlib.h: At top level:
/usr/include/stdlib.h:272: syntax error before `^'
/usr/include/stdlib.h:272: `type name' declared as function returning a function
/usr/include/stdlib.h:274: syntax error before `^'
/usr/include/stdlib.h:274: `type name' declared as function returning a function
/usr/include/stdlib.h:301: syntax error before `^'
/usr/include/stdlib.h:301: `type name' declared as function returning a function
/usr/include/stdlib.h:307: syntax error before `^'
/usr/include/stdlib.h:307: `type name' declared as function returning a function
/usr/include/stdlib.h:313: syntax error before `^'
/usr/include/stdlib.h:313: `type name' declared as function returning a function
/usr/include/stdlib.h:319: syntax error before `^'
/usr/include/stdlib.h:319: `type name' declared as function returning a function
In file included from /Users/hdj/Documents/tinyos/tinyos-2.x/tos/system/SchedulerBasicP.nc:41,
from /Users/hdj/Documents/tinyos/tinyos-2.x/tos/system/TinySchedulerC.nc:40:
/Users/hdj/Documents/tinyos/tinyos-2.x/tos/platforms/null/hardware.h: In function `__nesc_ntoh_afloat':
/Users/hdj/Documents/tinyos/tinyos-2.x/tos/platforms/null/hardware.h:22: warning: pointer/integer type mismatch in conditional expression
/Users/hdj/Documents/tinyos/tinyos-2.x/tos/platforms/null/hardware.h: In function `__nesc_hton_afloat':
/Users/hdj/Documents/tinyos/tinyos-2.x/tos/platforms/null/hardware.h:27: warning: pointer/integer type mismatch in conditional expression
In file included from /Users/hdj/Documents/tinyos/tinyos-2.x/tos/system/TinySchedulerC.nc:40:
In component `SchedulerBasicP':
/Users/hdj/Documents/tinyos/tinyos-2.x/tos/system/SchedulerBasicP.nc: In function `Scheduler.init':
/Users/hdj/Documents/tinyos/tinyos-2.x/tos/system/SchedulerBasicP.nc:117: warning: pointer/integer type mismatch in conditional expression
failed to parse message file TestSerial.h
make: *** [TestSerialMsg.java] Error 1
這個問題的解法有兩種:
第一種解法--
這是因為Makefile的問題,請將你的Makefile中,
編譯java欄位裡的target值,從null改為$(PLATFORM),
如下所示:
mig java -target=$(PLATFORM) $(CFLAGS) -java-classname=TestSerialMsg TestSerial.h test_serial_msg -o $@
這樣就能夠正常compile了。
參考來源:
http://old.nabble.com/Re:-Build-errors-for-TestSerial----resolved-td26123725.html
第二種解法--
剛才我們有提到是Makefile的問題,
但是追根究底,主要還是因為Snow leopard上的gcc42對null語法的解讀錯誤,
所以,如果不想改Makefile,而且在之前Step 5有安裝gcc_select的朋友,
可以使用以下指令,在每次compile java程式之前,先將預設的gcc版本改為gcc44。
sudo gcc_select mp-gcc44
後話
感覺在ubuntu上安裝TinyOS2比在OSX上安裝方便而且快速,
果然有編譯的執行檔還是比較方便,可惜MAC上還沒有人將TinyOS包成DMG檔,
有空再來研究看看好了。
此外,本篇文件主要是參考這篇文章,如有需要可以前往參考。
參考來源:
http://research-machine.blogspot.com/2010/01/how-to-install-tinyos-2-on-macosx-106.html
http://docs.tinyos.net/index.php/Installing_from_CVS/GIT
http://www.mail-archive.com/tinyos-help@millennium.berkeley.edu/msg31149.html
http://www.mobilab.unina.it/TinyOSMAC.htm
訂閱:
意見 (Atom)