1. 程式人生 > >解決CCS5.5 除錯DM8168過程中,無法配置部分暫存器

解決CCS5.5 除錯DM8168過程中,無法配置部分暫存器

如何解決上述問題?初步設想增加 ARM許可權(即Supervisor模式),是否能夠解決上述問題。

一、解決方案

具體步驟如下:

  1、編寫啟動檔案super_startup.asm

;**
; \file super_startup.asm
;
; \brief Firmware startup for supervisor mode
;
; @author [email protected]
;
;/



	.sect	".text"
	.state32
	.global	mystartup
	.global _c_int00

mystartup:
	ldr pc, RTS_JUMP ;Jump to rtslib _c_int00 but skip 4 instructions 
					 ;which puts cpu in user mode 
	 

RTS_JUMP		.long	(_c_int00 + 0x10)
	
	.end

    編寫完成後,將啟動檔案新增到工程檔案中

2、設定CCS編譯器,指定super_startup.asm 第一個啟動檔案。

     在工程檔案處右擊選擇Properties:

設定完成後,點選OK即可。這樣就完成,跳過boot.asm中將系統模式修改使用者模式。

2、工作機制

super_startup.asm中跳轉到 地址:(_c_int00 + 0x10)處,該處的地址有在哪裡呢? 標號_c_int00在boot.asm中定義。

具體詳見下面。

***************************************************************
;* DEFINE THE USER MODE STACK (DEFAULT SIZE IS 512)
;***************************************************************
__stack:.usect  ".stack", 0, 4

        .global _c_int00
;***************************************************************
;* FUNCTION DEF: _c_int00
;***************************************************************
_c_int00: .asmfunc

        .if __TI_NEON_SUPPORT__ | __TI_VFP_SUPPORT__
        ;*------------------------------------------------------
        ;* SETUP PRIVILEGED AND USER MODE ACCESS TO COPROCESSORS
        ;* 10 AND 11, REQUIRED TO ENABLE NEON/VFP
        ;* COPROCESSOR ACCESS CONTROL REG
        ;* BITS [23:22] - CP11, [21:20] - CP10
        ;* SET TO 0b11 TO ENABLE USER AND PRIV MODE ACCESS
        ;*------------------------------------------------------
        MRC      p15,#0x0,r0,c1,c0,#2
        MOV      r3,#0xf00000
        ORR      r0,r0,r3
        MCR      p15,#0x0,r0,c1,c0,#2

        ;*------------------------------------------------------
        ; SET THE EN BIT, FPEXC[30] TO ENABLE NEON AND VFP
        ;*------------------------------------------------------
        MOV      r0,#0x40000000
        FMXR     FPEXC,r0
        .endif

        ;*------------------------------------------------------
        ;* SET TO USER MODE  除錯需要 遮蔽該段程式碼   hailin
        ;*------------------------------------------------------
        MRS     r0, cpsr
        BIC     r0, r0, #0x1F  ; CLEAR MODES
		ORR     r0, r0, #0x10  ; SET USER MODE
;        ORR     r0, r0, #0x1F  ; SET SYS MODE
        MSR     cpsr_cf, r0

        ;*------------------------------------------------------
        ;* INITIALIZE THE USER MODE STACK
        ;*------------------------------------------------------
        .if __TI_AVOID_EMBEDDED_CONSTANTS
        MOVW    sp, __stack
        MOVT    sp, __stack
        MOVW    r0, __STACK_SIZE
        MOVT    r0, __STACK_SIZE
        .else
        LDR     sp, c_stack
        LDR     r0, c_STACK_SIZE
        .endif
        ADD     sp, sp, r0


 二、疑問點

2.1 地址(_c_int00 + 0x10)在哪裡?

     首先明確ARM指令長度概念,A8支援兩種指令集:

        a. 32bits (ARM狀態)

        b.16bits (Thumb狀態)

    注:如何確定使用何種指令集?通過查詢CPSR[5]狀態判斷,當CPSR[5]=1,使用Thumb 或 Thumb EE指令集;當CPSR[5]=0,使用ARM指令集。具體詳見下圖

                                                            A8架構的CPSR描述                                  

               在CCS5.5中,使用者程式成功載入後,讀取CPSR[5]時為0,表示使用ARM指令集。

