ການພັດທະນາ program
ໃນ Arduino platform
ສິ່ງທີ່ຂາດບໍ່ໄດ້ຄືການ debug ເບິ່ງຄ່າຕ່າງໆ. ບໍ່ວ່າຈະເປັນ sensor
, ການຄຳນວນ
ເປັນຕົ້ນ ແລະ ສິ່ງທີ່ເຮົາໃຊ້ສະແດງຄ່າພວກນັ້ນກໍ່ຄື Serial
ນັ້ນເອງ.
ຫ້າມ serial print ຂໍ້ຄວາມ ໄປ main memory ເດັດຂາດດດ ມັນເປັນບາບ!
ຫຼາຍຄົນອາດໃຊ້ serial.print("message")
ເຊິ່ງມັນກໍ່ບໍ່ມີບັນຫາຫຍັງເຮັດວຽກໄດ້ປົກກະຕິແຕ່ວ່າມັນຈະມີບັນຫາຖ້າ program ທີ່ເຮົາກຳລັງພັດທະນານັ້ນເປັນ project ໃຫຍ່ມີການເກັບຂໍ້ມູນໄວ້ memory ຂອງ mcu ເປັນຈຳນວນຫຼາຍເພື່ອໃຊ້ໃນການຄຳນວນ ຫຼື ຮັບ response ຈາກ server ແລະ board ທີ່ເຮົາເລືອກໃຊ້ມີຄວາມຈຳໜ້ອຍຍຍຍ 2kb ຫຍັງກໍ່ວ່າກັນໄປ ເຊິ່ງກໍລະນີນີ້ອາດເຮັດໃຫ້ເກີດ memory overflow ໄດ້. ສະນັ້ນປ່ຽນມາໃຊ້ຄວາມຈຳອື່ນແທນນັ້ນກໍ່ຄື flash memory
ງ່າຍໆພຽງແຕ່ໃຊ້ F("message")
ແບບນີ້:
serial.print(F("message"))
ພຽງເທົ່ານີ້ message ຕ່າງໆຂອງ Serial ກໍ່ຈະປ່ຽນໄປໃຊ້ flash memory ແທນແລ້ວວ ຫຼຸດການໃຊ້ main memory ໄປໄດ້ຫຼາຍເລີຍ!
ເພີ່ມ Serial.printf() ເພື່ອຄວາມຫຼໍ່!
ຫຼາຍຄົນເຄີຍຂຽນຫຼາຍພາສາ ແລະ ມັກຈະມີ printf
ໄວ້ໃຫ້ເຮົາ formate message ໃຫ້ອ່ານງ່າຍ ສະນັ້ນເພື່ອຄວາມຫຼໍໍ່ເຮົາກໍ່ເລີຍຕ້ອງການເຮັດແບບນີ້ກັບ Serial class ຂອງ arduino ເຊິ່ງໂດຍປົກກະຕິແລ້ວວ ບໍ່ມີ build-in ມາໃຫ້. ໃນການເພີ່ມເຮົາກໍ່ທຳການແກ້ໄຂ້ Print.h
ທີ່ຢູ່ໃນ arduino platform ຫຼື platformIO ໄດ້ເລີຍ.
ສຳລັບ PlatformIO
ເຂົ້າໄປທີ່ ~/.platformio/packages/framework-arduino-avr/cores/arduino
ແລະ ຫາ Print.h
ເພື່ອແກ້ໄຂ້. ໂດຍການເພີ່ມ code ຕໍ່ໄປນີ້ຕໍ່ທ້າຍພາຍໃນ public section
#include <stdarg.h>
#define PRINTF_BUF 80 // define the tmp buffer size (change if desired)
void printf(const char *format, ...)
{
char buf[PRINTF_BUF];
va_list ap;
va_start(ap, format);
vsnprintf(buf, sizeof(buf), format, ap);
for(char *p = &buf[0]; *p; p++) // emulate cooked mode for newlines
{
if(*p == '\n')
write('\r');
write(*p);
}
va_end(ap);
}
#ifdef F // check to see if F() macro is available
void printf(const __FlashStringHelper *format, ...)
{
char buf[PRINTF_BUF];
va_list ap;
va_start(ap, format);
#ifdef __AVR__
vsnprintf_P(buf, sizeof(buf), (const char *)format, ap); // progmem for AVR
#else
vsnprintf(buf, sizeof(buf), (const char *)format, ap); // for the rest of the world
#endif
for(char *p = &buf[0]; *p; p++) // emulate cooked mode for newlines
{
if(*p == '\n')
write('\r');
write(*p);
}
va_end(ap);
}
#endif
ພຽງເທົ່ານີ້ເຮົາກໍ່ສາມາດໃຊ້ງານ printf
ໄດ້ແລ້ວ
Serial.printf(F("%s\n"), mst.mac);
ຂໍ້ຈົບບົດຄວາມໄວ້ເທົ່ານີ້ ໄວ້ມີໂອກາດມາແຊກັນໃຫມ່!
Top comments (0)