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绛夊钩鍙帮级銆