Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 8705|回復: 1
打印 上一主題 下一主題

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

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2010-9-16 18:37:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
老實說 作數位IC設計很難不去碰一些周圍的環境, o* z0 p. E6 r: M$ {
: w2 w( b7 Z; l8 V2 G, }+ R) Q/ Y
這次因為project的關係 有須要放進一顆ARM的IP 因此位了節省面積就把一些電路的功能用arm來取代& G; y. g( _' U5 ^

7 F8 l2 A$ D& ]- k; q0 L& F8 D因此莫名其妙的跟這塊嵌入式有關的地方有了一些觀連  O7 z8 _5 K4 H8 S
" Y. {0 Q! ?/ _& i0 g+ v: Z( e! h
在這邊分享一些目前學習到的心得與面臨到的問題
$ Q3 ?; n# [7 L2 }$ y# U. V7 b: B' n
首先不論是C++或者是C語言都是可以轉成ARM code的: h. e8 l% m' t$ r

+ e$ g. e; G' f$ k" l- t喔 講轉就不專業了  專業的要說可以"compile成"ARM code....  這部分是後話  暫且不表  ?) d' x: `5 u3 [

0 ^4 L1 ~% L- p% Z接下來的問題是  如果整個project裡面有一部分是C語言 另外一部分是arm code 這樣還可以compile嗎?! y9 b  ]4 G0 h$ g

1 [/ a& q, t1 I2 W答案也是可以的+ A5 @" F8 {5 f1 S
7 r( U5 x1 j; y* n/ T! P  }) C, Q
最後的問題是 C++ compile成了ARM code以後 我們怎麼去評估他的效能或者轉換的好不好呢?6 M* ?3 c7 _% l' I* n
/ f! G9 t% f! w
其實也有一些軟體能夠替我們做這樣的評估
8 C+ M/ m. O; M$ h8 b! V* V
6 H1 |( R2 _: Z: e, Q
" a& _$ s' e+ z; A9 j, n4 BARM本身有提供一套要付費的軟體  以前叫ACD  現在叫RVDS  就有提供以上幾種功能3 w; A; \& W6 p4 h
  e. f  b; s. V  R2 }3 |
比方armcc就是把C code給compile成arm code
# L$ y, o4 o% y$ B5 o) E0 {6 l7 M% U5 _+ b$ d! k
或者armlink就是連結C code與ARM code的指令, R5 i. @* f: y  @5 X6 I. P* ?0 M
- W; k: z# j( }% _  {% b
另外有一個模擬工具ARMulator (現在也在RVDS裡面) 可以幫忙分析哪個指令被呼叫最多次 執行最多次等等& }  H8 I3 c  ?* b. p: q. Z1 x

6 [9 U. t7 j4 }) ]( j* C; n用來幫助我們修改ARM code的架構達到運算上的最高效能
3 a9 w5 y# R, Q; w4 }" u
8 i  n) Z; X! l- M7 \. z' r2 V$ h9 s3 z0 t# y
野人獻曝般的提供一點點小資訊  還真的是獻醜了  
4 B' z7 h/ i( G' W1 x; v, @0 U/ |3 Z! D' `- V/ y
如果想要了解的朋友友一本書值得推薦 Arm system Developer's Guild
$ @, V4 O7 E: c
/ w/ Y6 w8 r1 ]2 G! M7 I" t/ a其中第五章第六章是精華  討論如何轉換最有效率的格式  第五章從C的角度出發  第六章從ARM的角度出發. v+ T6 H+ _% V- Q. |# C

- ~! r- r1 P% M/ q. e: G: H4 ^& U/ M6 f" M8 q8 a
最後想要請教一個問題目前正困擾著我  由於我需要轉檔得C++跑的是visual studio, 有些自定義的格式像是 __fastcall 或者 __int8 __int32
! Z, s1 g1 N7 ?1 @( Y
4 w2 |* D8 t; b3 L) j1 ^+ v! g5 b對於這樣的東西在用armcc compile的時候他會認不得然後回報錯誤
  i% i. A$ g" P4 f6 Q0 J( E. m7 w; {6 \+ t+ N) A) p
想請問大家如果我要去哪裡(網路上或電腦裡)找到有定義 __fastcall的lib file或者headfile讓我在compile的時候可以included進去?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂4 踩 分享分享
2#
發表於 2010-9-27 14:34:08 | 只看該作者
你所講的arm code應該是指arm的組語(組合語言)9 ^) o* ^1 Y2 y6 G' r- Z
不論是c或c++都能編譯成arm的code... @o@ c, c++也能編成i386的code...4 T8 P6 R# b5 P7 u, ?
& V, h1 g& E5 t3 C+ W
我想你想說的是"有對應給arm用的c/c++ compiler工具可以使用" 可以讓你在異質的環境下(e.g. i386)去編譯出arm processor能跑的執行檔, 這叫cross compile, 這部份是大多數嵌入式發展會採用的模式
; d$ H/ Q" k2 k' z8 r" I5 j& q
# ^" ^: y& @8 _( H) P, B9 }在同一project部份c 部份組語的作法是為了performance/code size考量
5 l. o+ H; X& J4 v% i7 ^! W6 \4 L" n# u$ z# B- S1 b
你所講的ACD應該是指ADS
, H2 ]9 `7 z5 t6 b* ?3 w, ^! S  {5 l, v2 U' I  T6 G8 J
作性能分析的工具叫profiler, 一般軟體用的性能分析工具都是叫這名字
% \6 _9 _; A0 D  y8 d( p1 Z5 {# Q% P5 f3 s6 {7 s; Z' I2 e3 i
ARM原廠的tool不便宜, 也許你會想用GNU toolchain, 但兩者的語法及記憶體配置檔寫法有所差異& `' n. L7 R, m# G

( b, n5 p- L6 N7 K6 W0 M& ~# o你的問題可能要去翻翻看windows中的__fastcall是怎樣定義的, (去翻標頭檔), 這些type都是用最基本的int去定出來的"給人看的", 翻到最底層, 就會通過去了
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-1-4 03:42 PM , Processed in 0.155009 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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