ARM WinCE5 0 暫存器讀寫工具

2021-09-05 19:50:06 字數 1078 閱讀 6998

「誰動了我的gpio」,我想很多做嵌入式開發的同行可能也碰到過類似的問題:硬體沒有按照設計的程式工作,好像是相關的暫存器在別處被改了。遇到這種情況,一般有兩種處理方法,一是通過jtag**器進行除錯,單步跟蹤,確認相關的暫存器就是我們要設的值。而這在除錯wince驅動或者應用程式時是不方便實現的,一般在wince中通過新增列印資訊來確認。前面曾講過基於kitl除錯wince的方法,這種方法固然強大,但也只是一種手段。個人以為,在wince已經跑通的情況下,除錯驅動或應用還是少用kitl的好,不到萬不得已,不動用它!大bug靠想,小bug靠調,我一直這麼認為。過於依賴某種除錯手段而不去分析問題的本身,反而影響除錯。

「誰動了我的gpio」是乙個問題。這兩天在除錯vi程式時又碰到另外的問題。vi中採用了多片cpld,擴充套件了一些板上暫存器。按理來說,這一部分應該是比較簡單的,但在除錯時卻出現了很多狀況,主要是軟體設計和硬體設計版本的不一致,以致於需要經常修改軟體來確認硬體邏輯正確與否,很費時間。

為了解決這兩個問題,寫了個小軟體,memmgr.exe。功能很明確,在wince中用來讀寫暫存器,包括cpu內部的控制暫存器和匯流排上外擴的暫存器。這樣,我們就可以監視gpio了,再也不怕誰來動我的gpio。:-d控制板上暫存器也更方便。程式介面如下:

其中,phyaddr

是暫存器的實體地址,如

s3c2410

的rtc

暫存器0x57000070

。length

是資料寬度,

1對應的是乙個

byte,2

對應的是乙個

word,4

對應的是乙個

dword

。value

對應的是暫存器的值。

該程式在s3c2410和pxa270的wince5.0上執行都沒問題。

由於wince6.0

的記憶體管理發生了很大變化,所以該程式不能在

ce6.0

上正常工作。等需要時再做支援吧,車到山前再開路。

memmgr.exe

通用暫存器 記憶體讀寫

暫存器的結構 eax 的一半為 ax ax 的一半為 al ax就是eax的一部分 al就是ax的一部分 低位 ah就是ax的一部分 高位 8位暫存器只能放2個十六進製制的數 乙個位元組 彙編指令 mov,add,sub,and,or,xor,not 計算機記憶體的每乙個位元組會有乙個編號 即記憶體...

Linux下讀寫暫存器

arm裸機下讀寫暫存器很容易,各個暫存器和記憶體的位址是單一位址空間,他們是用相同的指令進行讀寫操作的.而在linux下就要複雜很多,因為linux支援多個體系架構的cpu。比如arm和x86就不一樣,具體的差別我暫時也說不上來,這個涉及到cpu體系的設計。目前我只關心 linux為了支援多個硬體體...

Linux下讀寫暫存器

arm裸機下讀寫暫存器很容易,各個暫存器和記憶體的位址是單一位址空間,他們是用相同的指令進行讀寫操作的.而在linux下就要複雜很多,因為linux支援多個體系架構的cpu。比如arm和x86就不一樣,具體的差別我暫時也說不上來,這個涉及到cpu體系的設計。目前我只關心 linux為了支援多個硬體體...