day44-硬件學習之arm啟動代碼

一、跳轉指令實現函數調用

  • LR(鏈接寄存器):保留函數返回地址

1.1 bl指令

????????跳轉指令bl,使LR保存當前函數進入前的下一條指令的地址,使函數調用后可以返回下一條指令的地址;

1.2 bx指令

????????跳到目標地址;


1.3 棧的使用方法?

函數調用前,保護現場,調用后恢復現場 :

????????使用棧(先進后出的特性);


棧的使用方法:

1.3.1.空增

????????保護時,SP先寫,再加;

????????恢復時,SP先減,再讀;

1.3.2 滿增?

????????保護時,SP先加,再寫;

????????恢復時,SP先讀,再減;

1.3.3 滿減

????????保護時,SP先減,再寫;

????????恢復時,SP先讀,再加;

1.3.4 空減

????????保護時,SP先寫,再減;

????????恢復時,SP先加,再讀;


1.4 ARM內核使用滿減棧,使用方法

1.4.1 stmfd指令

入棧保護時,使用stmfd指令;

????????stmfd <c><Rn>{!}, <registers>:

? ? ? ? 其中:

  • !是讓棧指針的內容隨程序發生變化
  • 命令含義是把多個寄存器保存到Rn寄存器中
  • 舉例:stmfd sp!, {r0-r12, lr}

1.4.2 ldmfd指令?

出棧恢復時,使用ldmfd指令;

? ? ? ? 如:ldmfd sp!, {r0-r12, lr}

二、匯編與C語言混合調用

注意:由主調者負責保護現場和恢復現場

2.1 匯編為主調

?步驟:

  1. 首先確保SP指針有效
  2. 對函數聲明:import(導入)? ? ? ? ?export(導出)
  3. 保護現場
  4. 使用bl跳轉
  5. 恢復現場

注意:

若參數4個以內,R0-R3傳遞參數;

若有第五個參數,只能用棧的方式來傳參:

  • ? ? ? ? stmfd sp!, {r4}
  • ? ? ? ? ldmfd sp!, {r4}

main.c?

start.s?

2.2 c為主調

在匯編中,聲明c的函數,import main

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?export asm_add?

main.c?

start.s?

三、準備工作

3.1 切換模式

CPS命令修改CPSR寄存器的M[4:0]

????????如,CPS #<mode>

????????(但不支持keil)?

解決方法:

(1) msr指令:讀取cpsr、spsr寄存器

mrs r0, cpsr

(2) 于r0中,設置相關數據,設為User模式(10000)

bic r0, r0, #(0x1F << 0)    //低5位清零
orr r0, r0, #0x10           //第5位置一

(3) msr指令:寫入cpsr、spsr寄存器

msr cpsr_c, r0

(4)將User模式下的SP進行設置

ldr sp, =0x40001000
sub sp, sp, #1024

3.2 異常處理被占用(解決),初始化異常向量表?

3.3 產生軟件中斷異常

加^,表示恢復執行前cpsr寄存器的值

四、IMX6ULL入門

  • Windows編寫代碼
  • Ubuntu編寫代碼

主要部分:

  1. 搭建編程環境
  2. 匯編點燈
  3. 下載程序

4.1 引腳的功能復用

  • 說明哪些引腳歸哪個外設使用
  • PAD:引腳
  • MUX:功能復用

以點亮LED為例:

????????GPIO1組的3號引腳

數據寄存器? ? ? ? GPIO data register(GPIOx_DR)?

方向寄存器?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84685.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84685.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84685.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【數據結構】七種常見排序算法

&#x1f970;&#x1f970;&#x1f970;來都來了&#xff0c;不妨點個關注叭&#xff01; &#x1f449;博客主頁&#xff1a;歡迎各位大佬!&#x1f448; 歡迎來到排序算法的學習&#xff0c;恭喜你&#xff01;本期內容主要介紹排序算法&#xff0c;一起來探索吧~ &#xf…

Spring AOP 代理模式解析

一、核心概念&#xff1a;代理模式就像房屋中介 想象你要租一套房子&#xff1a; 你&#xff1a;租客&#xff08;業務調用者&#xff09;房東&#xff1a;房主&#xff08;真實業務對象&#xff09;中介&#xff1a;代理對象 傳統方式&#xff08;無代理&#xff09; 租客…

智能制造——案例解讀16頁制造業指標體系搭建指導【附全文閱讀】

文檔的主要內容可以總結如下&#xff1a; **文檔概述**&#xff1a; 本文檔詳細探討了企業為何需要指標體系、指標體系的定義、如何搭建指標體系、如何有效拆解和管理指標&#xff0c;并最后提供了制造業指標體系的參考。 **主要內容**&#xff1a; 1. **企業為什么需要指標體系…

Pandas 數據清洗

數據清洗是數據分析過程中至關重要的一環&#xff0c;也是初學者最容易忽視的步驟。本文將詳細介紹如何使用Pandas進行數據清洗&#xff0c;涵蓋空值處理、日期格式修正、錯誤數據識別和重復數據刪除四大核心內容。 1. Pandas 清洗空值 空值是數據集中最常見的問題之一&#…

C++容器之 forward_list (單向鏈表)使用說明

目錄 1. 語法格式 2. 說明 3. 用法示例 1. 語法格式 描述控制可變長度元素序列的對象。該序列存儲為單向(前向)鏈接的節點列表&#xff0c;每個節點包含一個 Type 類型的成員。 template <class Type, class Allocator allocator<Type>> class forward_lis…

ali 輕量服務器安裝nginx

# Ubuntu sudo apt install nginx-light # 精簡版 # CentOS sudo yum install nginx #啟動并設置開機自啟 sudo systemctl daemon-reload sudo systemctl start nginx sudo systemctl enable nginx #驗證安裝 nginx -v curl -I 127.0.0.1 #常用命令&#xff1a; # 重新加載配…

