- 前后台系统
- 初始化
- 无限循环
void setup()
{}
void loop()
{}
- 这相当于只开放了两个业务接口,那么main在哪里呢?
- \hardware\arduino\avr\cores\arduino\main.cpp
int main(void)
{
init();
initVariant();
#if defined(USBCON)
USBDevice.attach();
#endif
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
- 透过这个过程看到还有init()以及initVariant()。init()可能是平台相关的初始化过程,已经编译好了在平台库中,initVariant()可以进行重写。
- 另外,这是C++风格的
-
系统的一些变量,常量,预定义对象等在这个目录下也可以找到一些,比如
serialX
HardwareSerial Serial(&UBRRH, &UBRRL, &UCSRA, &UCSRB, &UCSRC, &UDR);
HardwareSerial Serial1(&UBRR1H, &UBRR1L, &UCSR1A, &UCSR1B, &UCSR1C, &UDR1);
#if defined(UBRRH) || defined(UBRR0H)
extern HardwareSerial Serial;
#define HAVE_HWSERIAL0
#endif
#if defined(UBRR1H)
extern HardwareSerial Serial1;
#define HAVE_HWSERIAL1
#endif
#if defined(UBRR2H)
extern HardwareSerial Serial2;
#define HAVE_HWSERIAL2
#endif
#if defined(UBRR3H)
extern HardwareSerial Serial3;
#define HAVE_HWSERIAL3
#endif
- 还有重要的一点,嵌入式系统需要一个链接文件来定义内存等
\hardware\tools\avr\lib\gcc\avr\7.3.0\device-specs\specs-atmega2560可能是一些链接文件
*avrlibc_startfile:
crtatmega2560.o%s
*avrlibc_devicelib:
%{!nodevicelib:-latmega2560}
*cc1_n_flash:
%{!mn-flash=*:-mn-flash=4}
*cc1_rmw:
%{mrmw}
*cc1_errata_skip:
%{!mskip-bug: -mno-skip-bug}
*cc1_absdata:
%{mabsdata}
*cc1_absdata:
%{mabsdata}
*asm_arch:
-mmcu=avr6
*asm_relax:
%{mrelax:--mlink-relax}
*asm_rmw:
%{mrmw}
*asm_errata_skip:
%{!mskip-bug: -mno-skip-bug}
*link_pmem_wrap:
*link_relax:
%{mrelax:--relax}
*link_arch:
%{mmcu=*:-m%*}
*link_data_start:
%{!Tdata:-Tdata 0x800200}
*link_text_start:
*self_spec:
%{!mmcu=avr*: %<mmcu=* -mmcu=avr6} %<mshort-calls %<msp8
- “导出已编译的二进制文件”编译链接后的文件在工程目录下可以找到格式是HEX
网友评论