Chip123 科技應用創新平台

標題: C++與ARM code合作兩三事 [打印本頁]

作者: ishoni    時間: 2010-9-16 06:37 PM
標題: C++與ARM code合作兩三事
老實說 作數位IC設計很難不去碰一些周圍的環境3 X3 R2 I% g. e+ t( X  F
5 _- g7 p8 I( ]
這次因為project的關係 有須要放進一顆ARM的IP 因此位了節省面積就把一些電路的功能用arm來取代- i$ U& `$ \# N

3 o, a  F% r- N8 f2 l) {) s  {因此莫名其妙的跟這塊嵌入式有關的地方有了一些觀連
4 s/ A( _+ L* Z' M/ g- }: i" w4 C% Y
在這邊分享一些目前學習到的心得與面臨到的問題
4 d2 g) n" y1 h" F9 c0 H0 p
2 W* c& N3 E# p( g$ ]$ D首先不論是C++或者是C語言都是可以轉成ARM code的
. ~7 `$ k. n5 R" j: a
5 J! i7 y8 n3 |喔 講轉就不專業了  專業的要說可以"compile成"ARM code....  這部分是後話  暫且不表
; i) I" [2 \* ?0 W, C2 Z0 d1 |
* k& L+ W) Q; h% K8 Y! E; l; @接下來的問題是  如果整個project裡面有一部分是C語言 另外一部分是arm code 這樣還可以compile嗎?( ]/ |( f3 S/ G0 @1 J6 a3 q' S

, p0 e3 D& [; W9 M6 z) T答案也是可以的
" x- {  e# o( X$ \5 G4 ~, L4 i8 N8 ~  T8 K
9 r7 ?5 H- F6 z' a' r; q最後的問題是 C++ compile成了ARM code以後 我們怎麼去評估他的效能或者轉換的好不好呢?- o1 O) n/ V( K9 a% h8 o" p

$ t, m. @4 y8 O5 x* E' y其實也有一些軟體能夠替我們做這樣的評估! m/ U! x1 Q) S& J/ |
  s4 ]! W/ L$ d- X1 Z9 y- K
. u! F1 m6 Y  `8 p( H9 ^
ARM本身有提供一套要付費的軟體  以前叫ACD  現在叫RVDS  就有提供以上幾種功能
& X( L/ Q6 _& o0 S
/ y: }% r* @2 O# l比方armcc就是把C code給compile成arm code
( x% g! {) z+ I$ ]" u1 Y" r3 X, v
或者armlink就是連結C code與ARM code的指令; B: ^6 T3 |. K( o' s

* }* }: u* S; s另外有一個模擬工具ARMulator (現在也在RVDS裡面) 可以幫忙分析哪個指令被呼叫最多次 執行最多次等等9 P( Y2 N3 l( d" t0 q

* h$ ^' T) u8 _# E用來幫助我們修改ARM code的架構達到運算上的最高效能4 r* p1 y8 H1 e1 T$ g8 @) B1 {; X

  M3 O$ z+ H1 O2 T- Y) z/ C
1 @( I2 I6 ?) Q) V: i) `野人獻曝般的提供一點點小資訊  還真的是獻醜了  
/ q! c7 }4 ^8 Y& A  M  S  R% i. [0 N' H+ T1 T9 a" `
如果想要了解的朋友友一本書值得推薦 Arm system Developer's Guild7 e5 f. [- b" e# p3 u/ S! w) m. _8 ^7 P
& i/ I( t7 L% A6 ]! i5 ?9 U
其中第五章第六章是精華  討論如何轉換最有效率的格式  第五章從C的角度出發  第六章從ARM的角度出發) _+ f4 Z3 M8 n! O& _# n
  {& f3 P& [0 H  E- ^

4 @& y" f4 X4 h( w% I最後想要請教一個問題目前正困擾著我  由於我需要轉檔得C++跑的是visual studio, 有些自定義的格式像是 __fastcall 或者 __int8 __int320 D) t5 d" J/ b4 ?( l2 c- M

9 U9 N) T/ _: n& j對於這樣的東西在用armcc compile的時候他會認不得然後回報錯誤
1 _! a* L+ N$ _# H; k5 W" k6 T' E; L) S, Y1 w+ p( @
想請問大家如果我要去哪裡(網路上或電腦裡)找到有定義 __fastcall的lib file或者headfile讓我在compile的時候可以included進去?
作者: sieg70    時間: 2010-9-27 02:34 PM
你所講的arm code應該是指arm的組語(組合語言), X, ?+ C0 o9 e. F( V% Y
不論是c或c++都能編譯成arm的code... @o@ c, c++也能編成i386的code...
! G2 y1 q  J5 c  G$ l0 L" E' f5 V1 t1 L( G' |! k- i* S7 P
我想你想說的是"有對應給arm用的c/c++ compiler工具可以使用" 可以讓你在異質的環境下(e.g. i386)去編譯出arm processor能跑的執行檔, 這叫cross compile, 這部份是大多數嵌入式發展會採用的模式
: o+ v# ]3 v! U7 D7 e% }
) E9 R* k5 _: C: m6 W' A; w在同一project部份c 部份組語的作法是為了performance/code size考量6 _3 Q% ]( X0 L/ o' w
2 m7 A7 s4 G1 P
你所講的ACD應該是指ADS. r: c% o) U; l& o
: B' }! ^0 ^! P! d9 I
作性能分析的工具叫profiler, 一般軟體用的性能分析工具都是叫這名字' l+ Q' b$ M& B- ^$ v
6 P! G" V- W2 n& i9 h3 l
ARM原廠的tool不便宜, 也許你會想用GNU toolchain, 但兩者的語法及記憶體配置檔寫法有所差異4 ~3 f9 _( F& H+ g  R+ H

/ P5 z5 K7 a+ @) W' Y  d( A你的問題可能要去翻翻看windows中的__fastcall是怎樣定義的, (去翻標頭檔), 這些type都是用最基本的int去定出來的"給人看的", 翻到最底層, 就會通過去了




歡迎光臨 Chip123 科技應用創新平台 (http://www.chip123.com.tw/) Powered by Discuz! X3.2