一、复习C语言
static:修饰局部变量,延长变量的生命周期(到整个程序结束)。只会初始化1次
修饰函数和全局变量,限制作用域本文件内。
extern:声明一个外部符号(函数/全局变量)在本文件可用
const:修饰一个变量的属性为只读
volatile:
inline:(C++关键字,兼容C)
面向过程:以过程为中心,一步一步执行,适合小功能、底层。
面向对象:以对象为中心,封装功能,适合大项目、易维护。
C 语言(面向过程), C++、Java、Python 才会大量用面向对象。
系统编程:文件编程:标准IO、文件IO
标准IO:标准库(win/linux都可用)、有缓冲区、效率高
文件IO:系系统调用(仅linux下可用)、无缓冲区、效率低
缓冲:无缓冲行缓冲(1K、\n)全缓冲(4K)刷新条件:满、手动刷新
磁盘读写效率:

目录操作、文件属性、权限、链接
修改权限:chmod 0777 a.out
二、用C写点灯代码
arm-linux-gnueabihf-gcc -c start.S -o start.o
arm-linux-gnueabihf-ld -Ttext 0x87800000 start.o -o start.elf
arm-linux-gnueabihf-objcopy -O binary -S -g start.elf start.bin
./imxdownload start.bin /dev/sdb
先编译.o再链接成可执行文件,当你只修改了fun.c时,make 会发现fun.o比fun.c旧,只会重新编译fun.c→fun.o,不会重新编译main.c和fun1.c。


cs
TARGET=led
CC=arm-linux-gnueabihf-
LD=$(CC)ld
OBJCOPY=$(CC)objcopy
OBJDUMP=$(CC)objdump
OBJ=start.o main.o
$(TARGET).bin:$(OBJ)
$(LD) -Ttext 0x87800000 start.o main.o -o $(TARGET).elf
$(OBJCOPY) -O binary -S $(TARGET).elf $@
$(OBJDUMP) -D $(TARGET).elf > $(TARGET).dis
%.o:%.S
$(CC)gcc -c -g $^ -o $@
%.o:%.c
$(CC)gcc -c -g $^ -o $@
clean:
rm $(TARGET).bin $(TARGET).elf $(TARGET).dis *.o
load:
./imxdownload $(TARGET).bin /dev/sdb