androidspi
1. android導航核心板硬體包括哪些
一、硬體介紹
1、處理器:Samsung S3C6410,ARM1176JZF-S內核,主頻533MHz/667MHz
2、128M Bytes mDDR RAM,由兩片64M低功耗mobile DDR組成
3、256M Bytes NAND Flash
4、2M Bytes NOR FLASH
5、一個100Mbps乙太網介面,網口晶元為DM9000AE
6、一個USB HOST介面
7、一個USB Device介面
8、一個AC97介面,音頻晶元為WM9714
9、兩個高速SD卡介面,其中一個支持8位模式
10、四個串口,通過撥碼開關可選擇RS232電平或TTL電平,其中兩個以DB9介面引出, 另外兩個通過一個20pin介面引出,方便用戶擴展UART介面模塊
11、兩個LCD介面,包含4線觸摸屏信號和LCD控制器的所有信號,其中一個是雙排插針介面,另外一個是FPC介面
12、一個VGA介面
13、一個TV OUT介面
14、一個S-VIDEO介面
15、一個RTC實時時鍾
16、兩個攝像頭介面,其中一個是雙排插針介面,另外一個是FPC介面
17、一個50pin數據、地址匯流排介面
18、一個10pin A/D輸入介面
19、兩個20pin SPI介面,方便用戶擴展SPI介面的WI-FI,DTV等各種模塊
20、一個50pin GPIO介面,引出剩餘所有I/O信號
21、一個20pin 標准JTAG介面
22、四個用戶LED
23、六個用戶按鍵
24、一個復位按鍵
25、一個電源開關
26、一個12V電源介面
UT-S3C6410開發板支持WinCE6.0 R2/R3和Linux2.6.28、Ubuntu9.04、Android操作系統
2. 鏍戣帗媧捐呭畨鍗撴祦鐣呭悧鏍戣帗媧捐呭畨鍗
瀹夊崜鎵嬫満鎬庝箞鍋氭爲鑾撴淳鏄劇ず鍣錛
闄勪歡鏄鏍戣帗媧炬澘瀛愮殑鎺ュ彛瀹氫箟璧勬枡錛屽彲浠ラ夋嫨涓涓鏀鎸丼PI閫氳鎺ュ彛鐨凮LED灞忥紝榪炴帴鍦ㄦ爲鑾撴淳鏉垮瓙涓婏紝閫氳繃SPI瀹炵幇涓嬫寚浠ゃ佸啓鏁版嵁銆傛敞鎰忥細
1銆丱LED鏄劇ず灞忛渶鏀鎸丼PI鎺ュ彛錛孫LED鏄劇ず灞弒pec鍙浠ヨ仈緋誨崠鏂規彁渚涳紱
2銆佽嚜宸卞姩鎵嬭繛鎺OLED灞忥紝鍙傝僺pec涓婇潰鐨勬帴鍙e畾涔夎繛鎺ワ紝娉ㄦ剰OLED鐨勯┍鍔ㄧ數鍘/鐢墊祦/鏃跺簭閫昏緫鐢佃礬絳夛紱
3銆佸啓椹卞姩紼嬪簭鍙傝僺pec錛屾寚浠ゃ佹暟鎹鍙傝僌LED灞忓箷椹卞姩IC璧勬枡銆
寰堟姳姝夛紝鑰呬笂浼犵殑闄勪歡宸插け鏁
鐢ㄥ畨鍗撴墜鏈哄彲浠ュ仛鏈嶅姟鍣ㄥ悧錛
寤鴻璇曡瘯鎴戜滑鎺ㄥ嚭浜嗚姳鐢熷3forAndroid鐗堟湰錛岃╁畨鍗撴墜鏈哄彉涓鴻兘鏀捐繘瑁ゅ厹鐨勭Щ鍔ㄦ湇鍔″櫒銆
鍙闇瑕佸湪瀹樼綉鍏嶈垂涓嬭澆瀹夎咃紝灝卞彲浠ヨ╁畨鍗撴墜鏈哄疄鐜板唴緗戠┛閫忓姛鑳斤紝灝嗗矓鍩熺綉涓鐨勮懼囨槧灝勫埌浜掕仈緗戙
閭d箞鑺辯敓澹沖畨鍗撶増濡備綍浣跨敤錛
鑺辯敓澹沖畨鍗撶増鏄閽堝瑰畨鍗撳鉤鍙板紑鍙戠殑鐗堟湰錛屼笌Windows銆丩inux銆佹爲鑾撴淳絳夊叾浠栧鉤鍙扮増鏈涓鏍烽兘鑳藉疄鐜板唴緗戠┛閫忕殑鍔熻兘銆
鍏堥氳繃鑺辯敓澹崇$悊APP鎴朠C絝鐨勮姳鐢熷3銆傚皢闇瑕佽懼囩殑IP銆佺鍙d笌鑺辯敓澹蟲彁渚涚殑鍏嶈垂澶栫綉璁塊棶鍦板潃緇戝畾鍦ㄤ竴璧峰嵆鍙銆
鐒跺悗鍙闇瑕佸畨瑁呰姳鐢熷3APP錛岀櫥闄嗙浉鍚岃處鍙峰嵆鍙銆傝繖鏍峰氨鍙浠ヨ交鏉劇殑瀹炵幇榪滅▼浜掕仈緗戣繙紼嬭塊棶灞鍩熺綉璁懼囥
瀹夎呭湪鎵嬫満涓婂悗灝辨槸鍙浠ュ仛鍒拌姳鐢熷3鐩掑瓙鑳藉疄鐜扮殑鍔熻兘錛岃繙紼嬭塊棶NAS鎼寤虹佹湁浜戙佹惌寤哄姙鍏緋葷粺銆佽嗛戠洃鎺с佺綉絝欍佸崥瀹銆佽哄潧銆丗TP銆丼VN鏈嶅姟鍣ㄣ
3. 如何分析解決Android ANR
1:UI線程盡量只做跟UI相關的工作
2:耗時的工作(比如資料庫操作,I/O,連接網路或者別的有可能阻礙UI線程的操作)把它放入單獨的線程處理
3:盡量用Handler來處理UIthread和別的thread之間的交互
如何調查並解決ANR
1:首先分析log
2: 從trace.txt文件查看調用stack.
3: 看代碼
4:仔細查看ANR的成因(iowait?block?memoryleak?)
分析ANR
先看個LOG:
04-01 13:12:11.572 I/InputDispatcher( 220): Application is not responding:Window{2b263310com.android.email/com.android.email.activity.SplitScreenActivitypaused=false}. 5009.8ms since event, 5009.5ms since waitstarted
04-0113:12:11.572 I/WindowManager( 220): Input event dispatching timedout sending tocom.android.email/com.android.email.activity.SplitScreenActivity
04-01 13:12:14.123 I/Process( 220): Sending signal. PID: 21404 SIG: 3---發生ANR的時間和生成trace.txt的時間
04-01 13:12:14.123 I/dalvikvm(21404):threadid=4: reacting to signal 3
……
04-0113:12:15.872 E/ActivityManager( 220): ANR in com.android.email(com.android.email/.activity.SplitScreenActivity)
04-0113:12:15.872 E/ActivityManager( 220): Reason:keyDispatchingTimedOut
04-0113:12:15.872 E/ActivityManager( 220): Load: 8.68 / 8.37 / 8.53
04-0113:12:15.872 E/ActivityManager( 220): CPUusage from 4361ms to 699ms ago ----CPU在ANR發生前的使用情況
04-0113:12:15.872 E/ActivityManager( 220): 5.5%21404/com.android.email: 1.3% user + 4.1% kernel / faults: 10 minor
04-0113:12:15.872 E/ActivityManager( 220): 4.3%220/system_server: 2.7% user + 1.5% kernel / faults: 11 minor 2 major
04-0113:12:15.872 E/ActivityManager( 220): 0.9%52/spi_qsd.0: 0% user + 0.9% kernel
04-0113:12:15.872 E/ActivityManager( 220): 0.5%65/irq/170-cyttsp-: 0% user + 0.5% kernel
04-0113:12:15.872 E/ActivityManager( 220): 0.5%296/com.android.systemui: 0.5% user + 0% kernel
04-0113:12:15.872 E/ActivityManager( 220): 100%TOTAL: 4.8% user + 7.6% kernel + 87% iowait
04-0113:12:15.872 E/ActivityManager( 220): CPUusage from 3697ms to 4223ms later:-- ANR後CPU的使用量
04-0113:12:15.872 E/ActivityManager( 220): 25%21404/com.android.email: 25% user + 0% kernel / faults: 191 minor
04-0113:12:15.872 E/ActivityManager( 220): 16% 21603/__eas(par.hakan: 16% user + 0% kernel
04-0113:12:15.872 E/ActivityManager( 220): 7.2% 21406/GC: 7.2% user + 0% kernel
04-0113:12:15.872 E/ActivityManager( 220): 1.8% 21409/Compiler: 1.8% user + 0% kernel
04-0113:12:15.872 E/ActivityManager( 220): 5.5%220/system_server: 0% user + 5.5% kernel / faults: 1 minor
04-0113:12:15.872 E/ActivityManager( 220): 5.5% 263/InputDispatcher: 0% user + 5.5% kernel
04-0113:12:15.872 E/ActivityManager( 220): 32%TOTAL: 28% user + 3.7% kernel
從LOG可以看出ANR的類型,CPU的使用情況,如果CPU使用量接近100%,說明當前設備很忙,有可能是CPU飢餓導致了ANR
如果CPU使用量很少,說明主線程被BLOCK了
如果IOwait很高,說明ANR有可能是主線程在進行I/O操作造成的
除了看LOG,解決ANR還得需要trace.txt文件,
如何獲取呢?可以用如下命令獲取
$chmod 777 /data/anr
$rm /data/anr/traces.txt
$ps
$kill -3 PID
adbpull data/anr/traces.txt ./mytraces.txt
從trace.txt文件,看到最多的是如下的信息:
-----pid 21404 at 2011-04-01 13:12:14 -----
Cmdline: com.android.email
DALVIK THREADS:
(mutexes: tll=0tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)
"main" prio=5 tid=1NATIVE
| group="main" sCount=1 dsCount=0obj=0x2aad2248 self=0xcf70
| sysTid=21404 nice=0 sched=0/0cgrp=[fopen-error:2] handle=1876218976
atandroid.os.MessageQueue.nativePollOnce(Native Method)
atandroid.os.MessageQueue.next(MessageQueue.java:119)
atandroid.os.Looper.loop(Looper.java:110)
at android.app.ActivityThread.main(ActivityThread.java:3688)
at java.lang.reflect.Method.invokeNative(Native Method)
atjava.lang.reflect.Method.invoke(Method.java:507)
atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
at dalvik.system.NativeStart.main(Native Method)
說明主線程在等待下條消息進入消息隊列
4. 璇鋒暀椋炲噷宸ョ▼甯堝叧浜嶴PI鐨勯棶棰樺伐紼嬪笀錛屾帴鍙android
SPI鐨勫姛鑳藉氨鏄媯嫻嬬殑銆傛兂蹇呭厛鐢熺煡閬撶敓浜х嚎鍚э紝SMT鐨勬剰鎬濆氨鏄琛ㄩ潰璐磋呮妧鏈錛孲MT綰跨殑絎涓絝欏氨鏄閿¤啅鍗板埛鏈猴紱鈥楧EK鈥欑浜岀珯灝辨槸鐐硅兌鏈恆傜涓夌珯灝辨槸鎴戜滑璇寸殑SPI鈥橀敗鑶忔鏌ユ満鈥欎笅鏉ュ氨鏄疌M402灝辨槸楂橀熸満錛屽湪瀹舵槸鍥炵剨鐐夈侫OI銆
SPI鐨勫叿浣撳姛鑳藉氨鏄媯嫻嬮敗鑶忕殑鍗板埛鍏蜂綋鎯呭喌錛屼緥濡傛湁鐨勫湴鏂硅佸嵃鍒烽敗鑶忎絾瀹為檯鎯呭喌鏄娌℃湁閿¤啅銆傛垜浠琒PI鐨勫姛鑳藉氨鏄鎶婁笉鑹鍝佸崱鍦ㄩ偅錛屼笉瑕佹祦鍒頒笅涓絝欙紝浠ュ厤閫犳垚涓嶅繀瑕佺殑鎹熷け銆
鑰孲PI鐨勫伐紼嬪笀灝辨槸鎼炲埗鎴愮殑銆傝繕鏈夌▼寮忋傚儚鍏朵粬鐨勫紓甯稿勭悊灝辯敱鎶鏈鍛樺勭悊浜嗐
5. 瀹夊崜騫沖彴娣誨姞SPI緗戝崱DM9051NP錛屽叿浣撳備綍鎿嶄綔錛
DM9051NP SPI鎺ュ彛緗戝崱鑺鐗囨槸涓烘柟渚縈CU鍗曠墖鏈虹郴緇熷炲姞浠ュお緗戦氫俊鑰屽紑鍙戝嚭鐨勮В鍐蟲柟妗堛侱M9051NP鑺鐗囨槸甯︽湁行涓氭爣鍑串列澶栬炬帴鍙o紙Serial Peripheral Interface錛孲PI錛夌殑鐙立浠ュお緗戞帶鍒跺櫒銆侱M9051NP絎﹀悎IEEE 802.3 瑙勮寖錛屽畠榪樻敮鎸佷互DMA 妯″紡來浼犺緭錛屼互瀹炵幇璧料浼犻佸揩閫熴侱M9051NP閫氳繃1涓涓鏂寮曡剼鍜孲PI鎺ュ彛來榪行涓庝富鎺у埗鍣/MCU鍗曠墖鏈虹殑閫氫俊錛岃祫料浼犺緭瑙勬牸涓10/100 M銆 鎴戜嬌鐢ㄨ繃榪欐捐姱鐗囷紝鏈塪emo紼嬪簭錛屽彲浠ョ洿鎺ョЩ妞嶏紝鏂逛究寮鍙戱紙鍩轟簬鑺鍞怣451錛孲T32F103錛孧TK絳夊鉤鍙幫級銆