Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
查看: 5987|回復: 1

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

  [複製鏈接]
發表於 2010-9-16 18:37:27 | 顯示全部樓層 |閱讀模式
老實說 作數位IC設計很難不去碰一些周圍的環境
6 f" \1 |* Y/ j% `; g
. e8 r: C3 j* x9 l% |3 X這次因為project的關係 有須要放進一顆ARM的IP 因此位了節省面積就把一些電路的功能用arm來取代
! q4 \: @9 z6 e' m! R4 ], M: ~  o: Q+ S0 v! T
因此莫名其妙的跟這塊嵌入式有關的地方有了一些觀連, F6 j2 J; t6 H' Q+ A1 _: V1 y

0 z4 W$ ]( j/ d5 @7 n% L4 r( G- w' W在這邊分享一些目前學習到的心得與面臨到的問題
5 V& |5 _: s' h; S. z8 f+ Y+ G& L: c% b3 r' ^6 n* x
首先不論是C++或者是C語言都是可以轉成ARM code的; }1 M) |5 n" [, [$ k/ X. v. q+ Y

8 c8 [0 A% ?$ l& F( m喔 講轉就不專業了  專業的要說可以"compile成"ARM code....  這部分是後話  暫且不表
' |7 |  j7 }% x" ?* g9 K; B" U( n$ i. w- f& A, J/ F9 A' z
接下來的問題是  如果整個project裡面有一部分是C語言 另外一部分是arm code 這樣還可以compile嗎?; B: F3 b  e* Y/ V9 O: A

1 r$ @: B1 n6 I; ?2 n2 a* J  Y答案也是可以的$ X. l& u; f0 X/ r0 `
' x, s$ r* n# W  Z
最後的問題是 C++ compile成了ARM code以後 我們怎麼去評估他的效能或者轉換的好不好呢?
4 E& h7 _) e8 Q* N
3 D8 r  f. V  A. T& F1 r9 b% l4 e其實也有一些軟體能夠替我們做這樣的評估
) _- k& a" U5 v; i4 z1 c6 m
- |- d* _# M% _
( P9 ^( w: G' Z, J3 W* y: XARM本身有提供一套要付費的軟體  以前叫ACD  現在叫RVDS  就有提供以上幾種功能2 f, ?, z3 T: L: ~

* M1 b' \9 O1 r: h7 X比方armcc就是把C code給compile成arm code
6 G0 m, R- i6 |7 F1 R! ^  S
0 k$ @# m  J7 v$ y或者armlink就是連結C code與ARM code的指令
  U$ A6 f$ z% ]' N) t7 U$ v
- t6 g6 o0 i) w9 v# Z+ M另外有一個模擬工具ARMulator (現在也在RVDS裡面) 可以幫忙分析哪個指令被呼叫最多次 執行最多次等等! @1 I3 d+ L* k+ z$ e( e# e1 e, B2 R+ {
- i: R- N% {2 {+ \
用來幫助我們修改ARM code的架構達到運算上的最高效能
0 v8 n3 z; a3 }( t$ A+ D" }# m$ R' Q* W
, Q9 ~- W1 i' V' ~: t
野人獻曝般的提供一點點小資訊  還真的是獻醜了  
9 U$ y1 Y5 X! S7 [, E7 d6 X/ \# o# j+ x3 ~" Z( [. `0 J0 W
如果想要了解的朋友友一本書值得推薦 Arm system Developer's Guild
3 a6 e! a& J+ }9 x5 |, A6 ], \
  \  h1 S4 u9 \& O/ j' W其中第五章第六章是精華  討論如何轉換最有效率的格式  第五章從C的角度出發  第六章從ARM的角度出發. e  R. b" H7 u) M  p7 `( H

! ^: u: X6 m- i  j! I9 m
3 v8 L/ L$ Q' L2 ]最後想要請教一個問題目前正困擾著我  由於我需要轉檔得C++跑的是visual studio, 有些自定義的格式像是 __fastcall 或者 __int8 __int32
; x' d, ~1 N' \. e
4 I5 y* \% ?% {: k6 @/ n對於這樣的東西在用armcc compile的時候他會認不得然後回報錯誤: w( A6 Q3 P" t. K' D+ Q( e

6 G4 u5 ^  |0 m% u  L8 d想請問大家如果我要去哪裡(網路上或電腦裡)找到有定義 __fastcall的lib file或者headfile讓我在compile的時候可以included進去?
發表於 2010-9-27 14:34:08 | 顯示全部樓層
你所講的arm code應該是指arm的組語(組合語言)
( X% P0 H" V2 T不論是c或c++都能編譯成arm的code... @o@ c, c++也能編成i386的code...) z5 H0 ?' Z: p

5 Q* i: m6 K2 a8 n/ i我想你想說的是"有對應給arm用的c/c++ compiler工具可以使用" 可以讓你在異質的環境下(e.g. i386)去編譯出arm processor能跑的執行檔, 這叫cross compile, 這部份是大多數嵌入式發展會採用的模式
1 A! ^$ A: }1 K& D) L
- L9 }- d: @: D# X# A" Z5 C# y在同一project部份c 部份組語的作法是為了performance/code size考量
8 U( Z$ g& u) h( z3 |1 {
8 N/ Y! ]3 W7 q1 V9 q7 P+ m) f7 b你所講的ACD應該是指ADS; r7 v$ s( f# S' P

& |& I8 p/ [& q6 U/ q! l作性能分析的工具叫profiler, 一般軟體用的性能分析工具都是叫這名字
& p$ N# W4 ?  S' o) g( B* K8 b- Z! C3 Q
ARM原廠的tool不便宜, 也許你會想用GNU toolchain, 但兩者的語法及記憶體配置檔寫法有所差異# o) n) z( \6 ^4 f/ {
/ b" B* Z: |& E- s
你的問題可能要去翻翻看windows中的__fastcall是怎樣定義的, (去翻標頭檔), 這些type都是用最基本的int去定出來的"給人看的", 翻到最底層, 就會通過去了
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |才庫事業群

GMT+8, 2021-10-22 12:29 PM , Processed in 0.094006 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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