|
老實說 作數位IC設計很難不去碰一些周圍的環境+ D# d$ y1 L8 p: ~' s
$ z) |. u. u$ t* p; Z0 d
這次因為project的關係 有須要放進一顆ARM的IP 因此位了節省面積就把一些電路的功能用arm來取代2 E$ B" n+ N& N* T1 ^; T Z& F# ?& U
: z- Z' k2 N: j0 H# K
因此莫名其妙的跟這塊嵌入式有關的地方有了一些觀連+ p6 B6 l7 V7 v" S* J1 Z7 N/ b0 x# w
- q% D4 [' h+ b; b
在這邊分享一些目前學習到的心得與面臨到的問題
* I# H1 G+ r: {; q" n, w0 f& ]' f U- a# M
首先不論是C++或者是C語言都是可以轉成ARM code的
! {4 e- F# U, y9 l p: b2 N1 k& ?2 K
喔 講轉就不專業了 專業的要說可以"compile成"ARM code.... 這部分是後話 暫且不表
0 z& d7 d. n @- p) W# p( s8 ]8 u! z9 s1 G& B" i1 |
接下來的問題是 如果整個project裡面有一部分是C語言 另外一部分是arm code 這樣還可以compile嗎?
- h6 D* r+ l3 S$ j, N0 m: E6 f8 ]: F
答案也是可以的7 G" C f+ [# \7 B! E5 r. m: y3 T
v; T9 o; `1 |4 Z6 d
最後的問題是 C++ compile成了ARM code以後 我們怎麼去評估他的效能或者轉換的好不好呢?- B+ ?1 e& e6 f3 R" q
0 E6 \) z9 v& b: `. z3 q) ^其實也有一些軟體能夠替我們做這樣的評估. p, s( p; t' _' m2 v
# L9 l v; \3 A' f. o
' ?4 I, C& ^+ B. I- c7 @* T* {0 dARM本身有提供一套要付費的軟體 以前叫ACD 現在叫RVDS 就有提供以上幾種功能- h7 J" K, {2 p/ `
b& \! f7 S% ~, P8 F
比方armcc就是把C code給compile成arm code
1 x+ c/ f: V4 |/ M* S. B' h+ p3 h4 |7 n% l Z& Q7 Y/ R! n
或者armlink就是連結C code與ARM code的指令
# U/ }. u: t6 T/ N& L1 f
/ L/ h+ g- S) R+ T$ i; a% O另外有一個模擬工具ARMulator (現在也在RVDS裡面) 可以幫忙分析哪個指令被呼叫最多次 執行最多次等等: J# i( Z1 O& o
. W3 x) i7 s; ^5 b& F
用來幫助我們修改ARM code的架構達到運算上的最高效能
! Y1 L5 [' I1 I' n) K' m. z' h% ] D' @: Y0 o' C
' |" V6 r: L# z d- T7 W Z6 W野人獻曝般的提供一點點小資訊 還真的是獻醜了
7 n( z/ @; ^% l1 y2 V2 F1 I! q/ M$ p, D& r
如果想要了解的朋友友一本書值得推薦 Arm system Developer's Guild
9 k/ t* m- m6 x6 L% [. v4 @, M0 Q4 f- i) G: T
其中第五章第六章是精華 討論如何轉換最有效率的格式 第五章從C的角度出發 第六章從ARM的角度出發8 v( n4 c+ C0 w
5 A8 {5 \6 ]* i3 M; l9 u
4 n9 i8 b5 T6 G$ F6 t) S3 \, r1 R7 A最後想要請教一個問題目前正困擾著我 由於我需要轉檔得C++跑的是visual studio, 有些自定義的格式像是 __fastcall 或者 __int8 __int32
+ R: T$ R/ a* a
& c) V. Z9 \1 S/ V- g( t對於這樣的東西在用armcc compile的時候他會認不得然後回報錯誤
2 I7 O2 o) c }! M' _& _0 ?0 d N: D* R9 d: d
想請問大家如果我要去哪裡(網路上或電腦裡)找到有定義 __fastcall的lib file或者headfile讓我在compile的時候可以included進去? |
|