2013年9月2日 星期一

QT4 - How to build the QT for arm ?

1. 安裝之後編譯需要的套件
#sudo apt-get install libxtst-dev

2. 取得 qt x11 server and qt embedded 並且編譯
#wget http://ftp.heanet.ie/mirrors/trolltech/pub/qt/source/qt-x11-opensource-src-4.5.3.tar.gz
#tar -zxvf qt-x11-opensource-src-4.5.3.tar.gz
#cd qt-x11-opensource-src-4.5.3/
#sudo ./configure
#sudo make;sudo make install

#cd tools/qvfb
#sudo make

#wget http://ftp.heanet.ie/mirrors/trolltech/pub/qt/source/qt-embedded-linux-opensource-src-4.5.3.tar.gz
#tar -zxvf qt-embedded-linux-opensource-src-4.5.3.tar.gz qt-embedded-linux-opensource-src-4.5.3/
#cd qt-embedded-linux-opensource-src-4.5.3/
#sudo ./configure -prefix /qt-library-4.5.3 -release -shared -fast -pch -no-qt3support -qt-sql-sqlite -no-libtiff -no-libmng -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -nomake tools -nomake examples -nomake demos -optimized-qmake -no-nis -no-opengl -no-cups -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm -no-xinerama -no-xshape -no-separate-debug-info -xplatform qws/linux-arm-g++ -embedded arm -depths 16 -confirm-license -little-endian
#sudo make;sudo make install
PS. /qt-library-4.5.3就是之後編譯安裝之後的目標 library 

3. 壓縮剛剛編譯完成的QT library
#cd /
#sudo tar -czvf qt-library-4.5.3.tar.gz /qt-library-4.5.3/
4. 接下就可以把製作完成的壓縮檔拿到開發版上面讓已經編譯完成的 QT 程式引用。

reference :
http://it1688.blog.hexun.com.tw/81109706_d.html
http://it1688.blog.hexun.com.tw/81109675_d.html

2013年3月31日 星期日

C/C++ : Data structure alignment

在宣告資料結構的時候,ARM 或是 某些編譯器會自動做對齊,但是對齊的方式是每 4 Byte 做一個單位 ( entries )。這樣很多空間都會在對齊的時候浪費掉。對於現在都是以 Giga 等級的記憶體作為應用的美好時代來說當然沒有差。但是如果有一天真的要到對記憶體錙銖必較的時候就要知道這種用法。

在struct的前後加上 ...



#pragma pack(push) /* push current alignment to stack */
#pragma pack(1) /* set alignment to 1 byte boundary */
typedef struct _test
{
    char ch0; //byte 1
    char ch1; //byte 1
    int in; //byte 4
    short sh; //byte 2
}test;
#pragma pack(pop) /* restore original alignment from stack */


參考資料:

1. http://changeway.pixnet.net/blog/post/7669656-data-structure-alignment
2. http://en.wikipedia.org/wiki/Data_structure_alignment

2013年3月20日 星期三

C# - 如何取得環境變數


string os = Environment.GetEnvironmentVariable("OS");

資料來源:http://richielin-programer.blogspot.tw/2008/04/c.html

Windows 7 環境參數列表

最近小素需要控制到 Windows 下的環境參數,因此稍微筆記一下。

%ALLUSERSPROFILE%:All Users的資料夾路徑。
%APPDATA%:目前使用者的Application Data資料夾路徑。
%CommonProgramFiles%:Common Files的資料夾路徑。
%COMPUTERNAME%:電腦名稱。
%ComSpec%::命令提示字元的路徑。
%HOMEDRIVER%:使用者目錄的磁碟機。
%HOMEPATH%:使用者家目錄。
%LOCALAPPDATA%:目前使用者的Local資料夾
%LOGONSERVER%:目前使用者所登入的網路控制器名稱。
%NUMBER_OF_PROCESSORS%:CPU的處理器數量。
%OS%:作業系統名稱。
%Path%:執行檔的搜尋路徑。
%PATHEXT%:執行檔的副檔名。
%PROCESSOR_ARCHITECTURE%:處理器的架構名稱,如x86。
%PROCESSOR_IDENTIFIER%:處理器的文字。
%PROCESSOR_LEVEL%:處理器的model number。
%PROCESSOR_REVISION%:處理器的Revision number。
%ProgramData%:與%ALLUSERSPROFILE%相同。
%ProgramFiles%:應用程式目錄,預設是C:\Program Files。
%PROMPT%:目前解譯程式的命令提示字串。
%PSModulePath%:PowerShell Module的路徑。
%PUBLIC%:公用資料夾的路徑,預設為C:\Users\Public
%SESSIONNAME%:連上終端伺服器的Session names。
%SystemDrive%:系統磁碟機,預設為C:。
%SystemRoot%:系統磁碟機的根目錄,預設為C:\Windows。
%Temp%:暫存資料夾。
%Tmp%:暫存資料夾。
%USERDNSDOMAIN%:DNS網域名稱。
%USERDOMAIN%:Netbios網域名稱。
%USERNAME%:目前使用者的帳號。
%USERPROFILE%:目前使用者的資料夾。
%windir%:系統磁碟機上的Windows資料夾,預設為C:\Windows。

資料來源:http://mrynlin.blogspot.tw/2012/04/windows-7.html

2013年3月18日 星期一

C# - 如何在靜態函數(static function)中呼叫表單物件?

