N9 arm-.c实现点灯

一、复习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
相关推荐
leisoo809720 分钟前
股票筹码分布怎么用获利比例成本区间与集中度实战 IG50免费开源股票数据API接口
开发语言·jvm·数据库·python·开源
晒太羊的猫14 小时前
jvm面试题
jvm
夜之眷属18 小时前
Core dump 崩溃排查:JVM 宕机后,那份 core 文件怎么用 gdb 还原现场
java·运维·服务器·jvm
用户0942485680319 小时前
第31章:JVM字节码解释器与模板解释器源码路径
java·jvm
阿俊-全栈开发1 天前
LikeShop 版本升级与备份:从旧版平滑迁移的完整步骤
jvm·数据库·oracle·开源·likeshop·likeshop开源商城
Nebula_g1 天前
JavaSE加强:线程Thread(线程安全重点)
java·开发语言·jvm·算法·javase·技术栈
JAVA面经实录9171 天前
Java高级后端 · 全套面试通关手册(线上故障排查)
java·jvm·面试
sibylyue1 天前
SQLite 运行模式
java·jvm·sqlite
toooooop81 天前
宝塔Python项目管理器:环境变量踩坑记录
java·jvm·python
佳児素花痴╮2 天前
线程知识点
java·开发语言·jvm