解決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