原创 中斷的概念和機制————(清華大學慕課記錄)

中斷 中斷的關鍵要素 中斷處理流程 標誌位(Flag) 使能(Enable) 中斷服務程序ISR 中斷向量表 中斷嵌套和中斷優先級 中斷潛伏期 中斷 and 輪詢 形象解釋 輪詢:一個簡單的例子解釋輪詢就是有一個人反覆的

原创 彙編語言學習筆記——————第一個程序

一個彙編語言從寫出到最終執行的簡要過程 大體分爲以下三步: 1.編寫彙編源程序2.對源程序進行編譯連接3.執行可執行文件中的程序 第二步執行的操作是使用匯編語言編譯程序對源程序文件中的源程序進行編譯,產生目標文件;再用鏈接程序對目

原创 彙編語言階段一總結

將數據代碼放入不同的段 彙編語言程序可以將數據,棧和代碼都放到一個段裏面,但是也可以將程序,棧和代碼分別放到不同的段裏,下圖就是定義多個段的程序 assume cs:codesg,ds:data,ss:stack data se

原创 回調函數相關應用

函數指針 void fun1(void) { printf("i am fun\n"); } int main(void) { void (*p)(void);/*函數指針,只能指向無參數無返回值的函數*/ void (

原创 YModem協議詳細文檔(用於下位機主板升級)

原文鏈接:http://docs.geeetech.com/ymodem.html 協議說明 YModem協議有幾種常用版本,包括帶文件大小信息的版本(官方版本、超級終端版本)以及不帶文件大小信息的版本(SecureCRT版本)。

原创 STM32串口通信(串口中斷、FIFO機制)之安富萊代碼學習筆記

創建串口設備結構體 typedef struct { USART_TypeDef *uart;/*STM32內部串口設備指針*/ uint8_t *pTxBuf;/*發送緩衝區*/ uint8_t *pRxBuf;/*接收

原创 CPU的運行機制——————ARM微控制器及嵌入式系統(清華大學慕課記錄)

MCU的架構 MCU的架構主要包含三部分,CPU,存儲器以及外設。 其中對於CPU的學習,主要需要掌握如下幾個方面: 寄存器組 指令 棧 中斷 時鐘 CPU的一個總體架構圖: 在上圖中,可以清晰地看到指令寄存器,控制單元、寄

原创 ARM Cortex -M 體系結構————————ARM微控制器與嵌入式系統(清華大學慕課記錄)

ARM的發展過程 對於ARM公司來講,ARM公司只做CPU設計,採用出售IP的方式運營,半導體產商無需自己設計CPU,是生產關係的革命,提高了生產力。下面這張圖ARM核的多個系列,我們可以看到ARM從V7核開始,就分爲了A,R和M

原创 RTT 是如何管理和構建工程的?

前言 rtthread 是一個功能強大,組件豐富的物聯網操作系統。它相比於其他的 RTOS 的一個主要區別之一,也就是它不僅僅是一個實時內核,還具備豐富的中間層組件。那對於 rtt 來講,它又是如何管理和構建工程的呢?下面筆者將從

原创 關於extern你容易忽視的用法

extern 的含義 首先看到 extern 的出現,我們應該明白其含義是全局的意思。其次當看到 extern 修飾一個變量時,我們應該能夠區分這是對於一個變量的聲明,相應的,有了對於變量的聲明,那麼就應該具備變量的定義。關於變量

原创 MCU 是如何從上電覆位運行到 main 函數的?

前言 在筆者的上一篇文章中《中斷服務子程序是如何被執行的》,詳細闡述了中斷響應以及執行的整個過程,其中涉及到關於中斷向量表的相關知識,本篇文章再次以中斷向量表爲出發點闡述上電覆位的整個過程。 復位的相關概念 復位就類似於我們的個人

原创 復位、時鐘、存儲器和總線————————ARM微控制器與嵌入式系統清華大學慕課記錄

復位 初始化微控制器內部電路 將所有寄存器恢復成默認值 確認MCU的工作模式 禁止全局中斷 關閉外設 將IO設置爲高阻輸入狀態 等待時鐘趨於穩定 從固定地址取得復位向量並開始執行 中斷向量表 中斷向量表對於ARM這樣的微

原创 彙編語言學習筆記————總線以及內存地址空間的概念

彙編語言的組成 彙編指令(機器碼的助記符) 僞指令(由編譯器執行) 其他符號(由編譯器執行) 彙編語言的核心是彙編指令,它決定了彙編語言的特性 存儲器 CPU是計算機的核心部件,它控制着整個計算機的運作並進行運算,要想讓一個C

原创 泛型指針 void * 的妙用

指針的概念 在理解泛型指針(也稱之爲萬能指針)之前,我們需要了解指針的概念,最常見的說法就是指針就是地址。下面有這樣一個定義: int *p; 上面的定義我們可以知道, p 稱之爲指針變量,而並不是指針,而 *p 我們才稱之爲指

原创 爲什麼要使用二級指針?

概念 提到指針,我們都知道指針是用來存儲一個變量的地址。所以,當我們定義了一個指向指針的指針的時候(pointer to pointer),我們也稱之爲二級指針,那針對於這個二級指針來說,第一級指針存放的是指向的變量的地址,第二級