Chip123 科技應用創新平台
標題:
C++與ARM code合作兩三事
[打印本頁]
作者:
ishoni
時間:
2010-9-16 06:37 PM
標題:
C++與ARM code合作兩三事
老實說 作數位IC設計很難不去碰一些周圍的環境
4 K) d3 i, K X6 w* n: I2 L
! H% w4 ?" S% A! [8 K& m
這次因為project的關係 有須要放進一顆ARM的IP 因此位了節省面積就把一些電路的功能用arm來取代
5 P) v0 G3 ]6 K1 c+ V& O- T3 w8 Z8 A/ u
4 \7 \& x+ C5 H7 g9 G
因此莫名其妙的跟這塊嵌入式有關的地方有了一些觀連
! [8 d) K3 l( e' z
" Z. O& i7 I$ m# f& E) W! G/ w
在這邊分享一些目前學習到的心得與面臨到的問題
5 [7 A9 }# \. a8 O
4 B0 M, [( d ~( j& D0 t6 H
首先不論是C++或者是C語言都是可以轉成ARM code的
: @! n, t8 L/ ^0 H9 [7 h3 }
0 M, L, p; ]4 V
喔 講轉就不專業了 專業的要說可以"compile成"ARM code.... 這部分是後話 暫且不表
, [# L" \ K& _" z* o# t
$ s9 }: i& T- E+ u/ H3 _) j+ }
接下來的問題是 如果整個project裡面有一部分是C語言 另外一部分是arm code 這樣還可以compile嗎?
- \! ?+ X8 }/ |% k6 X
* F* v5 p: u/ J) \/ V9 q: G
答案也是可以的
7 [! H. ~3 l9 S/ i) i; U
/ E6 Y+ A' i7 ]9 R
最後的問題是 C++ compile成了ARM code以後 我們怎麼去評估他的效能或者轉換的好不好呢?
* B. M, L; `+ }9 X) D, [% u
) H# T) z2 U( A \4 h
其實也有一些軟體能夠替我們做這樣的評估
( M' r% P" \) j1 s2 f% |
6 ?5 h/ h5 X) m. Q' c6 ^
9 I: Z P7 I; c) y' ~: p" y8 J
ARM本身有提供一套要付費的軟體 以前叫ACD 現在叫RVDS 就有提供以上幾種功能
9 K: L. z# s$ a% J4 y, O
) t3 M0 \2 K+ t% r% A" w6 h
比方armcc就是把C code給compile成arm code
+ f& A7 ?% G+ C( x% O7 M
6 |. u8 t. N5 E! ^( i7 {9 ~; C
或者armlink就是連結C code與ARM code的指令
6 n" v7 c. z5 c& n V9 c2 [" p
- s6 C- L( h6 x3 N: q
另外有一個模擬工具ARMulator (現在也在RVDS裡面) 可以幫忙分析哪個指令被呼叫最多次 執行最多次等等
) O3 H( q6 a; e3 N8 V
. V' B T+ `- A2 x' m6 C+ X
用來幫助我們修改ARM code的架構達到運算上的最高效能
8 d, _% U% u$ I1 Q0 t' Z8 d
, R/ {/ C8 U3 e' d- V2 f2 e
4 p+ ?' Z0 m/ z( y: V
野人獻曝般的提供一點點小資訊 還真的是獻醜了
5 S3 n! B1 a4 m4 A) h; M0 x* e5 }8 F
4 a, l3 ? H9 o% |( M$ c
如果想要了解的朋友友一本書值得推薦 Arm system Developer's Guild
4 t8 Q9 m( n( `# s6 G* ]0 q6 y
, F. s# w, N7 Q- I( `' Q4 I' x
其中第五章第六章是精華 討論如何轉換最有效率的格式 第五章從C的角度出發 第六章從ARM的角度出發
B6 s+ R' J p" z7 |/ ^
) ~% N1 t2 ^$ K
3 c# F) B! [& Y! Z
最後想要請教一個問題目前正困擾著我 由於我需要轉檔得C++跑的是visual studio, 有些自定義的格式像是 __fastcall 或者 __int8 __int32
$ H7 G: {. A2 I* H5 w
/ `# Y- V+ \" n
對於這樣的東西在用armcc compile的時候他會認不得然後回報錯誤
1 L( s# \$ g6 n8 a, ?6 o
/ s. V" \! [, }. L& G
想請問大家如果我要去哪裡(網路上或電腦裡)找到有定義 __fastcall的lib file或者headfile讓我在compile的時候可以included進去?
作者:
sieg70
時間:
2010-9-27 02:34 PM
你所講的arm code應該是指arm的組語(組合語言)
+ P v! v. k, K9 G, W0 F
不論是c或c++都能編譯成arm的code... @o@ c, c++也能編成i386的code...
% R/ T' J! {0 v- [
; R: Y7 T4 J% Z H% c6 Q$ l
我想你想說的是"有對應給arm用的c/c++ compiler工具可以使用" 可以讓你在異質的環境下(e.g. i386)去編譯出arm processor能跑的執行檔, 這叫cross compile, 這部份是大多數嵌入式發展會採用的模式
4 Q7 h8 ?4 @! B$ Z% ^
" q) W8 E# ^" n5 {
在同一project部份c 部份組語的作法是為了performance/code size考量
9 t# w; N, g/ F% h( N2 n
+ _* G8 B# o7 L7 g3 A0 i+ p
你所講的ACD應該是指ADS
+ D* c- n1 V q+ q# i( Z
, d/ e6 R* A9 [* n$ ]7 J' U
作性能分析的工具叫profiler, 一般軟體用的性能分析工具都是叫這名字
; B* `$ w% ?6 C2 P
! l- M/ X7 x/ U& l! H" V7 h
ARM原廠的tool不便宜, 也許你會想用GNU toolchain, 但兩者的語法及記憶體配置檔寫法有所差異
3 m# ?8 E$ j# c1 k' }) K8 v' H% ?
7 Y# n% F9 n9 P, ^
你的問題可能要去翻翻看windows中的__fastcall是怎樣定義的, (去翻標頭檔), 這些type都是用最基本的int去定出來的"給人看的", 翻到最底層, 就會通過去了
歡迎光臨 Chip123 科技應用創新平台 (http://free.vireal.world/chip123_website/innoingbbs/)
Powered by Discuz! X3.2