為了要讓C# 裡面的 static function 可以存取表單裡面的物件需要...
1. 先把表單的 instance 傳進 thread 中。
2. 當 thread 收到這個 instance的時候再傳進 Static function。
3. Static function 收到後利用這個 instance 呼叫一個中繼的非 static function。
4. 這個中繼的非 static function 再利用委任(BeginInvoke) 的方法呼叫一個非靜態的 function 去更改表單物件。

PS. 繞了半天...終於成功了。一開始靜態函數無法直接更改所以改用委任。但是因為是靜態函數所以無法呼叫 BeginInvoke 。所以先藉由外部傳進來的 instace 呼叫一個非靜態的函數來委任。網路上一般都會利用傳event的方法或也可以再做一隻Thread 不斷的去更新。忽然靈機一動...把委任跟把 thread 傳進 instance的方法結合在一起終於成功。

namespace ShowStringDemo

{
    public partial class Demoform : Form

    {

        /* function */

        delegate void ShowDataToFormDelegate(string show_string);

        ShowDataToFormDelegate ShowDataToFormDelegateFunc;   

        /* thread define */

        public Thread DemoThread;

        public Demoform()

        {

            InitializeComponent();         

        }

        private void Demoform_Load(object sender, EventArgs e)

        {

            DemoThread= new Thread(new ParameterizedThreadStart(DemoThreadMain));

            DemoThreadMain.Start(this);

        }

        public static void DemoThreadMain(object sender)

        {

            while(true)

            {

                StaticShow(sender);

                Thread.sleep(500);

            }

        }

        public static void StaticShow(object sender)

        {

            Demoform instance = ( Demoform ) sender;

            instance.ShowStates("test");

        }

        public void ShowStates(string show_string)

        {

            ShowDataToFormDelegateFunc = new ShowDataToFormDelegate(OutputToLabStatus);

            BeginInvoke(ShowDataToFormDelegateFunc, show_string);

        }

        void OutputToLabStatus(string show_string)

        {

            LabStatus.Text = show_string;

        }

    }

}

參考資料 : http://social.msdn.microsoft.com/Forums/zh-TW/233/thread/5cabca0a-b8cc-4aaf-a77e-c45cb309f5db/

2013年1月30日 星期三

ubuntu - 更換 console 的語系

小素之前有提供讓 console mode 可以顯示中文的方法。
可是那方法每次登入時就要執行一次,再進行軟體開發的時候有些 script 又都只吃英文介面的訊息。因此根本的方法還是讓 console mode 一些訊息全部回到英文。

1. sudo vim /etc/default/locale
2. 更改內容 ...

LANG="en_US"
LANGUAGE="en_US:en"

3. sudo locale-gen

4. 登出再登入

Reference : http://jackden-diary.blogspot.tw/2010/05/ubuntu-lang-en.html

2013年1月29日 星期二

Android - ubuntu 12.10 環境下 build android 4.0.x 的 gcc 版本問題解決


ubuntu 12.10 的環境去build android 4.0.x 時會碰到如下的錯誤:

cc1plus: all warnings being treated as errors
make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1

這是因為 gcc 跟 g++ 的版本太高的原因造成的。
解決辦法:

1. 透過 apt-get 安裝 4.4 的版本:

sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4

2. 更換連結:

cd /usr/bin
sudo mv gcc gcc.bak
sudo ln -s gcc-4.4 gcc
sudo mv g++ g++.bak
sudo ln -s g++-4.4 g++

3. 如果你跟小素一樣是 x64 的版本則還加裝multilib

sudo apt-get install g++-4.4-multilib

Reference : 

Android - 安裝 Sun Java 6 for android 4.0.x

ubuntu 12.10 在 build android 2.2.x 的時候可以使用 ubuntu 預設的 open JDK.
但是當在build android 4.0.x 的時候一開始確認 Java 的版本就會失敗。
錯誤訊息如下:

************************************************************
You are attempting to build with the incorrect version
of java.
Your version is: java version "1.6.0_31".
The correct version is: Java SE 1.6.
Please follow the machine setup instructions at
    http://source.android.com/source/download.html
************************************************************

似乎 Android 4.0.x 一定要使用 Sun 的 Java SDK.

1. 去 JAVA 的官方網頁,選擇下載JDK。


2. 選擇適合自己的版本:

Note : 小素是選擇 jdk-6u38-linux-x64.bin 。

3. 切換到下載的目錄:

sudo chmod a+x jdk-6u38-linux-x64.bin
./jdk-6u38-linux-x64.bin
mv jdk1.6.0_38/ /opt/sun-jdk1.6.0_38

4. 在 ~/.bashrc 裡面加入以下幾行:
export JAVA_HOME=/opt/sun-jdk1.6.0_38
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

5. 重新讀取環境變數
source ~/.profile

6. 確認 Java 版本:
java version "1.6.0_38"
Java(TM) SE Runtime Environment (build 1.6.0_38-b05)
Java HotSpot(TM) 64-Bit Server VM (build 20.13-b02, mixed mode)







2013年1月26日 星期六

2013年1月24日 星期四

Android - 透過 Wifi 使用 adb 連線到 device 進行開發。

Device side :

1. Go to Google play and install the "Wifi Adb" http://goo.gl/6E8Ay
2. Launch "Wifi Adb" on your device
3. Remember your device ip

PC side:

1.  adb connect 192.168.1.69:5555
2.  adb device
if you can find this message ...
=========================

List of devices attached
192.168.1.69:5555 device
=========================
You have already connect your device via wifi.

Reference : http://stackoverflow.com/questions/2604727/how-can-i-connect-to-android-with-adb-over-tcp