- 前后臺系統(tǒng)
- 初始化
- 無限循環(huán)
void setup()
{}
void loop()
{}
- 這相當(dāng)于只開放了兩個業(yè)務(wù)接口,那么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()可能是平臺相關(guān)的初始化過程,已經(jīng)編譯好了在平臺庫中,initVariant()可以進(jìn)行重寫。
- 另外,這是C++風(fēng)格的
-
系統(tǒng)的一些變量,常量,預(yù)定義對象等在這個目錄下也可以找到一些,比如
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
- 還有重要的一點,嵌入式系統(tǒng)需要一個鏈接文件來定義內(nèi)存等
\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
- “導(dǎo)出已編譯的二進(jìn)制文件”編譯鏈接后的文件在工程目錄下可以找到格式是HEX
