原创 中斷服務子程序是如何被執行的 ?

前言 筆者在 《程序是如何在 CPU 中運行的(二)》中從 PC 指針寄存器的角度分析了一級函數調用和二級函數調用執行的過程,那麼中斷服務子程序又是如何被執行的呢?兩者的相同點和不同點是什麼呢?該篇文章筆者將詳細地闡述這個概念。

原创 程序是如何在 CPU 中運行的(三)

前言 在之前的兩篇文章中,在 程序是如何在 CPU 中運行的(一)中講述了一條一條指令和數據是如何在 CPU 中被運行的,在 程序是如何在 CPU 中運行的 (二)中以 PC 寄存器爲中心,從彙編語言的角度闡述了程序是如何在 CP

原创 程序是如何在 CPU 中運行的(二)

前言 在上一篇文章中《程序是如何在 CPU 中運行的(一)》筆者講述了程序中一條一條指令以及一條一條數據是如何在 CPU 中運行的,在本文筆者將以 ARM Cortex M3 的內核爲背景分析指令是如何有序的執行。 寄存器組介紹

原创 程序是如何在 CPU 中運行的(一)

CPU 和 MCU 的區別 對於嵌入式開發來講,我們在日常中接觸到概念都是 MCU ,MCU 和 CPU 的區別也就在於 MCU 集成了片上外圍器件,CPU 不帶外圍器件,一個簡單的例子就是 MCU 在芯片內集成了 Flash 和

原创 C語言指定初始化器解析及其應用

指定初始化器的概念 C90 標準要求初始化程序中的元素以固定的順序出現,與要初始化的數組或結構體中的元素順序相同。但是在新標準 C99 中,增加了一個新的特性:指定初始化器。利用該特性可以初始化指定的數組或者結構體元素。 數組的指

原创 C語言回調函數的概念及其應用

概念 引用維基百科上的關於回調函數的概念: 在計算機程序設計中,回調函數,或簡稱回調(Callback 即call then back 被主函數調用運算後會返回主函數),是指通過函數參數傳遞到其它代碼的,某一塊可執行代碼的引用。

原创 C語言位域解析及在嵌入式編程中的應用

位域的概念 位域(或者也能稱之爲位段,英文表達是 Bit field)是一種數據結構,可以把數據以位元的形式緊湊的存儲,並允許程序員對此結構的位元進行操作。這種數據結構的好處是: 可以使數據單元節省存儲空間,當程序需要成千上萬個

原创 結構體內存對齊解析

爲什麼要內存對齊 雖然所有的變量最後都會保存到特定的地址內存中去,但是相應的內存空間必須滿足內存對齊的要求,主要基於存在以下兩個原因: 硬件平臺原因:並不是所有的平臺都能夠訪問任意地址上的任意數據,某些硬件平臺只能夠訪問對齊的地

原创 你值得擁有的上古神器:vim

推薦理由:一個完全不需要藉助鼠標就可以完成所有操作的編輯器 前言 筆者並不是 vim 高手,也只是最近在 github 發現的一個開箱即用的 vim 配置,所以在這裏分享出來,所以本文並不會講解如何去配置一個專屬的 vim,對

原创 堆棧的概念————————ARM微控制器與嵌入式系統(清華大學慕課記錄)

堆棧、堆、棧的概念 堆:堆可以被看成是一棵樹。堆是在程序運行時,申請某個大小的存儲空間。即動態分配內存,對其訪問和對一般內存的訪問沒有區別。 棧:棧是一種運算受限的線性表。僅允許在棧的一端進行插入和刪除操。這一端稱爲棧頂,相對的

原创 C語言函數指針與指針函數

函數指針的概念 如果在程序中定義了一個函數,在編譯時,編譯系統爲函數代碼分配一段存儲空間,這段存儲空間的起始地址稱爲這個函數的指針。 函數指針是一個指針,不同於一般的指針,一般的指針存放的是一個變量的地址或者一個數組的地址,但是對

原创 git創建本地庫及上傳遠程服務器基本操作

1.倉庫初始化 到需要創建本地庫的文件下下面運行Git bash here,在彈出的界面中輸入如下命令: git init 詳細說明如下圖所示,1是倉庫初始化的命令,2是表示初始化倉庫成功 2.配置用戶名 在初始化倉庫之後,需

原创 彙編語言學習筆記——————內存訪問

內存訪問 內存中字的存儲 兩個字節 = 一個字 在0地址處開始存放20000(4E20H),如下圖所示,高位對應高地址位,低位對應低地址位。 由此需要注意的問題是: 0地址單元存放的字節型數據是20 0地址單元存放的字型數據數

原创 彙編語言學習筆記——————寄存器

CPU概述 內部總線 一個典型的CPU由運算器,邏輯控制器,寄存器等器件組成,這些器件靠內部總線相連。 內部總線與外部總線的區別 內部總線實現CPU內部各個器件之間的聯繫。 外部總線實現CPU和主板其他器件的聯繫。 寄存器 8

原创 結構體,結構體數組,結構體指針,typedf

結構體定義 C語言允許用戶自己建立由不同類型數據組成的組合型的數據結構,它稱之爲結構體。 聲明一個結構體類型的一般形式爲: struct 結構體名 {成員表列}; 具體的使用方法如下: struct Student { int