2.2 為什麼跳轉(_c_int00 + 0x10)處?

        跳轉到:(_c_int00 + 0x10),實際上跳過 標號_c_int00後 4條指令(ARM指令集中每條指令佔用4個byte),即跳過協處理器設定,導致usr模式無法設定。 

相關推薦

解決CCS5.5 除錯DM8168過程無法配置部分

如何解決上述問題?初步設想增加 ARM許可權(即Supervisor模式),是否能夠解決上述問題。 一、解決方案 具體步驟如下:   1、編寫啟動檔案super_startup.asm ;** ; \file super_startup.asm ; ; \brief Fir

解決下載ftp文件過程瀏覽器直接解析文件(txt,png等)的問題

filename map 需要 etc home 3.0.0 var att esp 搭建了一個ftp服務器,供用戶進行上傳下載,在下載過程中發現,一些文件,例如txt,jpg,png,pdf等直接被瀏覽器解析了。在瀏覽器中顯示其內容,沒有下載。 下面通過網上查詢得到一些解

疑問:VS在除錯過程總是會提示正在載入picface.dll的符號然後卡死在那

環境: 硬體環境: PC 軟體環境: Windows7 VS2012 MFC程式除錯 現象: 除錯的過程中,提示“正

《ServerSuperIO Designer IDE使用教程》-3.Modbus協議讀取多個實現多種資料型別解析。釋出:v4.2.2版本

更新內容,v4.2.2版本:1.增加Modbus協議讀取多個暫存器,並且按多種資料型別解析資料。2.Modbus Serial和Modbus TCP兩個驅動合併成一個驅動。3.修改資料庫結構,儲存配置資訊。4.優化ServerSuperIO核心程式碼,應用過程中的潛在問題。 v4.2.2 下載地址:官方

linux-AT&T彙編把32位的值以16進位制字串打印出來

將暫存器的值以16進位制顯示,程式如下:.section .bbs .lcomm buf,10 #定義一個10位元組長度的記憶體區,用來儲存計算出來的字元 .section .text .globl _start _start: //初始化暫存器 movl $0x01abc

CPU的八個通用

資料暫存器    EAX,  EBX,  ECX, EDX,      (Data Register)資料暫存器主要用來儲存運算元和運算結果等資訊,從而節省讀取運算元所需佔用匯流排和訪問儲存器的時間。    32位CPU有4個32位的通用暫存器EAX、EBX、ECX和EDX。對低16位資料的存取,不會影響高

計算機記憶體、cache和之間的關係及區別

1. 暫存器是中央處理器內的組成部份。暫存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、資料和位址。在中央處理器的控制部件中,包含的暫存器有指令暫存器(IR)和程式計數器(PC)。在中央處理器的算術及邏輯部件中,包含的暫存器有累加器(ACC)。 2. 記憶體包含的範圍

【廣州服務回收】服務維護過程你需要了解的5個小常識

windows ron 就是 圖片 渲染 天都 驚人的 領域 其他人 大多數人認為,服務器僅僅是升級後的臺式機。但任何在數據中心工作過的人都知道,它們的差別挺大的。 盡管web服務器每天都要承擔數百萬訪問者的負載,但對於普通用戶來說,它們仍然神秘莫測。以下是關於服務器你可能

