|
老實說 作數位IC設計很難不去碰一些周圍的環境( O% |; C- b2 `* g
. L+ C; a, j! X2 w$ f2 N這次因為project的關係 有須要放進一顆ARM的IP 因此位了節省面積就把一些電路的功能用arm來取代4 K0 W* D! ?. W: @: N# L
) b, ?1 J A9 H7 D0 d \
因此莫名其妙的跟這塊嵌入式有關的地方有了一些觀連+ J) F! H/ S3 f. W O; N
4 \1 E+ O" l1 u: S! I! N6 t7 V在這邊分享一些目前學習到的心得與面臨到的問題; |3 F/ ~4 S( l: a" Q1 e
* Q. B: L& ^2 E; I, }6 J
首先不論是C++或者是C語言都是可以轉成ARM code的+ m3 M4 F8 _" g
6 _ F' x, j$ |喔 講轉就不專業了 專業的要說可以"compile成"ARM code.... 這部分是後話 暫且不表
. e6 @" h2 G3 @+ f6 k7 N' ]* {0 y& u
. E1 n# j5 V9 O/ I6 R接下來的問題是 如果整個project裡面有一部分是C語言 另外一部分是arm code 這樣還可以compile嗎?4 G: i. J8 I- b* Y
' e, s. M+ o w) D' a
答案也是可以的& [$ C' |* W- T. c3 R% [. N8 V6 I
6 r7 F& y L7 @ O最後的問題是 C++ compile成了ARM code以後 我們怎麼去評估他的效能或者轉換的好不好呢?
% @( C# G3 I6 D
6 T% X( z( M$ n# \2 e$ H& R5 f其實也有一些軟體能夠替我們做這樣的評估0 p* o, Y! ^1 ]+ B
0 o- I* U" U. M4 G6 Y+ Z
& j4 q& B6 u; l- y
ARM本身有提供一套要付費的軟體 以前叫ACD 現在叫RVDS 就有提供以上幾種功能
7 W' M/ b/ i! U# _9 C
* v* K( p$ A, O: G; H6 Q$ C. }比方armcc就是把C code給compile成arm code
) `" x# f+ J! }% u
$ w) @# V5 T7 W0 d) M或者armlink就是連結C code與ARM code的指令
0 Z! {/ c/ X+ ` q$ I6 I" ]; Y6 n/ s* d, c* q4 w
另外有一個模擬工具ARMulator (現在也在RVDS裡面) 可以幫忙分析哪個指令被呼叫最多次 執行最多次等等
( ~& H8 }$ H$ n' _& z1 Q
( A: r1 U6 `# l) h/ n9 e# f8 r用來幫助我們修改ARM code的架構達到運算上的最高效能1 ]6 ]0 L* o" M, J/ ^5 s3 \+ Q
|7 u! W! f3 i4 G. Y7 y+ I8 s
0 `( T( @5 o p+ j! `6 p
野人獻曝般的提供一點點小資訊 還真的是獻醜了
+ _' U' x- K, H9 ^! x9 J
# d: u# u& Q" x/ _如果想要了解的朋友友一本書值得推薦 Arm system Developer's Guild
) h" |% A& n3 V9 E; C2 w
( W2 L% ]- j; |) O其中第五章第六章是精華 討論如何轉換最有效率的格式 第五章從C的角度出發 第六章從ARM的角度出發* N, \+ M# d& p
, H$ l+ R# [* ^ x: S0 U
7 }" z" ?3 Z' f) B" }
最後想要請教一個問題目前正困擾著我 由於我需要轉檔得C++跑的是visual studio, 有些自定義的格式像是 __fastcall 或者 __int8 __int32# U0 b/ u0 o$ w# E+ j2 \6 @1 s- G
! }* H: u. V9 r# b. B
對於這樣的東西在用armcc compile的時候他會認不得然後回報錯誤
, B" o( ~% o; P5 k
! ^+ w7 t4 o( O想請問大家如果我要去哪裡(網路上或電腦裡)找到有定義 __fastcall的lib file或者headfile讓我在compile的時候可以included進去? |
|