为什么是C
> 实际上现在科技这么发达,板子的资源往往是有溢出的,使得C的优势名不是那么的明显, 就比如直接使用MicroPython进行开发,但毫无疑问这类型的开发环境体现出高度的封装和集成性, 导致出现问题时往往一脸懵逼,并且在追求效率的情况下开发底层驱动C语言操作底层的性能无法代替(当然不讨论智能硬件),况且用还是有助于我们学习底层的,所以还是从c开始吧(基于库函数)。
我就是想水1000字领个黑洞
必要的C:
想要操作寄存器直接写代码是这样的:
*(unsigned int*)(0x40010c0c) = 0xffff //GPIOB_ODR置位/地址一定是无符号的
显然可读性不强。我们需要达到以下效果:
GPIOB->ODR = 0Xffff
涉及到gcc , 宏等
c语言的编译过程:
预处理
将一些宏定义转换成具体的操作或数;linux shell:
cpp -o *.i(目标文件) *.c
gcc -E -o *.i *.c
编译
将.i文件转换为.s文件;
gcc -S -o *.s(汇编语言) *.c
汇编
讲.s 文件转换为.o文件
gcc -c -o *.o(机器码) *.c
链接
直接链接除.o文件之外还有一些库文件链接成项目 build;
gcc -o build(unix可执行文件) *c
所以从道理上讲,宏定义 define/include/ifdef 等等不算关键字,在预处理阶段就被转换为具体的操作了,完全可以:
int define;
基本语句
常用的宏有:
#