Window系統tesseract+tesserocr過程發生的一系列問題及解決辦法(已解決

在Windows下安裝tessocr,首先需要下載tesseract,它為tesserocr提供了支援。 tesseract下載地址:https://digi.bib.uni-mannheim.de/tesseract/ 進入下載頁面,可以看到有各種.exe檔案的下載列表,這裡可以選擇下載3

Bootstrap安裝過程chrome控制檯報錯解決辦法

今天初次使用Bootstrap,安裝好所有預設的樣式以及JS檔案,執行之後發現Chrome控制檯報錯Uncaught TypeError: Cannot read property 'fn' of undefined  1 <!DOCTYPE html> 2 <html

Ubuntu 安裝軟體的過程出現版本衝突的解決辦法

常使用ubuntu的源 deb http://mirrors.163.com/ubuntu/ oneiric main universe restricted multiverse deb-src http://mirrors.163.com/ubuntu/ oneiri

C# 基礎(十三)C# 軟體開發過程可執行檔案.exe 出現bug該怎麼排查、解決:找到出現bug的位置

一、簡介 之前是完成了寫軟體,從而實現軟體的基本功能。到了今天,需要對自己寫的可執行檔案.exe找bug了。那麼下面,我將結合自己的軟體的使用過程中,講自己的經驗融入進來,解釋下什麼是bug、以及該怎麼找Bug。 二、Bug的分類 主要參考: https://blog.csdn.ne

【小菜鳥】本人部落格沒有任何侵權的想法僅僅是總結了一些前輩們的經驗做了一些小筆記發表。 在以往學習過程中,遇到太多太多的小問題網上都有答案只不過太多太雜,解決問題的答案也是可遇不可求 總是事倍功半。特此總結出一些自己的小經驗希望能夠幫助大家。

小菜鳥 本人部落格,沒有任何侵權的想法,僅僅是總結了一些前輩們的經驗,做了一些小筆記發表。 在以往學習過程中,遇到太多太多的小問題,網上都有答案,只不過太多太雜,解決問題的答案也是可遇不可求, 總是事倍功半。特...

Linux:解決VM軟體安裝Linux的Ubuntu過程開啟Linux出現Oprating System not found錯誤

最討厭網上回答的囉嗦和不清晰!本人最討厭囉嗦,直接上來,圖文表達,簡單明瞭,快速解決問題!最討厭網上答案一大片的廢話和沒有用的、弄不清楚解釋,我,直接就是上解決的答案!是本博主的一貫風格!解決問題:Oprating System not found解決思路:Oprating

解決vue專案執行過程npm run dev 報錯問題

ERR! code ELIFECYCLEnpm ERR! errno 1npm ERR! [email protected] dev: `node build/dev-server.js`npm ERR! Exit status 1npm ERR!npm ERR!

Unity3D 5.x 啟動過程 License Error 解決辦法

新安裝了Unity3D的最新版本5.4 ,啟動過程中執行"Check License"步驟的時候報錯,"License Error" ,說我沒有License。 Unity3D不是對普通使用者免費嗎?幹嘛不讓我用啊? 這讓我鬱悶了好久。我是按照“註冊帳號--下載--安裝--

在伺服器除錯過程JSP頁面無法正常顯示

首先伺服器磁碟總共22G,可用空間已經很少了,其次該伺服器上有其他的系統,因為伺服器較老,所以伺服器自帶瀏覽器也很老。 以上是除錯環境,因此遇到一個問題,除錯過程中jsp頁面不能正常顯示 解決辦法:清

專案過程有c++控制元件層級問題的解決

首先要明白,同類的層級是可以通過z-index來控制;但非同類之間的層級的關係: c++控制元件>div; 但是在使用過程中,如何合理控制各個之間的關係呢? 如我曾經碰到過一個問題;是控制元件放在彈出框中;但2個彈出框同時開啟時,並相互移動,將一個彈出框放在另一個彈出

關於移植過程存在大量LCD log(不定形參...)等除錯屬性函式巨集定義到printf

嵌入式開發過程中,遇到移植第三方協議棧,有時存在大量LCD log等除錯屬性函式。我們希望儲存原生的除錯輸出資訊,通過對LCDlog等除錯功能進行printf重新巨集定義。 在第三方程式存在大量的除錯屬性函式,如: #define  LCD_UsrLog(format,

安裝oracle 11g過程prerequisite checks過程各種failed問題解決

問題一:Packages報錯 yum環境配置好後,就可以執行yum install packagename命令進行包的安裝  yum install compat-libstdc++-33  elfutils-libelf-devel  glibc-devel  lib