Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2010-9-16 18:37:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
老實說 作數位IC設計很難不去碰一些周圍的環境; e6 f" f0 w4 V# |; V; N: G  L

' u, |: {, Z- [( P, `' }. l+ W這次因為project的關係 有須要放進一顆ARM的IP 因此位了節省面積就把一些電路的功能用arm來取代7 K% e6 Z% x% ~; `; u, S% P
) h* B1 R+ I2 m& _9 M) f1 R
因此莫名其妙的跟這塊嵌入式有關的地方有了一些觀連! w7 v' f, B9 X/ ^2 A  ]& V, ^
6 V9 m: ~1 E% i9 M( N  B
在這邊分享一些目前學習到的心得與面臨到的問題
# y, q! z, O' d8 l+ c8 }2 s  Y
0 }: j" O' ~3 V7 T- x) y首先不論是C++或者是C語言都是可以轉成ARM code的
+ g) Z- i# O% u! Z' b: _8 Z$ n. k' ]4 |7 s/ `" w( [
喔 講轉就不專業了  專業的要說可以"compile成"ARM code....  這部分是後話  暫且不表  _& d# P) b3 ^! I" \4 ~

, L; G/ s' S8 X接下來的問題是  如果整個project裡面有一部分是C語言 另外一部分是arm code 這樣還可以compile嗎?
* B" O# K: W, `0 x0 o
& E4 L! V6 g; z答案也是可以的. y& v/ }5 D' v2 u( Q- [" q
$ Q9 P1 |! \9 \; }0 ]! ?4 I
最後的問題是 C++ compile成了ARM code以後 我們怎麼去評估他的效能或者轉換的好不好呢?
  @9 ]# d0 a8 N7 T( G' U) ]5 T( O( L: @( o" E
其實也有一些軟體能夠替我們做這樣的評估+ ]9 H4 {! w5 ?9 ~* ^- j
- C* L7 o; Q* L5 E
  ~7 W% p$ m/ \/ E/ d
ARM本身有提供一套要付費的軟體  以前叫ACD  現在叫RVDS  就有提供以上幾種功能  y' a, |6 v6 p$ m

: f  ^! J6 k+ }* c' D+ d/ e比方armcc就是把C code給compile成arm code
. R: L0 a1 d: |/ m
! W( }% v& \- X+ {9 `: n或者armlink就是連結C code與ARM code的指令" W& P2 W( k+ N& h, {' T9 s! `

, N8 ]+ I4 L+ w  V" e2 \另外有一個模擬工具ARMulator (現在也在RVDS裡面) 可以幫忙分析哪個指令被呼叫最多次 執行最多次等等
" O4 c. C& C9 ?. T+ b% L9 \0 E1 M
/ B, {+ I7 Y2 L: Y( x0 e用來幫助我們修改ARM code的架構達到運算上的最高效能# L! W9 v$ M) F' p9 J
! J. [, t) t) D6 R  m7 U/ d& e

- I( h" d% x3 p6 o% `" Q野人獻曝般的提供一點點小資訊  還真的是獻醜了  
" _  H% |7 r3 [7 t% o" \$ w  D& u0 G& V9 `* t& t. d9 b
如果想要了解的朋友友一本書值得推薦 Arm system Developer's Guild: k. ?. Z. d& `/ D; q8 \, S" z# J

. z* q, g/ ?5 ]% s: I/ f; q其中第五章第六章是精華  討論如何轉換最有效率的格式  第五章從C的角度出發  第六章從ARM的角度出發
5 |& c/ M) H+ h: ^# J! |2 A2 c( x( \
7 }5 T# i3 G; B4 k0 v
$ N+ R1 a7 `. F9 P$ j7 p( K最後想要請教一個問題目前正困擾著我  由於我需要轉檔得C++跑的是visual studio, 有些自定義的格式像是 __fastcall 或者 __int8 __int32
$ g6 _# b; G$ L- z- A
# v1 _$ A. h% T對於這樣的東西在用armcc compile的時候他會認不得然後回報錯誤$ N3 c* z6 f. k+ P, W

! n, V3 ^5 y* W& G1 T9 _  p想請問大家如果我要去哪裡(網路上或電腦裡)找到有定義 __fastcall的lib file或者headfile讓我在compile的時候可以included進去?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂4 踩 分享分享
2#
發表於 2010-9-27 14:34:08 | 只看該作者
你所講的arm code應該是指arm的組語(組合語言)
0 k% ]+ z& k  {# J9 O- |+ V不論是c或c++都能編譯成arm的code... @o@ c, c++也能編成i386的code...
" N7 r% w1 n5 [+ q# T6 J/ b1 q0 K+ p0 p3 {; b
我想你想說的是"有對應給arm用的c/c++ compiler工具可以使用" 可以讓你在異質的環境下(e.g. i386)去編譯出arm processor能跑的執行檔, 這叫cross compile, 這部份是大多數嵌入式發展會採用的模式2 m  b) X+ ]$ W+ o8 s! {3 V6 V+ |
8 ~, G0 t% w6 _) W
在同一project部份c 部份組語的作法是為了performance/code size考量
, @% f4 f0 E* x
& S3 t0 T' I5 c- w8 q你所講的ACD應該是指ADS
; _6 S) N( f7 ]5 I( S% Q" k+ ^+ z0 m! g3 W' W4 k
作性能分析的工具叫profiler, 一般軟體用的性能分析工具都是叫這名字3 F3 A# Y7 u- z9 i" [& ]7 ]

9 \8 S8 ~$ P( V7 `ARM原廠的tool不便宜, 也許你會想用GNU toolchain, 但兩者的語法及記憶體配置檔寫法有所差異
" H' [+ ]4 ]& W0 x! ]3 @0 t, G- S$ p/ x& ]9 Y- v
你的問題可能要去翻翻看windows中的__fastcall是怎樣定義的, (去翻標頭檔), 這些type都是用最基本的int去定出來的"給人看的", 翻到最底層, 就會通過去了
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-11-11 03:44 AM , Processed in 0.170010 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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