Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2010-9-16 18:37:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
老實說 作數位IC設計很難不去碰一些周圍的環境
% n4 E9 a$ Q6 U# G, @4 u
' \4 X6 a3 a8 i2 X( z# n' u' s9 O6 V( y這次因為project的關係 有須要放進一顆ARM的IP 因此位了節省面積就把一些電路的功能用arm來取代
1 T5 W7 g( k3 d% _  ]
1 w7 C6 o" [3 V0 [1 T' j- E+ u因此莫名其妙的跟這塊嵌入式有關的地方有了一些觀連4 }& e$ h" C: Q: G- E0 x  g
4 S$ B" P! Q, Y7 I$ n0 X2 o5 {# r
在這邊分享一些目前學習到的心得與面臨到的問題# O' n5 o& K- A3 D- C# N4 Y
+ K9 I+ |, r# Q1 U& H& D0 a. v' `9 n4 N  [
首先不論是C++或者是C語言都是可以轉成ARM code的0 q( @3 A$ Y9 _2 u, X& {2 H  b

0 l( f0 ~; |- F9 e+ [# _1 _喔 講轉就不專業了  專業的要說可以"compile成"ARM code....  這部分是後話  暫且不表2 S. e# F5 A9 b) [  p( V
# P7 z4 ]' ?9 D5 I
接下來的問題是  如果整個project裡面有一部分是C語言 另外一部分是arm code 這樣還可以compile嗎?4 `% a2 S" b' v8 r9 d

) U1 B3 c! i, v5 J9 _" J/ A答案也是可以的5 h# n9 z: l4 j) C& X4 i/ B) T) r

- @  P2 y/ q. p% c/ S: J5 k最後的問題是 C++ compile成了ARM code以後 我們怎麼去評估他的效能或者轉換的好不好呢?
& h  D" p' v7 z: ]9 n% _
. b% N- [9 |8 r7 i' ]. W其實也有一些軟體能夠替我們做這樣的評估
. ~0 e4 b% z- F2 i( v* [6 [4 v
# Q* g$ \1 O* E5 I
  \: n+ g: u, R9 y4 b+ DARM本身有提供一套要付費的軟體  以前叫ACD  現在叫RVDS  就有提供以上幾種功能8 N! q6 L+ h7 Q
, `% s- i6 }9 _2 {' a: d
比方armcc就是把C code給compile成arm code- S& }+ X% y" c& i
7 @; q3 l2 c  k$ ~
或者armlink就是連結C code與ARM code的指令
; u' M6 O0 O2 l7 ~; Q/ u1 b' H/ c
& }/ U& u3 K6 y5 p8 n6 p0 Q/ Y另外有一個模擬工具ARMulator (現在也在RVDS裡面) 可以幫忙分析哪個指令被呼叫最多次 執行最多次等等5 W6 a" N* i8 {5 r* s9 b
! g8 o% ^- X3 v
用來幫助我們修改ARM code的架構達到運算上的最高效能! t# Q# A! h) R2 Y5 L8 |% m0 M8 {
. T" c4 r& X6 _& \

" b; z3 @3 E* ^0 V% a# K野人獻曝般的提供一點點小資訊  還真的是獻醜了  
# g2 X$ O/ ?9 D! J4 f. U! t) R2 u" X3 q0 a  Z7 T
如果想要了解的朋友友一本書值得推薦 Arm system Developer's Guild
' q/ k+ K! B. h" ^+ C  c. t% V8 d, N$ r
其中第五章第六章是精華  討論如何轉換最有效率的格式  第五章從C的角度出發  第六章從ARM的角度出發
3 i0 T8 X0 D3 z( p* Z! P3 z/ h1 i3 n! D1 E

3 J7 i3 }2 ]+ ^+ d: `最後想要請教一個問題目前正困擾著我  由於我需要轉檔得C++跑的是visual studio, 有些自定義的格式像是 __fastcall 或者 __int8 __int32
9 z: G0 R- |) n0 }
# D! }+ W5 J0 ^! p' w3 ~1 B對於這樣的東西在用armcc compile的時候他會認不得然後回報錯誤
3 f2 B7 w9 B7 R! D0 Z8 i
. @: ?1 C: X6 K8 B! ?5 q想請問大家如果我要去哪裡(網路上或電腦裡)找到有定義 __fastcall的lib file或者headfile讓我在compile的時候可以included進去?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂4 踩 分享分享
2#
發表於 2010-9-27 14:34:08 | 只看該作者
你所講的arm code應該是指arm的組語(組合語言)
4 v' J' j" w0 H6 e9 c' @/ `) b8 M0 o1 q不論是c或c++都能編譯成arm的code... @o@ c, c++也能編成i386的code...
* g# @8 ?1 X; S: P+ b# g( v" K( n
我想你想說的是"有對應給arm用的c/c++ compiler工具可以使用" 可以讓你在異質的環境下(e.g. i386)去編譯出arm processor能跑的執行檔, 這叫cross compile, 這部份是大多數嵌入式發展會採用的模式5 A) V6 l6 L) z2 ~* [/ e
! I2 T, I/ e' B/ y& F3 y
在同一project部份c 部份組語的作法是為了performance/code size考量
$ @, m9 X$ c2 ~& A0 C; ?" n2 y# d6 K/ U( F9 B4 @! v
你所講的ACD應該是指ADS
. \# }2 H! p, a! G0 H! a. k+ k$ D2 R/ ~1 i/ P8 k% Z' n$ l
作性能分析的工具叫profiler, 一般軟體用的性能分析工具都是叫這名字
6 u$ `0 H) ]$ `
' m  ^6 N9 t4 \, qARM原廠的tool不便宜, 也許你會想用GNU toolchain, 但兩者的語法及記憶體配置檔寫法有所差異: }; c+ _1 H# }6 ?+ P6 |3 y, b% N

6 U7 R0 }1 k( m$ g你的問題可能要去翻翻看windows中的__fastcall是怎樣定義的, (去翻標頭檔), 這些type都是用最基本的int去定出來的"給人看的", 翻到最底層, 就會通過去了
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-16 03:42 AM , Processed in 0.112014 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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