电子编程从入门到工程师总目录
不关注于框架和流程是学习不入门的一个重要原因!
- 上一节我们大体了解单片机程序贴近硬件的知识,这一节,我们了解单片机软件是如何调用的。
- 我们还是以LED点亮的程序为例。
下面是电路图:
下面是程序:
#define LED 13
//这个在存储到闪存时,LED直接被替换为13
//#define 为宏定义指令,就是LED 用来指代13 这个数字,
//这样我们要改变LED对应的接口时,直接把这一行的13改掉即可,
//避免程序复杂了,要改动程序中很多地方。
void setup()
{ // put your setup code here, to run once:
//放置初始化代码在这里,初始化代码只运行一次
pinMode(LED,OUTPUT);
digitalWrite(LED, HIGH);
}
void loop()
{ // put your main code here, to run repeatedly:
//放置主代码在这里,可以重复执行:
}
- 看到上面的程序,很多同学产生疑问,这么简单的几行程序就让单片机工作了?
- 实际上远远没有看起来那样简单,我们现在只是出于俄罗斯套娃的第一层,也可以说各路程序大神为了我们写程序简单为我们编织了一个盗梦空间,我们仅仅出于第一层空间中。
pinMode(LED,OUTPUT);
- 我们以上面函数为例,看看它是如何一层层的使用LED这个参数的。
- pinMode()是一个函数是一个可以反复使用的一段程序代码,LED、OUTPUT是这个函数的两个参数,参数可以理解为未知量或者已知量(常数),带入函数进行运算的数。
- 上图一层层,实际就是编译程序,一层层的调用函数或者宏定义(#define)来实现一定的功能。 对于计算机程序来说,实际需要一个文件查找到另一个文件。 每个文件中有不同的函数或者宏定义。
我用这个SourceInsight 这个代码分析软件。
- main.ino 我们最上层的程序 pinMode(LED,OUTPUT)在这里
- wiring_digital.c 文件中有 void pinMode(uint8_t pin, uint8_t mode)
- Arduino.h 有 #define digitalPinToPort(P) ( pgm_read_byte( digital_pin_to_port_PGM + (P) ) )
- pins_Arduino.h 有 const uint8_t PROGMEM digital_pin_to_port_PGM[]
以上是程序运行的流程。
- 上节课了解了进制、汇编、机器指令, 这节我们对高级语言、中级语言、低级语言有了认识。 实际仔细想下,这不就是俄罗斯套娃吗?
- 高级语言(C++)--中级语言(C)--低级语言(汇编)--机器指令--硬件。
到了这里实际上我们比很多人对软硬件的认知更深刻。
框架还是框架,流程还是流程
任何枉顾框架和流程的教程,都可能是让我们不入门和失去兴趣的根源。
声明:
文中所有论点、结论皆根据作者经历经验总结,限于知识结构、层次、经历局限性,必然有不少偏颇,甚至部分内容偏激,作者所有的文章也是试错的过程,欢迎批评斧正,如有不同意见或建议,请与讨论区提出讨论,致谢!