STM32彙編指令(一)WFI 和 WFE
ARM彙編的呼叫
嵌入式開發,尤其是編寫BSP的時候,非常接近底層,這個時候有可能用一些彙編指令來保證程式的簡潔和高效,但是平常編寫程式碼用到的都是C/C++,那麼如何使用匯編指令呢?
其實這個問題也很簡單,在C/C++中提供了關鍵字asm
或者ASM
來內嵌彙編,使用如下:
asm("WFI");
但是這種方法問題比較大,在Cortex-M平臺上,這個語句有很大機率編譯不通過,因為各家編譯器又實現了自己的巨集,具體可以在core_cmx.h中看到,如果我們的專案要在不同的編譯器上通過,可以考慮使用條件編譯來達標,不過這樣付出的成本就很大。
另外一種簡單的方法是使用intrinsic.h這個標頭檔案,這個標頭檔案把所有的彙編指令都封裝成了諸如__Commnad()
WFI和WFE
這兩條指令的作用都是令MCU進入休眠/待機狀態以便降低功耗,但是略有區別:
WFI: wait for Interrupt 等待中斷,即下一次中斷髮生前都在此hold住不幹活
WFE: wait for Events 等待事件,即下一次事件發生前都在此hold住不幹活
所以使用前要掂量好到底是什麼會觸發MCU喚醒事件
相關推薦
STM32彙編指令(一)WFI 和 WFE
ARM彙編的呼叫 嵌入式開發,尤其是編寫BSP的時候,非常接近底層,這個時候有可能用一些彙編指令來保證程式的簡潔和高效,但是平常編寫程式碼用到的都是C/C++,那麼如何使用匯編指令呢? 其實這個問題也很簡單,在C/C++中提供了關鍵字asm或者ASM來內嵌彙
ARM aarch64彙編學習筆記(九):使用Neon指令(一)
NEON是一種基於SIMD思想的ARM技術。 SIMD, Single Instruction Multiple Data,是一種單條指令處理多個數據的並行處理技術,相比於一條指令處理一個數據,運算速度將會大大提高。 ARMv8 有31 個64位暫存器,1個不同
STM32 HAL庫學習(一) STM32CubeMX和TRUEStudio的使用
最近開始學習STM32的HAL庫,之前有用過std庫函式做STM32開發的基礎,因此學習HAL庫會更容易上手一些,但對於新的程式設計、下載工具以及HAL庫仍有許多不清晰的地方。經過初步的實驗實現點亮LED燈和串列埠的傳送資料之後,對所用到的幾個工具以及HAL庫進行一個總結。
[轉]設計模式--單例模式(一)懶漢式和餓漢式
打印 是否 調用構造 餓漢 一段 tools 會有 輸出結果 java 單例模式是設計模式中比較簡單的一種。適合於一個類只有一個實例的情況,比如窗口管理器,打印緩沖池和文件系統, 它們都是原型的例子。典型的情況是,那些對象的類型被遍及一個軟件系統的不同對象訪問,因此需要一個
Android內存優化(一)DVM和ART原理初探
java虛擬機 劃分 cimage beef 靜態 由於 jar blank 查找 要學習Android的內存優化,首先要了解Java虛擬機,此前我用了多篇文章來介紹Java虛擬機的知識,就是為了這個系列做鋪墊。在Android開發中我們接觸的是與Java虛擬機類似的Dal
常用指令(一)
chmod fse 結構 inf 詳細信息 job scribe 目錄 whatis Kafka常用命令: Consumer##控制臺發送消息./kafka-console-producer.sh --broker-list 集群IP:Port --topic t
vue.js實戰學習——內置指令(一)
name 初始 節點 刪除 html元素 data post 編譯 16px 註:此內容摘抄自:梁灝的《Vue.js實戰》 註:記得要引入vue.js才能運行哦,文章中貼出的代碼直接復制是不行的,html css js 都放在了一起,而且也沒有引用vue.js。 1.v
Linux基本指令(一)
linux基本操作指令一、管理虛擬機 [kiosk@foundation20 Desktop]$ rht-vmctl start desktop //開啟虛擬機 [kiosk@foundation20 Desktop]$ rht-vmctl view desktop //顯示虛擬機 [ki
docker(一)安裝和必要的配置。
cgroup deb secure expec dex store div post oca Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制
自動化運維工具Ansible實戰(一)簡介和部署
Ansible 自動化運維 一、Ansible的介紹 Ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點。實現了批量系統配置、批量程序部署、批量運行命令等功能。Ansible是基於模塊工作的,本身沒
Linux下的基本指令(一)
文章目錄 1.檔案系統層次結構 1.1根目錄下重要的目錄 2. 對目錄進行操作 2.1 樹狀目錄結構的解釋 2.2 目錄的基本命令 1. cp 指令:複製一個或多個檔案
自動化測試(一)-get和post的簡單應用
今天主要介紹兩種測試的介面post和get: get和post是http的兩種基本請求方式,區別在於get把引數包含在url中傳遞;給而post把引數以json或鍵值對的方式利用工具傳遞。 get的傳遞隨便找個遊覽器就可以進行介面測試: 舉個栗子:這是個獲取學生資訊的介面 介面資訊:1:url
作用域和閉包(一)上下文和提升
上下文: 一段script 或者函式 全域性作用域: 一段script中 函式作用域: 函式中 變數提升 JS 引擎在解析js指令碼時,進入全域性作用域,首先提取變數宣告和函式宣告, 函式宣告在變數宣告之前, 提取到頂部 函式作用域解析過程(執行之前): 提取變數宣告,函式宣告,th
java學習筆記(一)int和Integer的區別
int和Integer的區別 1、Integer是int的包裝類,int則是java的一種基本資料型別 2、Integer變數必須例項化後才能使用,而int變數不需要 3、Integer實際是物件的引用,當new一個Integer時,實際上是生成一個指標指向此物件;而int則是直接儲存資料值
ES6學習(一)---let和const用法
1.let用法 (1)存在作用域,即let宣告函式會在花括號中執行 (2)es6規定暫時性死區,暫時性死區通俗的來講就是一個區塊中存在let和const宣告的變數,那麼該區塊會形成封閉作用域,在let和const宣告之前使用該變數都會報錯。 //例子1 { console.lo
手遊客戶端的效能篇(一)----Unity和C#版之Foreach GC
序:昨天去了南京的湯山紫清湖溫泉,安利一下,價格也不貴(不是打廣告。。。不貼怎麼訂票之類的,有興趣可以評論),還去見了多年未見的老友啊~不出意外的話下篇是手遊客戶端的效能篇(二)----Unity和C#版,想寫優化和效能想寫很久了
第七章 檔案管理(一)——檔案和檔案系統
**資料項:**描述物件某種屬性的字符集;是資料組織中可以命名的最小邏輯資料單位。 **記錄:**一組相關資料項集合,描述物件某方面的屬性; **關鍵字:**一個記錄中的一個或幾個資料項的集合,用於唯一的標識一個記錄。 檔案:由建立者定義的、具有檔名的一組相關元素的集合。 有結構:由相關記錄
react and redux(一)props和state
安裝 示例 總結 安裝 安裝好node.js和npm之後,命令列執行下面的命令: npm install --global create-react-app 建立應用目錄: create-react-app fi
Spark Streaming狀態管理函式(一)——updateStateByKey和mapWithState
updateStateByKey和mapWithState 什麼是狀態管理函式 updateStateByKey mapWithState updateStateByKey和mapWithState的區別 適用場景 什麼是狀態管理函
spring事務管理原始碼分析(一)配置和事務增強代理的生成流程
在本篇文章中,將會介紹如何在spring中進行事務管理,之後對其內部原理進行分析。主要涉及 @EnableTransactionManagement註解為我們做了什麼? 為什麼標註了@Transactional註解的方法就可以具有事務的特性,保持了資料的ACID特性?spring到底是如何具有這樣