2010年3月19日 星期五

ARM Assembler V.S GNU Assembler


ARMGNU Assembler差異到底有多大,只能說非常的大!用過就知道,之前就將GNU 可成功Make的程式丟到ADS(他用的是ARM Assembler,自家開發的嘛)上模擬,看看中斷點、暫存器數值、程式流程。

錯誤居然有309(組合語言部分,C語言倒是沒什麼問題)GoogleADS_Errors_and_WarningsAn Introduction to the GNU AssemblerGNU ARM Assembler Quick Reference以及網路上各方精華才知道,問題出在哪?還一直以為是環境設置的問題(當然環境設置也很重要,弄不好一樣不能跑!)。

ADS顯示的主要錯誤
1. Error   : A1163E: Unknown opcode
組譯器擺明就是看不懂
2. Error   : C2470E: function prototype formal '__packed__' needs type or class - 'int' assumed
這個__attribute__((__packed__))GNU才有的用法 ARM Assembler也是看不懂的,記得Mark(註解)起來

其實真正的錯誤是下面這些(是非常多 XD)
     ARM        ->          GNU
INCLUDE 替換成 .INCLUDE
TCLK2 EQU PB25
替換成 .equ TCLK2, PB25
EXPORT 替換成 .global
IMPORT
替換成 .extern
DCD
替換成 .long
IF :DEF:
替換成 .IFDEF
ELSE 替換成 .ELSE
ENDIF
替換成 .ENDIF
:OR:
替換成 |
:SHL:
替換成 <<
END
替換成 .end
AREA Word, CODE, READONLY --> .text
AREA Block, DATA, READWRITE --> .data
CODE32 --> .arm
CODE16 --> .thumb
LTORG --> .ltorg
For ADS environment
    __asm{
            rsbs    dumy, var2, 0
            movmi   L_var_out, L_var1, lsl var2
            movpl   L_var_out, L_var1, asr dumy
         }
For GNU environment
       __asm__ __volatile__(
            " rsbs    %0, %3, #0;\n\r"
            " movmi   %1, %2, lsl %3;\n\r"
            " movpl   %1, %2, asr %0"
            :"=r" (dumy), "=r" (L_var_out)
            :"r" (L_var1), "r" (var2)
);
or
    asm volatile(
               " rsbs    %0, %3, #0;\n\r"
            " movmi   %1, %2, lsl %3;\n\r"
            " movpl   %1, %2, asr %0"
            :"=r" (dumy), "=r" (L_var_out)
            :"r" (L_var1), "r" (var2)
       ); 

不知道的人,這部分可能弄個一輩子都不知道問題在哪?明明沒有錯看半天,上面只是主要的部分,其實還有很多想不到的,像是少加了個冒號、程式前面沒空白、有的地方必須是小寫,所有令人意想不到的錯誤都出現了。如果你很習慣GNU GDB(GNU DeBugger) 或是你根本就在Windows上開發一開始就是學ARM Assembler語法,那你就沒這個問題了,但如果你要將程式從GNUARM或是倒過來ARMGNU記得先看看。




2010年3月9日 星期二

Ubuntu on HTC

Ubuntu on HTC



這實在是太酷了
這可以當個超小 "小筆電 "
HTC又有新的目標了
話說  這樣不能打電話喔 別亂學 哈哈

2010年3月3日 星期三

ADS AXD ICE 介紹

ADS (ARM Developer Suite)ARM公司所開發的IDE (Integrated Development Environment)環境的程式編輯及編譯工具,能夠將程式編譯成為映射執行檔供AXD模擬執行,或是編譯成燒錄檔,燒錄至Flash開機執行。使用者使用ADS進行開發時,需要建立一個專案環境,並在專案環境下進行必要的硬體設定、編譯設定、檔案組態,以進行makelink等工作,結構如同使用armgcc編譯的組態與設定,但ADS已經此類工作在IDE環境下進行,使用者能夠輕鬆進行檔案組態與整理的工作。
ICE (In-Circuit Emulator)可將AXD連結上ARM SocJTAG介面的硬體已進行模擬執行及除錯,若是使用支援USB介面的ICE則需安裝USBmice2K.infUSBmice.sys兩個USB驅動程式,並設定AXD的裝置使連結程序完成即可使用AXD模擬執行及除錯。
AXD (ARM eXtended Debugger)為一套debugger,是ARM公司所開發的IDE環境之模擬軟體,並提供模擬 執行、單步執行、記憶體及變數監控、設定中斷點及追蹤程式等偵錯功能,AXD需要透過ICE連結裝置的JTAG介面後才能執行,若是ICE位偵測到相符的硬體裝置,或是ICE驅動未在執 行狀態,執行AXD時將會出現錯誤。