Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 8165|回復: 1

[經驗交流] C++與ARM code合作兩三事

  [複製鏈接]
發表於 2010-9-16 18:37:27 | 顯示全部樓層 |閱讀模式
老實說 作數位IC設計很難不去碰一些周圍的環境
8 ~8 y) ~9 B( N! x# M. e
  S/ ]- P6 R$ b) R# Y這次因為project的關係 有須要放進一顆ARM的IP 因此位了節省面積就把一些電路的功能用arm來取代0 ?5 c) V6 T- B
$ W" Z. r* y1 M
因此莫名其妙的跟這塊嵌入式有關的地方有了一些觀連. |! J3 H+ Y5 ^2 s

. o* O0 C2 O. R  A5 T& {* I( q在這邊分享一些目前學習到的心得與面臨到的問題) j8 v( F+ j% f3 E5 e. q# s

4 {  |: c! C# I8 v2 D首先不論是C++或者是C語言都是可以轉成ARM code的( y* @* o1 q% s0 V$ h( G: p0 q

, i' n- o3 e* l' G$ y$ [3 q喔 講轉就不專業了  專業的要說可以"compile成"ARM code....  這部分是後話  暫且不表
. ?4 P( [" N3 n6 r( ?' I' ~
" t7 z8 f' n9 I8 S" }3 q1 ^接下來的問題是  如果整個project裡面有一部分是C語言 另外一部分是arm code 這樣還可以compile嗎?
2 d4 c- @. w+ ^4 |- e/ q+ D; v0 @* d' u
答案也是可以的* S% l9 t1 h4 e0 R9 U4 ~

) c. i1 ~" q+ g1 r- O# [5 t  W最後的問題是 C++ compile成了ARM code以後 我們怎麼去評估他的效能或者轉換的好不好呢?# c* o2 ]/ [9 ^, B$ f5 n3 K
3 l! K0 B8 I$ o: r/ S9 E4 V! `9 ]+ c+ |
其實也有一些軟體能夠替我們做這樣的評估2 ~" P+ T5 A+ Q

# n7 K( D& k) Z8 r0 l! |& s, H8 d2 A: f. A1 o  |
ARM本身有提供一套要付費的軟體  以前叫ACD  現在叫RVDS  就有提供以上幾種功能6 q6 ~5 X; ~5 `7 R- d7 C0 q; p

# o& }/ m! [" l, M, w比方armcc就是把C code給compile成arm code
( O9 w8 C# n1 k. |* b: q1 p' i8 e- V; Y5 O2 G: \- v' C7 w9 Z: S$ p
或者armlink就是連結C code與ARM code的指令0 O: V: F) A- b: S

  N- T- y+ \( L, F& ?3 c; S另外有一個模擬工具ARMulator (現在也在RVDS裡面) 可以幫忙分析哪個指令被呼叫最多次 執行最多次等等
- o5 L$ Z+ i/ Z/ W$ {
- w/ [  q/ y. a% s2 T, Y用來幫助我們修改ARM code的架構達到運算上的最高效能' a# i0 _4 o% r6 A$ }

$ h# A  ?8 |7 w6 l$ k! o% |9 q$ \, S
野人獻曝般的提供一點點小資訊  還真的是獻醜了  
+ c5 F; S7 U* q* `) }
5 o0 O( l$ X/ ?8 Z5 F% @- @5 q如果想要了解的朋友友一本書值得推薦 Arm system Developer's Guild
/ z- ?- U3 _) ]: h0 c6 @* G$ f
其中第五章第六章是精華  討論如何轉換最有效率的格式  第五章從C的角度出發  第六章從ARM的角度出發
# y' h3 @& Z- p0 b1 y  ~2 Q2 A, B# p) ^, W( S1 F, r$ [' Q

# c. w  V% z) ], ]3 M% d$ @最後想要請教一個問題目前正困擾著我  由於我需要轉檔得C++跑的是visual studio, 有些自定義的格式像是 __fastcall 或者 __int8 __int32$ i: h5 Y8 C$ g7 s5 p. {
& e8 V! U9 \/ s: E. y0 u6 b
對於這樣的東西在用armcc compile的時候他會認不得然後回報錯誤
9 E* I* Q$ \7 S  U* R- _9 E* `: A8 O& F  K" \+ @4 k' B- C) S
想請問大家如果我要去哪裡(網路上或電腦裡)找到有定義 __fastcall的lib file或者headfile讓我在compile的時候可以included進去?
發表於 2010-9-27 14:34:08 | 顯示全部樓層
你所講的arm code應該是指arm的組語(組合語言)
2 M; e9 F4 ^, y$ k! f5 j! ]不論是c或c++都能編譯成arm的code... @o@ c, c++也能編成i386的code...
$ L& T& C1 U* t3 \8 c8 o: W( `. |9 u9 M0 e2 Y6 g' d  ]- {! M, k- B
我想你想說的是"有對應給arm用的c/c++ compiler工具可以使用" 可以讓你在異質的環境下(e.g. i386)去編譯出arm processor能跑的執行檔, 這叫cross compile, 這部份是大多數嵌入式發展會採用的模式5 Q0 l# x9 W: j  W# g3 X: C
2 T! L6 z& O5 D
在同一project部份c 部份組語的作法是為了performance/code size考量" g- Q$ y  d* G4 h
6 F# u6 k! x. J. M
你所講的ACD應該是指ADS* n, n- `! `8 a/ j9 X4 W

9 N5 H9 [9 J9 t6 {! N! ]9 k作性能分析的工具叫profiler, 一般軟體用的性能分析工具都是叫這名字
) h/ l* ^) \0 s0 u; e2 G
. z5 l2 C5 e5 ?/ bARM原廠的tool不便宜, 也許你會想用GNU toolchain, 但兩者的語法及記憶體配置檔寫法有所差異
) w  T9 ?& h4 ?) y3 ~, {- d
; t9 U7 o& v, ~* p+ }# P! v你的問題可能要去翻翻看windows中的__fastcall是怎樣定義的, (去翻標頭檔), 這些type都是用最基本的int去定出來的"給人看的", 翻到最底層, 就會通過去了
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-3-28 04:12 PM , Processed in 0.109006 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表