Chip123 科技應用創新平台

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

作者: ishoni    時間: 2010-9-16 06:37 PM
標題: C++與ARM code合作兩三事
老實說 作數位IC設計很難不去碰一些周圍的環境
" y! g1 A* v, L* C( t
- F3 B+ d' Q% P3 k這次因為project的關係 有須要放進一顆ARM的IP 因此位了節省面積就把一些電路的功能用arm來取代
& u* I5 H0 c' d3 N" _
/ A! i% J* _1 K1 D/ {. @3 I因此莫名其妙的跟這塊嵌入式有關的地方有了一些觀連
- d* c2 b1 b9 u- f; U7 G, h
- S, X5 Z5 P3 D- z3 P4 H. j$ j在這邊分享一些目前學習到的心得與面臨到的問題
+ E: L% [- E' e
* U! ~% v# ^! m$ c' u首先不論是C++或者是C語言都是可以轉成ARM code的  c$ Z( B# b+ v/ h9 D: a

3 e) W% k( l6 U! S喔 講轉就不專業了  專業的要說可以"compile成"ARM code....  這部分是後話  暫且不表0 g8 U0 ^# K6 M
; N. i2 R- `4 c7 _/ f2 m
接下來的問題是  如果整個project裡面有一部分是C語言 另外一部分是arm code 這樣還可以compile嗎?
; L7 H; m2 k* `: f, j. ~# v/ f" N
0 v5 e, |5 c( B7 C3 s6 W- ]答案也是可以的
8 {$ [" t# w+ {* A9 `4 g9 c
* Y2 {3 n# I: _0 ^! \最後的問題是 C++ compile成了ARM code以後 我們怎麼去評估他的效能或者轉換的好不好呢?
1 T& \6 O9 Q. c$ P
; m# D7 N% h; k% [+ M) r) S0 u其實也有一些軟體能夠替我們做這樣的評估
5 T8 V7 v9 X1 q2 ?4 L& [* ~% U/ t8 V! }; D8 I/ ]7 _& \
0 s& M' H$ E4 H; u4 X( P
ARM本身有提供一套要付費的軟體  以前叫ACD  現在叫RVDS  就有提供以上幾種功能* j; E  {% f4 \+ J$ u

) w1 {2 q; i1 y2 @9 J/ Y. P比方armcc就是把C code給compile成arm code  u6 E6 ~# P: L6 E
* `3 k2 t; f4 m: G
或者armlink就是連結C code與ARM code的指令, `- ^7 p0 ~8 R/ f/ z+ V

$ H( B6 q4 }+ }. A另外有一個模擬工具ARMulator (現在也在RVDS裡面) 可以幫忙分析哪個指令被呼叫最多次 執行最多次等等
" _1 ^, J% D/ v
: x( j1 d$ l! n1 i( X) F/ g用來幫助我們修改ARM code的架構達到運算上的最高效能
' \! G9 a7 X; X! `
" \6 u4 l& g$ O
8 o4 \& `& s  e( \5 U野人獻曝般的提供一點點小資訊  還真的是獻醜了  
0 y. r: R' O: o" u2 }( _3 L. C
8 t' V2 _& u' X8 X如果想要了解的朋友友一本書值得推薦 Arm system Developer's Guild
, K- T% r: m; \& u3 i
" [! Z0 Q. g* R/ c% h7 J, T其中第五章第六章是精華  討論如何轉換最有效率的格式  第五章從C的角度出發  第六章從ARM的角度出發1 ^4 {' y2 f( g% K# X# J6 W
; ~# w6 H) }3 X' `/ Q, n
8 i. L: G$ B8 w1 a  p1 b2 L7 {' t
最後想要請教一個問題目前正困擾著我  由於我需要轉檔得C++跑的是visual studio, 有些自定義的格式像是 __fastcall 或者 __int8 __int32' d! Y4 \, l+ N, ], p6 P/ g% ?  F
9 [6 B$ g+ _) X! b  \
對於這樣的東西在用armcc compile的時候他會認不得然後回報錯誤" F7 K: j6 W% ^

+ S: a2 ?" L, ]: d) G9 t+ e想請問大家如果我要去哪裡(網路上或電腦裡)找到有定義 __fastcall的lib file或者headfile讓我在compile的時候可以included進去?
作者: sieg70    時間: 2010-9-27 02:34 PM
你所講的arm code應該是指arm的組語(組合語言)
% c( I7 s7 s6 i* J: |. u不論是c或c++都能編譯成arm的code... @o@ c, c++也能編成i386的code...3 B* n: T- d2 {3 `. a) W5 t+ C: j

, _% A: P; ^* ~3 C0 R我想你想說的是"有對應給arm用的c/c++ compiler工具可以使用" 可以讓你在異質的環境下(e.g. i386)去編譯出arm processor能跑的執行檔, 這叫cross compile, 這部份是大多數嵌入式發展會採用的模式: X- g# P9 g  F9 ?% i
) O0 J: X, s5 j( \  q4 N
在同一project部份c 部份組語的作法是為了performance/code size考量
- E6 E8 i$ P1 q% r# g  |
2 c% G) F" o) z你所講的ACD應該是指ADS1 j+ G9 O# i5 Y1 b( T4 h8 o
8 p) A1 ]  f( R$ b4 I) W) H1 C1 o
作性能分析的工具叫profiler, 一般軟體用的性能分析工具都是叫這名字7 G' R& J9 v, h( R7 H9 i7 O
/ p6 n  y; @/ i+ X' N! R- t
ARM原廠的tool不便宜, 也許你會想用GNU toolchain, 但兩者的語法及記憶體配置檔寫法有所差異' [- @0 o& Z! @9 h+ @
) B4 |- J& x- w( h% j1 h, M1 @
你的問題可能要去翻翻看windows中的__fastcall是怎樣定義的, (去翻標頭檔), 這些type都是用最基本的int去定出來的"給人看的", 翻到最底層, 就會通過去了




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