Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2010-9-16 18:37:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
老實說 作數位IC設計很難不去碰一些周圍的環境1 k# q7 i' l( [9 `6 Z% c
3 S" ~+ A; [+ L. s
這次因為project的關係 有須要放進一顆ARM的IP 因此位了節省面積就把一些電路的功能用arm來取代
" a& x  @( Z$ X, p8 F; Y; U+ U* W/ @$ {
因此莫名其妙的跟這塊嵌入式有關的地方有了一些觀連
& ^# L# q$ F3 V/ f" p7 O  F0 w7 \0 b1 D; D
在這邊分享一些目前學習到的心得與面臨到的問題
- R+ J" r6 V, B, D( M  N$ p/ Z* [" t0 \/ J' N4 y/ c) S
首先不論是C++或者是C語言都是可以轉成ARM code的
; [) C: x2 o) G5 M# W5 g/ a3 U3 X9 J7 R; S' e  _6 A  x
喔 講轉就不專業了  專業的要說可以"compile成"ARM code....  這部分是後話  暫且不表
" y! z* O; A* V( F
& c6 ~! r; j, k4 I% ]  l3 A* l5 v接下來的問題是  如果整個project裡面有一部分是C語言 另外一部分是arm code 這樣還可以compile嗎?
# r- P0 Q; C( `- @2 v6 }+ v# d. A5 ]" W) S; C
答案也是可以的
8 d% i  e1 f* d$ Z8 Z
- o" L0 k+ l. W: U最後的問題是 C++ compile成了ARM code以後 我們怎麼去評估他的效能或者轉換的好不好呢?; D5 Z# i% N: N* G3 Z2 z( L

/ Q1 z7 u: t; B, r! a# p, V1 y5 p其實也有一些軟體能夠替我們做這樣的評估
, z+ T, r/ E: L2 j7 h
4 I% p- Q! m1 ?2 e6 m
2 N/ O4 O  `: EARM本身有提供一套要付費的軟體  以前叫ACD  現在叫RVDS  就有提供以上幾種功能# {. }* ?2 g( q5 T/ n1 d' u
; d' y  |* {4 F
比方armcc就是把C code給compile成arm code
/ q& P: b$ Z" U( ^7 s. k$ d2 Q5 ^; u8 P& q) O4 c& E
或者armlink就是連結C code與ARM code的指令
2 R4 N8 e1 s' d3 k; M8 H, T+ a" w1 j7 ~' @# E' ]) `; S8 Y0 K
另外有一個模擬工具ARMulator (現在也在RVDS裡面) 可以幫忙分析哪個指令被呼叫最多次 執行最多次等等- A" I1 n" ^; f# C2 ^% }
: B* Y8 N  ~- Q& W4 F" ~. M
用來幫助我們修改ARM code的架構達到運算上的最高效能% s& \# |* z- P% _, Z

) A1 D3 }$ t+ [8 d: ~! a, z6 C6 Y" T% C# i& c% s5 F
野人獻曝般的提供一點點小資訊  還真的是獻醜了  
; D& h( b% Y5 P' {2 k: V* e* p! [+ @# k6 d" [- o
如果想要了解的朋友友一本書值得推薦 Arm system Developer's Guild
5 i( p# C- t! V* U) O9 P' D
3 A% V: M4 _# s+ x1 B8 f其中第五章第六章是精華  討論如何轉換最有效率的格式  第五章從C的角度出發  第六章從ARM的角度出發
' X- }, [9 ]' p$ ~! O2 ]
) K7 P, ^8 J6 ?, T/ n3 h; {" B
0 v" s2 w7 f2 n: u! j# P* z最後想要請教一個問題目前正困擾著我  由於我需要轉檔得C++跑的是visual studio, 有些自定義的格式像是 __fastcall 或者 __int8 __int323 E! s& {& z/ T. W# \5 R9 T

! }' @0 G+ _$ R" I  D對於這樣的東西在用armcc compile的時候他會認不得然後回報錯誤% A: K( O. k: @( t. ^. B+ N' t3 B/ j

: J+ P- e* Q  s4 I' R% J* e想請問大家如果我要去哪裡(網路上或電腦裡)找到有定義 __fastcall的lib file或者headfile讓我在compile的時候可以included進去?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂4 踩 分享分享
2#
發表於 2010-9-27 14:34:08 | 只看該作者
你所講的arm code應該是指arm的組語(組合語言)
  z. ?! `% V0 k. `6 r" {. ^不論是c或c++都能編譯成arm的code... @o@ c, c++也能編成i386的code...: `! L# H# z6 R  M
. ~7 b" E4 B5 I7 w9 `5 n
我想你想說的是"有對應給arm用的c/c++ compiler工具可以使用" 可以讓你在異質的環境下(e.g. i386)去編譯出arm processor能跑的執行檔, 這叫cross compile, 這部份是大多數嵌入式發展會採用的模式
' c) B6 V4 D- T4 d# Z% S" _
  b, X' a$ s% s在同一project部份c 部份組語的作法是為了performance/code size考量; b8 e+ v: E7 ~' Z2 j: p
; \  c6 o/ _$ G; d' o
你所講的ACD應該是指ADS
- l$ l+ ^* C% P2 k, _$ f/ \6 [$ o) C$ N. O# H' C5 ?
作性能分析的工具叫profiler, 一般軟體用的性能分析工具都是叫這名字) ?  J, C8 k% a3 d( Z" E

- |$ t; l/ L" s8 l1 TARM原廠的tool不便宜, 也許你會想用GNU toolchain, 但兩者的語法及記憶體配置檔寫法有所差異3 H" V1 S+ N8 Q. h* @! C4 n
" U6 Z& v* x! {' z+ w" L+ P+ w
你的問題可能要去翻翻看windows中的__fastcall是怎樣定義的, (去翻標頭檔), 這些type都是用最基本的int去定出來的"給人看的", 翻到最底層, 就會通過去了
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-4-26 06:36 PM , Processed in 0.118007 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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