|
老實說 作數位IC設計很難不去碰一些周圍的環境) Q4 k. U. F3 }% S/ e8 F9 H
9 Q3 M' B, w* X! t; l7 F" ?這次因為project的關係 有須要放進一顆ARM的IP 因此位了節省面積就把一些電路的功能用arm來取代5 D% R* D! R& o, f# u9 |
" _2 p m( \2 w) z3 e因此莫名其妙的跟這塊嵌入式有關的地方有了一些觀連6 i, A1 z2 P0 C$ D; I2 z0 Q
* z6 [; p; J, U" G0 N% v) L0 S在這邊分享一些目前學習到的心得與面臨到的問題
v6 O# O% ~9 S. H; \' h: j, r7 @1 T
* X) E3 E8 `8 Z; z/ W) l {# D首先不論是C++或者是C語言都是可以轉成ARM code的
% T' d( O" O* g! r+ ^9 V3 F5 k! R
% j/ i( U/ j% a( v+ Q- I8 O喔 講轉就不專業了 專業的要說可以"compile成"ARM code.... 這部分是後話 暫且不表
$ P; B! T( h, w9 K: c
) \# e v' H/ [& w4 |接下來的問題是 如果整個project裡面有一部分是C語言 另外一部分是arm code 這樣還可以compile嗎?+ E& ^+ o% ]$ n, y
2 `! q. j3 y% ~3 [
答案也是可以的7 l$ v6 {" u' z& d7 ~2 P
/ z. ~6 b' e# \) p! V9 z W) a3 q
最後的問題是 C++ compile成了ARM code以後 我們怎麼去評估他的效能或者轉換的好不好呢?" c# r4 q# U6 c# b G. Q2 K' }
+ G' [# B$ m4 |+ [0 g& E1 ]8 p
其實也有一些軟體能夠替我們做這樣的評估
- |$ P* b, \6 j! c; X7 T& O: F
4 c7 D! D" z& J2 T4 ^
) R* u9 d: g: K) RARM本身有提供一套要付費的軟體 以前叫ACD 現在叫RVDS 就有提供以上幾種功能
: }6 a& J, [; @* y, z
/ a( O! s, E1 {2 i/ m" u5 S比方armcc就是把C code給compile成arm code+ n% O8 _( W8 I+ U
: w- R# n3 E1 e l% _或者armlink就是連結C code與ARM code的指令
% L2 y7 H$ r4 p/ P* B
9 s( v* S" f( K2 ]( h) i3 X% s [; k另外有一個模擬工具ARMulator (現在也在RVDS裡面) 可以幫忙分析哪個指令被呼叫最多次 執行最多次等等
) H r P3 K I) Y. N7 k. L1 Q: C/ O) p4 ]& m/ o9 X
用來幫助我們修改ARM code的架構達到運算上的最高效能
' N4 c: V; i& s8 ^
4 w2 m6 T- g& ]. i, ^3 }$ P) g4 q' _
野人獻曝般的提供一點點小資訊 還真的是獻醜了
' [0 i2 e# c; `) q( q, j. Q! U* v( V* p3 ], b
如果想要了解的朋友友一本書值得推薦 Arm system Developer's Guild
1 I& B. j0 h. e( O1 ]/ Y9 A$ l9 Z# c* {7 ^8 p
其中第五章第六章是精華 討論如何轉換最有效率的格式 第五章從C的角度出發 第六章從ARM的角度出發! K0 i7 {! Z' k& G" Y
/ k( f5 H$ E3 H* C- g
+ c) K% G E5 t& C) \
最後想要請教一個問題目前正困擾著我 由於我需要轉檔得C++跑的是visual studio, 有些自定義的格式像是 __fastcall 或者 __int8 __int32
* \1 n0 ^- H; B5 Y+ q' p2 z% {) d/ E8 K: s2 F! @
對於這樣的東西在用armcc compile的時候他會認不得然後回報錯誤8 R% `! A& q: d/ g9 a7 L
* V% C$ W/ {% A/ `: ^4 m
想請問大家如果我要去哪裡(網路上或電腦裡)找到有定義 __fastcall的lib file或者headfile讓我在compile的時候可以included進去? |
|