【設計模式】4.代理模式

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 代理模式 1. 第一版 class SchoolGirl:def __init__(self):self._name Nonepropertydef name(self):return self._namename.setterdef name(self, valu…

基于微信小程序的美食點餐訂餐系統

文章目錄 1. 項目概述2. 項目思維導圖3. 系統架構特點4. 核心模塊實現代碼1. 登錄注冊2. 首頁模塊實現4. 分類模塊實現5. 購物車模塊實現6. 訂單模塊實現 5. 注意事項6. 項目效果截圖7. 關于作者其它項目視頻教程介紹 1. 項目概述 在移動互聯網時代&#xff0c;餐飲行業數字化…

[neo4j]介紹4個開源的知識圖譜項目

項目主要介紹幾個開源項目&#xff1a; QASystemOnMedicalKG&#xff1a;醫療知識圖譜問答 https://github.com/liuhuanyong/QASystemOnMedicalKG Agriculture_KnowledgeGraph&#xff1a;農業知識圖譜 Financial-Knowledge-Graphs&#xff1a;小型金融知識圖譜 stock-know…

20倍光學鏡頭怎么實現20+20倍數實現

1. 硬件選擇 球機攝像頭 選擇40倍光學變焦的攝像頭 &#xff1a;確保攝像頭具有足夠的變焦能力&#xff0c;同時考慮攝像頭的分辨率、幀率、夜視功能等。 內置云臺 &#xff1a;許多高端攝像頭已經內置了云臺功能&#xff0c;如果是這樣&#xff0c;可以簡化機械設計和電機控制…

Axios 在 Vue3 項目中的使用:從安裝到組件中的使用

&#x1f90d; 前端開發工程師、技術日更博主、已過CET6 &#x1f368; 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 &#x1f560; 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 &#x1f35a; 藍橋云課簽約作者、…

【Python打卡Day50】預訓練模型與CBAM注意力@浙大疏錦行

現在我們思考下&#xff0c;是否可以對于預訓練模型增加模塊來優化其效果&#xff0c;這里我們會遇到一個問題: 預訓練模型的結構和權重是固定的&#xff0c;如果修改其中的模型結構&#xff0c;是否會大幅影響其性能。其次是訓練的時候如何訓練才可以更好的避免破壞原有的特征…

ONLYOFFICE Jira 集成應用程序 4.0.0 發布,含新的文件格式支持等多個重大更新!

ONLYOFFICE 與 Jira 集成的重大更新現已發布&#xff01;使用 ONLYOFFICE Docs 在 Jira Software 中處理各種辦公文檔&#xff0c;從 4.0.0 版本開始&#xff0c;ONLYOFFICE 連接器允許您編輯 PDF 文件和表單、直接從編輯器創建新文件、可視化用戶頭像、在 Jira 平臺內處理新文…

安裝區塊鏈相關Geth(基于CentOS7)

注&#xff1a;由于版本沖突問題&#xff0c;請嚴格按如下介紹版本進行安裝 安裝所需資料&#xff1a;通過網盤分享的文件&#xff1a;區塊鏈_CSDN 鏈接: https://pan.baidu.com/s/1dn5xcLtwwFy90xhOWKiWyA?pwdzgzs 提取碼: zgzs --來自百度網盤超級會員v6的分享 一、安裝運…

系統分析師——計算機系統基礎

系統分析師——計算機系統基礎 引言 作為系統分析師學習的第一節課&#xff0c;計算機系統基礎部分構建了整個知識體系的核心框架。本文將圍繞計算機系統的層次結構、硬件組成、軟件分類以及關鍵技術點進行詳細總結&#xff0c;為后續深入學習奠定基礎。 本節學習內容如下圖&…

JS常用設計模式匯總

1、基于類的單例模式 // PageManager.js class PageManager {constructor(config) {if (!PageManager.instance) {this.config config;this.initialized false;PageManager.instance this;this.init();}return PageManager.instance;}init() {if (this.initialized) return…

邁向軟件開發 T 型人才之路:構建多元能力體系

在軟件開發的廣袤天地里&#xff0c;T 型人才備受矚目。這類人才猶如具備強大能量的 “多面手”&#xff0c;既有深入專精的技術能力&#xff0c;又有廣泛多元的知識與技能儲備&#xff0c;能夠從容應對復雜多變的項目需求&#xff0c;引領行業創新發展。于當今社會而言&#x…

SALMONN-omni論文閱讀

論文鏈接 項目鏈接 名詞理解&#xff1a; backchanneling&#xff1a; 指的是聽話人在不打斷說話人的情況下&#xff0c;用簡短的語氣詞或動作表示“我在聽”“我理解了”的反饋。 常見示例包括&#xff1a; “嗯哼”&#xff08;“uh-huh”&#xff09; “對的”&#xff08…

區塊鏈:什么是DeFi?

DeFi&#xff08;去中心化金融&#xff0c;Decentralized Finance&#xff09; 是一種基于區塊鏈技術的金融生態系統&#xff0c;旨在通過去中心化的方式提供傳統金融服務&#xff08;如借貸、交易、儲蓄等&#xff09;&#xff0c;無需依賴銀行、經紀商等中介機構。DeFi主要構…

idea編譯器使用git拉取、提交非常慢的原因和解決方案

前言 最近在公司換了一個電腦,但是發現這個電腦用idea編譯器使用git拉取、提交各種操作非常慢,有時候需要等10分鐘左右,這明顯是不對勁的,說明電腦的某些環境影響到git和idea之間的整合了。 目錄 在idea拉取代碼非常慢的原因 解決方案 在idea拉取代碼非常慢的原因 經過排查…