Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 8171|回復: 1

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

  [複製鏈接]
發表於 2010-9-16 18:37:27 | 顯示全部樓層 |閱讀模式
老實說 作數位IC設計很難不去碰一些周圍的環境: Y. p4 d: y3 t8 C

% `3 b& w& p, s這次因為project的關係 有須要放進一顆ARM的IP 因此位了節省面積就把一些電路的功能用arm來取代
6 ?; l6 z1 s0 [( q4 }. `- z
' a; x$ o4 B- D# u7 e' D2 G7 `因此莫名其妙的跟這塊嵌入式有關的地方有了一些觀連
% I! g# v. _% G( m9 `% [& l! r3 u; x( X: C# q8 w( U7 C
在這邊分享一些目前學習到的心得與面臨到的問題
. B* l3 T  d% Q
* F, `" N" l! P; [; K4 M, a首先不論是C++或者是C語言都是可以轉成ARM code的7 e1 P1 d1 d& c  d( X* |# s

! ^: V5 D6 ^/ w2 e喔 講轉就不專業了  專業的要說可以"compile成"ARM code....  這部分是後話  暫且不表
3 s! L. d- h' j: D
0 Q- s: y9 A1 k# P$ v, p, Y接下來的問題是  如果整個project裡面有一部分是C語言 另外一部分是arm code 這樣還可以compile嗎?
$ q0 F3 U4 }4 ]' _& ^2 t
" k& }# Y5 l- D. L. J, W答案也是可以的
- d. _5 y0 X' B7 C; D2 v5 e8 ^! B) ?5 F! P
最後的問題是 C++ compile成了ARM code以後 我們怎麼去評估他的效能或者轉換的好不好呢?* T6 L' [9 O, a7 V
/ \6 F" G4 }0 e9 S* {) R
其實也有一些軟體能夠替我們做這樣的評估
% e* \1 P. V6 U" k3 N2 ?3 ]7 k7 Q4 k+ m) ]7 C: F8 i5 n
7 z( T  Z+ W3 L5 x% Z+ }
ARM本身有提供一套要付費的軟體  以前叫ACD  現在叫RVDS  就有提供以上幾種功能
2 {( N, C- H$ k  k
* q( Y. X' k8 X  V比方armcc就是把C code給compile成arm code1 O' s: [# E2 J9 z: ?
' G% N/ D* i5 {& a. ^, P
或者armlink就是連結C code與ARM code的指令
. c( G) s9 f4 i5 \- K! g' t3 O( ?! C9 o  w
另外有一個模擬工具ARMulator (現在也在RVDS裡面) 可以幫忙分析哪個指令被呼叫最多次 執行最多次等等8 R' M+ }4 D% j% Y

, T7 Z8 D3 t; f9 L用來幫助我們修改ARM code的架構達到運算上的最高效能+ H3 D2 g  x4 K2 g! M+ {

$ [5 q' c# s6 S% v  k+ D) u1 L1 g6 X
野人獻曝般的提供一點點小資訊  還真的是獻醜了  3 e# N' ~! [8 P( v
% R. i! r* j+ {  \! r: b
如果想要了解的朋友友一本書值得推薦 Arm system Developer's Guild# T! G: o7 F$ j& \- ?
* t$ o* V/ L9 h% [
其中第五章第六章是精華  討論如何轉換最有效率的格式  第五章從C的角度出發  第六章從ARM的角度出發. O1 b4 i* \/ ~, R  \# ~

( H2 {( |2 s8 u5 S  L3 w
8 H  {  w, A- t6 f& c: |最後想要請教一個問題目前正困擾著我  由於我需要轉檔得C++跑的是visual studio, 有些自定義的格式像是 __fastcall 或者 __int8 __int321 w' W+ t; Q9 W( A2 f& l: M/ z" `% x0 s

, e- _! d" t' Q6 X/ u' q" C對於這樣的東西在用armcc compile的時候他會認不得然後回報錯誤# U5 g* s, t6 v( d. O9 d
, {: i! V- d6 g. V: |! j3 o
想請問大家如果我要去哪裡(網路上或電腦裡)找到有定義 __fastcall的lib file或者headfile讓我在compile的時候可以included進去?
發表於 2010-9-27 14:34:08 | 顯示全部樓層
你所講的arm code應該是指arm的組語(組合語言). V- ^2 T# q2 J
不論是c或c++都能編譯成arm的code... @o@ c, c++也能編成i386的code...9 Y8 d- b0 |( L
. N) E0 O% q7 K% _4 E
我想你想說的是"有對應給arm用的c/c++ compiler工具可以使用" 可以讓你在異質的環境下(e.g. i386)去編譯出arm processor能跑的執行檔, 這叫cross compile, 這部份是大多數嵌入式發展會採用的模式
) f0 c5 W) `, Z7 J3 c6 `
% G9 u+ k& d) P; b* l在同一project部份c 部份組語的作法是為了performance/code size考量
, O9 F6 W* p5 L1 M
2 T% _: [1 X% V7 U& h1 W7 q你所講的ACD應該是指ADS
" K" P4 i+ _* Q: g* [  W' |" l% q4 u6 ^
作性能分析的工具叫profiler, 一般軟體用的性能分析工具都是叫這名字
3 L( W, U. b) R2 C5 u& E# |1 C; D% p+ L% Y7 W4 ?
ARM原廠的tool不便宜, 也許你會想用GNU toolchain, 但兩者的語法及記憶體配置檔寫法有所差異9 ?1 P0 q# a$ X
- v$ @9 w6 _% s0 b; ~
你的問題可能要去翻翻看windows中的__fastcall是怎樣定義的, (去翻標頭檔), 這些type都是用最基本的int去定出來的"給人看的", 翻到最底層, 就會通過去了
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-3-29 03:47 PM , Processed in 0.109006 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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