Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2010-9-16 18:37:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
老實說 作數位IC設計很難不去碰一些周圍的環境: I+ x# [2 _& G3 y) ]5 \+ c' m
  D/ P' ^/ s: i
這次因為project的關係 有須要放進一顆ARM的IP 因此位了節省面積就把一些電路的功能用arm來取代2 W; l+ Q2 }5 O7 @! ]- M4 i/ i; Z
0 n; X9 n4 C3 U
因此莫名其妙的跟這塊嵌入式有關的地方有了一些觀連
& V2 y8 H& j+ p+ D* B. g& W  Z! P# a/ h% O- y$ r4 I4 _- y
在這邊分享一些目前學習到的心得與面臨到的問題# v" H; K9 Z; n: T/ j+ Z
3 ]3 l  d, H+ i3 V
首先不論是C++或者是C語言都是可以轉成ARM code的
1 Z# [5 O# T! j5 R1 o
9 `* V8 _% P0 N; Y. X& t0 O喔 講轉就不專業了  專業的要說可以"compile成"ARM code....  這部分是後話  暫且不表8 T0 t* V, `8 g$ d

% k) {3 T2 K# y' `$ j接下來的問題是  如果整個project裡面有一部分是C語言 另外一部分是arm code 這樣還可以compile嗎?
/ D3 U0 f# [) X2 [4 |1 i; R# F3 T, O! j
答案也是可以的
) C9 b. K" F2 \4 O1 z: a8 |; h+ Z" n1 R- B
最後的問題是 C++ compile成了ARM code以後 我們怎麼去評估他的效能或者轉換的好不好呢?3 j  R& u! _: A1 H$ T
% r" M7 J% i9 g& Y, r, q8 f
其實也有一些軟體能夠替我們做這樣的評估
6 t& W, {5 c. ^3 _, A8 T6 J! Q
) l4 C# N8 V) P( \$ n" j4 n
6 N7 ]6 q& Q" U0 xARM本身有提供一套要付費的軟體  以前叫ACD  現在叫RVDS  就有提供以上幾種功能/ A: P6 Y* t' F3 \
; D8 }" r0 P0 C0 L, X/ H% x" G
比方armcc就是把C code給compile成arm code
* _- A2 H2 e$ Q$ l% v4 n# A: P) {  }- w5 K
或者armlink就是連結C code與ARM code的指令
- M4 u7 `; |6 p9 b3 F* E% R' [* b! W6 I' j! x; s
另外有一個模擬工具ARMulator (現在也在RVDS裡面) 可以幫忙分析哪個指令被呼叫最多次 執行最多次等等
. D" k9 l2 K2 I* O; h2 Y' U- w- K% s8 J
用來幫助我們修改ARM code的架構達到運算上的最高效能4 X3 w: w- Z: T9 O5 U# d

8 n8 M7 h: E& K! z& J6 }! V  o- d- V) p
野人獻曝般的提供一點點小資訊  還真的是獻醜了  % E& d: a& |1 W  G4 O

- _0 t  W" z, \! p8 f  W0 I如果想要了解的朋友友一本書值得推薦 Arm system Developer's Guild
' ~! B: V  C- e* ]' m2 G- a+ n' f, |9 m/ ~3 C1 H: N0 X8 I4 O/ D9 z
其中第五章第六章是精華  討論如何轉換最有效率的格式  第五章從C的角度出發  第六章從ARM的角度出發+ W0 |* H4 z" C  T3 u7 i

( V3 H  p8 A: ^6 v8 J/ }' m" S8 d% d+ g  s6 n
最後想要請教一個問題目前正困擾著我  由於我需要轉檔得C++跑的是visual studio, 有些自定義的格式像是 __fastcall 或者 __int8 __int32
; M, F; l0 ~8 k5 L
4 V0 q0 `, c; ]: f6 x2 M! F" r, p7 }8 t對於這樣的東西在用armcc compile的時候他會認不得然後回報錯誤7 g0 k9 u) Q. t4 R/ B8 H
' h- N' c0 M" @/ H* y9 l
想請問大家如果我要去哪裡(網路上或電腦裡)找到有定義 __fastcall的lib file或者headfile讓我在compile的時候可以included進去?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂4 踩 分享分享
2#
發表於 2010-9-27 14:34:08 | 只看該作者
你所講的arm code應該是指arm的組語(組合語言)
. \/ ?0 p; e6 X' `5 L7 |不論是c或c++都能編譯成arm的code... @o@ c, c++也能編成i386的code...
+ K% J& ?$ x' D- `. z8 C) w
' D; P( a* n1 Q7 B- Q我想你想說的是"有對應給arm用的c/c++ compiler工具可以使用" 可以讓你在異質的環境下(e.g. i386)去編譯出arm processor能跑的執行檔, 這叫cross compile, 這部份是大多數嵌入式發展會採用的模式% {; `  |& G+ ~" _4 V

( k- s+ v9 t+ Y& {1 e5 G  [2 m# i在同一project部份c 部份組語的作法是為了performance/code size考量
/ J$ ~! q( X/ F6 h9 o6 f9 S+ {6 w5 P" M* g  H
你所講的ACD應該是指ADS
9 P9 R: j& L" v$ r. W
' t# ?5 ^7 s+ t$ {7 y+ L作性能分析的工具叫profiler, 一般軟體用的性能分析工具都是叫這名字
$ T! _& s  J8 H, ^
% W! ]& L+ V, O/ P/ X* k2 kARM原廠的tool不便宜, 也許你會想用GNU toolchain, 但兩者的語法及記憶體配置檔寫法有所差異
5 b/ o: ~8 U. m5 J; V/ Q/ _6 @4 o8 `' d7 i7 X+ T* z+ N
你的問題可能要去翻翻看windows中的__fastcall是怎樣定義的, (去翻標頭檔), 這些type都是用最基本的int去定出來的"給人看的", 翻到最底層, 就會通過去了
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-4-28 10:55 PM , Processed in 0.103006 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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