Arduino yakashandura nyika yemagetsi nekuda kwekureruka kwaita prototypes uye mapurojekiti anogona kugadzirwa. Nekudaro, kune avo vanoda kutora hurongwa hwavo nhanho mberi uye nekugadzirisa zviwanikwa, chengeta iyo kodhi yakachena uye uwane hunyanzvi, iyo macros kuva chishandiso chinokosha.
Muchinyorwa chino tichanyura zvakadzama mukushandiswa kwe macros muArduino: zvavari, mashandisirwo avanoitwa, zvazvakanakira nezvavasingakwanisi. Uye tichaita izvi nekuunganidza ruzivo rwakakwana uye runobatsira kubva kune zvakanakisa zviwanikwa zviripo online, zvakanyorwa patsva nenzira yakajeka uye yemazuva ano kuti inyatsoshanda.
Chii chinonzi macros muArduino?
Macros ndiwo mirairo yepreprocessor muC/C++ iyo inokutendera kuti udzore mavara kodhi isati yanyorwa. Panzvimbo pekuita mirairo seyechinyakare basa, macro inoshanda nekutsiva zvikamu zvezvinyorwa, izvo zvine kukanganisa kwakananga kuti iyo yekupedzisira binary code inogadzirwa sei.
Iyo preprocessor Inomhanya isati yaunganidzwa chaiyo, uye ine basa rekushandisa izvi zvinotsiva. MuArduino, izvi zvinobvumira kubva define constants, zvine mamiriro anosanganisira mafaira kana kutogadzira madiki online features izvo zvinochengetedza nguva uye ndangariro.
Basic muenzaniso: tsananguro yakadai #define LED_PIN 13
inoita kuti kodhi yese ingotsiviwa LED_PIN
kubudikidza 13
tisati tagadzira.
Izvi zvingaita sezvisina basa, asi zvinopa a ine simba nzira yekunyora inoshanduka uye inochengeteka kodhi.
Zvakanakira kushandisa macros
Kuita macros mumapurojekiti eArduino kunogona kupa akati wandei mabhenefiti:
- Natsiridza kuverenga kwekodhi: Nekushandisa zvakare mazita ekufananidzira, zviri nyore kunzwisisa chinangwa chechimwe nechimwe chinhu.
- Optimize performance: Nekusagadzira mafoni ekushanda, macros anogona kuita mashandiro nekukurumidza.
- Deredza kushandiswa kwe RAM: kunyanya inobatsira pamabhodhi-ashoma-mabhodhi, akadai se Arduino UNO.
- Inobvumira zvigadziriso zvinogadziriswa: Izvo zvinokwanisika kuunganidza zvidimbu zvakasiyana zvekodhi zvichienderana nerudzi rweArduino board inoshandiswa.
Basic Macros: Kushandisa #define
Directive #tsanangura Ndiyo inonyanya kushandiswa. Inoshandiswa zvese zviri zviviri tsanangura tsika dzinogara dziripo kana kugadzira jekiseni otomatiki mabasa panguva yekugadzirira.
Muenzaniso 1: Tsanangura pini
#define PINLED 13
void setup() {
pinMode(PINLED, OUTPUT);
}
void loop() {
digitalWrite(PINLED, HIGH);
delay(500);
digitalWrite(PINLED, LOW);
delay(500);
}
Muenzaniso 2: Macro se inline basa
int itemCounter = 0;
#define COUNT_ITEM() do { itemCounter++; } while(0)
void setup() {
Serial.begin(9600);
COUNT_ITEM();
COUNT_ITEM();
}
void loop() {
Serial.println(itemCounter);
}
Sezvaunogona kuona, kushandiswa kwemaitiro ita { ... } apo(0) inova nechokwadi chekuti macro inobata zvakachengeteka kunyangwe ikashandiswa mukati mezvimiro.
## opareta uye macro concatenation
Iyo ## mushandisi ine simba preprocessor chishandiso. iyo inobvumira concatenating identifiers. Izvi zvinobatsira zvakanyanya kana iwe uchida kugadzira mazita akasiyana zvine simba.
Muenzaniso unoshanda:
#define GENERAR_VARIABLE(no) \
int var##no = no;
void setup() {
GENERAR_VARIABLE(3); // crea int var3 = 3
}
Yambiro yakakosha: Uyu mushandisi haaenderane neese Arduino board modhi zvakaenzana. Semuenzaniso, inogona kushanda zvakanaka pane Uno kana Esplora, asi inokundikana paMega. Zvakare, haugone kugadzira macro kusikwa mukati memamwe macros uchishandisa ## zvakananga.
Macros uye kuchengetedza ndangariro
Imwe yemabhenefiti akakosha ekushandisa macros muArduino ndeye kuchengetedza RAM ndangariro. Arduino ine simba shoma, saka kurodha mameseji tambo zvakananga muRAM kunogona kuve dambudziko rakakura.
Nzira yepamusoro yekudzivisa izvi inosanganisira kushandisa FORCE_INLINE uye kutakura tambo kubva purogiramu memory (PROGMEM):
#include <HardwareSerial.h>
#define MYSERIAL Serial
#define FORCE_INLINE __attribute__((always_inline)) inline
FORCE_INLINE void printFromFlash(const char *str) {
char ch = pgm_read_byte(str);
while (ch) {
MYSERIAL.write(ch);
ch = pgm_read_byte(++str);
}
}
#define SERIAL_LOG(x) (MYSERIAL.print(x))
#define SERIAL_LOGLN(x) (MYSERIAL.println(x))
Kushandisa aya macros kunogona kuita mutsauko pakati peprojekiti inoshanda kana kwete, kunyanya mumashandisirwo ane zviratidziro kana akawanda ma sensor.
Macros akasanganiswa nemabasa
Macros inogona zvakare kufambisa mabasa ekufona zvine simba, zvichibva pamhando yakapfuura separameter. Muenzaniso wakajeka uye wakajeka ndewekuti:
#define FUNC_LENTA(tipo) \
{ funcion_##tipo##_lenta(); }
#define FUNC_RAPIDA(tipo) \
{ funcion_##tipo##_rapida(); }
void funcion_caminar_lenta() {
Serial.println("Andando despacio");
}
void funcion_caminar_rapida() {
Serial.println("Andando rápido");
}
void setup() {
Serial.begin(9600);
FUNC_LENTA(caminar);
}
void loop() {
FUNC_RAPIDA(caminar);
}
Kutenda kune ## opareta uye macros, isu tinogona kudzivirira kudzokorora zvimiro uye nepakati zvine simba logic..
Macros ane zvinobuda parameters
Zvinogoneka zvakare kushandisa macros kuvhara zvinhu zvidiki kana shanduko:
#define BOOL_OUT() (bool){false}
#define NUM_OUT(a,b) (float){a+b}
#define STR_OUT(msg) (String){msg}
void loop() {
Serial.println(BOOL_OUT());
Serial.println(NUM_OUT(1.2, 3.4));
Serial.println(STR_OUT("Mensaje"));
}
Maitiro akanaka uye ekudzivirira nema macros
Kushandisa macros zvakanyanyisa kana kusangwarira kunogona kukonzera zvakaoma-ku-debug zvikanganiso. Semuenzaniso, nekuita zvitsividzo zvisirizvo kana kutsanangura mazita anodhumhana nemazita ari mumaraibhurari ekunze.
Mimwe mitemo yakakosha kudzivirira matambudziko:
- Dzivisa nzvimbo dzisina kufanira kana kutsemuka kwemitsara mukati me macro.
- Usasanganise mashoko mukati memacros akaoma anoshandisa mitsetse yakawanda.
- Shandisa mazita akasiyana kana ne prefixes (senge zita reprojekiti) kudzivirira kunetsana.
- Tsiva macros neanogara chaiwo kana mabasa pese pazvinogoneka. Yemazuvano C++ inobvumira kuchena, dzimwe nzira dzakachengeteka.
Kune rimwe divi, kushandisa zvakanyanya macros kunogona kuderedza kujeka kwekodhi. Chinangwa chinofanira kunge chiri chekuvandudza kugona uye modularity pasina kukanganisa kuchengetedza.
Conditional dhairekitori uye adaptive kuunganidzwa
Imwe yeanonyanya kushanda anoshanda mumapurojekiti anogona scalable kushandisa macros ku Conditionally gadzira kodhi, chimwe chinhu chinobatsira zvikuru kana iwe uchida kuti mufananidzo wakafanana ushande pamapuranga akasiyana.
Muenzaniso wakajairika:
#ifdef ARDUINO_MEGA
#define LEDPIN 53
#else
#define LEDPIN 13
#endif
Izvo zvinobatsirawo pakudzora debugging kana kuratidza compiler mameseji ne #pragma meseji kana kutogadzira zvikanganiso pasi pemamwe mamiriro ne #mistake.
Yemukati compiler macros
Iyo GCC preprocessor yeAVR (inoshandiswa muArduino) inosanganisira akati wandei yakakosha macros inopa ruzivo rwehurongwa, inobatsira zvikuru panguva yekuvandudza:
- __LINE__: nhamba yemutsara yazvino.
- __FILE__: zita refaira razvino.
- __TIME__ na __DATE__: nguva yekuunganidza uye zuva.
- __func__: zita rebasa razvino.
Ivo vanobvumira kutonga kweshanduro, zvimiro zvelogi, uye kufambisa kugadzirisa uye kukanganisa kutsvaga pasina kupinda nechisimba kodhi huru.
Macros inopa ine simba uye inoshanduka nzira yekugadzira mapurojekiti eArduino. Vanokutendera kuti utsanangure maconstants, chengetedza ndangariro, gadzirisa kodhi zvichienderana nenharaunda yekuuraya uye gadzira zvivharo zvinogoneka pasina kudzokorora mitsetse. Chokwadika, zvinoda chirango, kujeka, uye zivo kudzivisa zvikanganiso zvisingaoneki kana kuti kurasikirwa nokurava. Kana ikashandiswa nemazvo, chinhu chakakosha chemidziyo kune vepakati uye vepamberi vanogadzira.