原创 Cortex-M3 雙堆棧指針(MSP&PSP)
【雙堆棧指針(MSP&PSP)】 Cortex-M3內核中有兩個堆棧指針(MSP & PSP),但任何時刻只能使用到其中一個。 復位後處於線程模式特權級,默認使用MSP。 通過SP訪問到的是正在使用的那個指針,可以通過MSR/MRS指令訪
原创 字節序轉換宏
關鍵是big endian和little endian的概念。注意16bit機器和32bit機器(以32位爲訪問單位)下排列不同。內存地址從低地址向高地址增長,big endian是高位數據優先,即高位放在低地址。而little endi
原创 U-Boot啓動過程完全分析(uboot啓動2個階段的分析)
1.1 U-Boot工作過程 U-Boot啓動內核的過程可以分爲兩個階段,兩個階段的功能如下: (1)第一階段的功能 Ø 硬件設備初始化 Ø 加載U-Boot第二階段代碼到RAM空間 Ø 設置好棧 Ø
原创 linux 內核鏈表解析2
我用一個程序來說明在struct person 中增加了struct list_head 變量後怎麼來操作這樣的雙向鏈表。 [cpp] view plaincopyprint? #include <stdio
原创 gdb調試不顯示代碼的原因
我們從一個最簡單的C語言程序開始。源文件main.c在 用戶目錄gdb文件夾下。 florian@florian-pc:~/gdb$ cat main.c int main() { return 0; };
原创 GCC連接器--動態庫(Shared Library)中 PLT 和 GOT 的使用機制
PLT (Procedure Linkage Table) 和 GOT (Global Offset Table) 是 GCC 中生成shared library的重要元素。至於爲何一定要這兩個表? GOT的功用 以gcc內建的libc.
原创 linux 內核鏈表解析1
前言: 在linux 源代碼中有個頭文件爲list.h 。很多linux 下的源代碼都會使用這個頭文件,它裏面定義了一個結構, 以及定義了和其相關的一組函數,這個結構是這樣的: struct list_head{ struct
原创 volatile陷阱
對於volatile關鍵字,大部分的C語言教材都是一筆帶過,並沒有做太過深入的分析,所以這裏簡單整理了一些關於volatile的使用注意事項。實際上從語法上來看volatile和const是一樣的,但是如果const用錯,幾乎不會有什麼
原创 函數指針
1.簡單使用函數指針 函數指針的聲明方法爲: 函數類型 (標誌符指針變量名) (形參列表); 注1:“函數類型”說明函數的返回類型,“(標誌符指針變量名 )”中的括號不能省,若省略整體則成爲一個函數說明,說明了一個返回的數據類
原创 tcp/ip協議各個層作用
從協議分層模型方面來講,TCP/IP由四個層次組成:數據鏈路層、網絡層、傳輸層、應用層 一、數據鏈路層 數據鏈路層是負責接收IP數據報並通過網絡發送之,或者從網絡上接收物理幀,抽出IP數據報,交給IP層。 傳輸有地址的幀以及錯誤檢測功能
原创 ARM gdb調試工具安裝
arm-linux的gdb移植分爲兩種情況.一種是交叉調試版。這一種模式是需要編譯一個arm-linux版本gdbserver (GDB的stub模塊).然後再編譯一個X86版本交叉調試的gdb.爲了與桌面版本身的gdb 區別開來,一般
原创 sizeof和strlen 比較經典
下面是網上的一個比較經典的例子,分析一下: char *c="abcdef"; char d[]="abcdef"; char e[]={'a','b','c','d','e','f'}; printf("%d%d/
原创 fatfs結構及源碼分析。
原文鏈接:https://blog.csdn.net/fhb1922702569/article/details/91368360 目錄 一、API的函數功能簡述 二、FATFS主要數據結構
原创 STM32-移植FATFS的NANDFLASH驅動
1,在http://elm-chan.org/fsw/ff/00index_e.html上下載ff007c.zip,並把ff007c.zip裏面的 src文件夾複製到D:\works\EK-STM3210E-UCOSII下,並改名爲Fa
原创 STM32的ITM跟蹤調試功能介紹及實現(一)KEIL篇
原文鏈接:https://www.jianshu.com/p/0255097f594e ITM,(英文:Instrumentation Trace Macrocell,指令跟蹤宏單元),是一種針