嵌入式基礎知識

================ 內存管理 ===============
1.從地地址到高地址依次爲:代碼區、數據區、堆區、棧區、命令行參數及環境變量區域程序員

2.
局部變量:局部變量位於棧區函數

棧區特色: 1.棧區當中變量未初始化以前都爲隨機值
2.在變量做用域結束後,變量空間被操做系統收回操作系統

全局變量:全局變量位於數據區命令行

數據區特色:
1.數據區中變量未初始化以前都是0
2.在程序結束後,變量空間被操做系統收回內存

靜態變量:靜態變量位於數據區
特色:
1.數據區中變量未初始化以前都是0
2.在靜態變量做用域結束後,並不會被操做系統收回變量空間
3.靜態變量也是有做用域的,雖然靜態變量在做用域結束後沒有被操做系統回收變 量空間但在做用域外扔沒法操做該靜態變量作用域

常量:常量位於數據區字符串

數據區分爲:
1.文字常量區 存放字符串常量
2.未初始化的靜態變量區 存放未初始化化的靜態變量 .bss
3.已初始化的靜態變量區 存放已經初始化的靜態變量 .rodata內存管理


1.堆區:程序員經過malloc函數得到的一片區域編譯

2.注意:程序經過malloc得到堆區空間後,在程序結束時必需要free掉堆區空間不然將致使內存泄漏
malloc
free變量

 

========================== Makefile ======================
1.GNU推出的一款軟件

2.在project文件中,在命令行下輸入make,操做系統會自動尋找當前目錄的下的makefile,按照makefile規則去編譯project下的相關文件


3.基本形式:
main:main.o fun1.o fun.o gcc main.o fun1.o fun.o -o main
main.o:main.c
gcc -c main.c -o main.o
fun1.o:fun1.c
gcc -c fun1.c -o fun1.o
fun.o:fun.c
gcc -c fun.c -o fun.o


4.makefile變量
OBJS = main.o add.o
OBJ = main
CC = gcc
使用變量用$(OBJS)
$(OBJS)
$(CC)

5.自動變量
$@ 目標文件的完整名稱
$< 第一個依賴文件的名稱
$^ 全部的不重複的目標依賴文件,以空格隔開
方式一:
CC=gcc
CFLAGS=-O2 -Wall
OBJ=main
OBJS=main.o fun1.o fun.o

$(OBJ):$(OBJS)
$(CC) $(OBJS) -o $(OBJ)
main:main.o fun1.o fun.o
gcc main.o fun1.o fun.o -o main
main.o:main.c
gcc -c main.c -o main.o
fun1.o:fun1.c
gcc -c fun1.c -o fun1.o
fun.o:fun.c
gcc -c fun.c -o fun.o

.PHONY:
clean:
rm *.o main


方式二:
CC=gcc
CFLAGS=-O2 -Wall
OBJ=main
OBJS=main.o fun1.o fun.o

$(OBJ):$(OBJS)
$(CC) $(OBJS) -o $(OBJ)
main.o:main.c
$(CC) -c $< -o $@
fun1.o:fun1.c
$(CC) -c $< -o $@
fun.o:fun.c
$(CC) -c $< -o $@

.PHONY:
clean:
rm *.o main


方式三:
CC=gcc
CFLAGS=-O2 -Wall
OBJ=main
OBJS=main.o fun1.o fun.o

$(OBJ):$(OBJS) $(CC) $(OBJS) -o $(OBJ)%.o:%.c $(CC) -c $^ -o $@

相關文章
相關標籤/搜索