ããã«ã¡ã¯ãHabrã³ãã¥ããã£ãæè¿ãåœç€Ÿã¯IRIS枬å®ããã³å¶åŸ¡è£ 眮ãåžå Žã«æå ¥ããŸããããã®ãããžã§ã¯ãã®ã¡ã€ã³ããã°ã©ããŒãšããŠãããã€ã¹ãã¡ãŒã ãŠã§ã¢ã®éçºã«ã€ããŠã話ãããããšæããŸãïŒãããžã§ã¯ããããŒãžã£ãŒã«ãããšããã¡ãŒã ãŠã§ã¢ã¯ã¢ã€ãã¢ãã倧éçç£ãŸã§ã®ç·äœæ¥éã®30ïŒ ä»¥äžã§ãïŒããã®èšäºã¯ããå®éã®ããããžã§ã¯ãã®äººä»¶è²»ãšãå éšãèŠããããŠãŒã¶ãŒãç解ãããšããç¹ã§ãåå¿è ã®éçºè ã«ãšã£ãŠäž»ã«åœ¹ç«ã¡ãŸãã
ããã€ã¹ã®ç®ç
IRISã¯å€æ©èœæž¬å®è£ 眮ã§ãã圌ã¯ãé»æµïŒammeterïŒãé»å§ïŒvoltmeterïŒãé»åïŒwattmeterïŒãããã³ãã®ä»ã®å€ãã®éã枬å®ããæ¹æ³ãç¥ã£ãŠããŸããKIP IRISã¯æ倧å€ãèšæ¶ãããªã·ãã°ã©ã ãæžã蟌ã¿ãŸããããã€ã¹ã®è©³çŽ°ãªèª¬æã¯ãäŒç€Ÿã®Webãµã€ãã«ãããŸãã
ã¡ãã£ãšããçµ±èš
ã¿ã€ãã³ã°
SVNãžã®æåã®ã³ãããïŒ2019幎5æ16æ¥
ãªãªãŒã¹ïŒ2020幎6æ19æ¥ã
*ããã¯æŠæéã§ãããæéäžã®ãã«ã¿ã€ã ã®éçºã§ã¯ãããŸãããä»ã®ãããžã§ã¯ããžã®æ°æŽãããæè¡ä»æ§ãžã®æåŸ ãããŒããŠã§ã¢ã®å埩ãªã©ããããŸããã
ã³ããã
SVNã®çªå·ïŒ928
ããã¯ã©ãããæ¥ãã®ã§ããïŒ
1ïŒéçºäžã®ãã€ã¯ãã³ãããã¡ã³ãã®ãµããŒã¿ãŒã§ã
2ïŒããŒããŠã§ã¢ãšãšãã¥ã¬ãŒã¿ãŒã®ãã©ã³ãã§éè€ããŸã
3ïŒããã¥ã¡ã³ã
ãããã£ãŠãæ°ããã³ãŒãïŒãã©ã³ã¯ãã©ã³ãïŒã®åœ¢åŒã®ãã€ããŒããæã€æ°ã¯300以äžã§ãã
ã³ãŒãã®è¡æ°
çµ±èšã¯ãHALSTM32ããã³ESP-IDFESP32ãœãŒã¹ãé€ããŠãããã©ã«ãã®ãã©ã¡ãŒã¿ãŒã䜿çšããŠclocãŠãŒãã£ãªãã£ã«ãã£ãŠåéãããŸããã
STM32ãã¡ãŒã ãŠã§ã¢ïŒ38,334è¡ã®ã³ãŒãããã®ãã¡ïŒ
60870-5-101ïŒ18751
ModbusRTUïŒ3859
ãªã·ãã¹ã³ãŒãïŒ1944
ã¢ãŒã«ã€ããŒïŒ955
ESP32ãã¡ãŒã ãŠã§ã¢ïŒ1537è¡ã®ã³ãŒãã
ããŒããŠã§ã¢ã³ã³ããŒãã³ãïŒé¢é£ããåšèŸºæ©åšïŒ
ããã€ã¹ã®äž»ãªæ©èœã¯ãSTM32ãã¡ãŒã ãŠã§ã¢ã«å®è£ ãããŠããŸãã ESP32ãã¡ãŒã ãŠã§ã¢ã¯Bluetoothéä¿¡ãæ åœããŸãããããéã®éä¿¡ã¯UARTãä»ããŠå®è¡ãããŸãïŒããããŒã®å³ãåç §ïŒã
NVICã¯å²ã蟌ã¿ã³ã³ãããŒã©ãŒã§ãã
IWDG-ãã¡ãŒã ãŠã§ã¢ããã³ã°ã¢ããããå Žåã«ããããåèµ·åããããã®ãŠã©ããããã°ã¿ã€ããŒã
ã¿ã€ããŒ-ã¿ã€ããŒå²ã蟌ã¿ã¯ãããžã§ã¯ãã®ããŒãããŒããç¶æããŸãã
EEPROM-çç£æ å ±ãèšå®ãæ倧èªã¿åãå€ãADCãã£ãªãã¬ãŒã·ã§ã³ä¿æ°ãä¿åããããã®ã¡ã¢ãªã
I2Cã¯ãEEPROMãããã«ã¢ã¯ã»ã¹ããããã®ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã
NOR-波圢ãä¿åããããã®ã¡ã¢ãªã
QSPIã¯ãNORã¡ã¢ãªãããã«ã¢ã¯ã»ã¹ããããã®ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã
RTC-ãªã¢ã«ã¿ã€ã ã¯ããã¯ã¯ãããã€ã¹ã®é»æºãåã£ãåŸã®æéçµéãæäŸããŸãã
ADC-ADCã
RS485ã¯ãModbusRTUããã³60870-101ãããã³ã«ãä»ããŠæ¥ç¶ããããã®ã·ãªã¢ã«ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã
DINãDOUT-åå¥ã®å ¥åãšåºåã
ãã¿ã³-枬å®éã§è¡šç€ºãåãæ¿ããããã®ããã€ã¹ã®ããã³ãããã«äžã®ãã¿ã³ã
ãœãããŠã§ã¢ã¢ãŒããã¯ãã£
äž»ãªãœãããŠã§ã¢ã¢ãžã¥ãŒã«
枬å®ããŒã¿ã¹ããªãŒã
ãªãã¬ãŒãã£ã³ã°ã»ã·ã¹ãã
ãã©ãã·ã¥ã¡ã¢ãªã®éã®å¶éïŒOSã¯ãªãŒããŒããããå°å ¥ããŸãïŒãšããã€ã¹ã®æ¯èŒçåçŽããèæ ®ããŠããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®äœ¿çšãäžæ¢ããäžæãåé¿ããããšã決å®ãããŸããããã®ã¢ãããŒãã¯ãHabréã«é¢ããèšäºã§ãã§ã«äœåºŠã匷調ãããŠãããããå²ã蟌ã¿å ã®ã¿ã¹ã¯ã®ãããŒãã£ãŒããšãã®åªå é äœã®ã¿ã瀺ããŸãã
ãµã³ãã«ã³ãŒããSTM32ã§ã®é 延å²ã蟌ã¿çæã
// 6
HAL_NVIC_SetPriority(CEC_IRQn, 6, 0);
HAL_NVIC_EnableIRQ(CEC_IRQn);
//
HAL_NVIC_SetPendingIRQ(CEC_IRQn);
//
void CEC_IRQHandler(void) {
// user code
}
PWM7ã»ã°ã¡ã³ã衚瀺
ããã€ã¹ã«ã¯ã4æåã®2è¡ãåèš8ã€ã®ã€ã³ãžã±ãŒã¿ãŒããããŸãã7ã»ã°ã¡ã³ãã®ãã£ã¹ãã¬ã€ã«ã¯ã8æ¬ã®äžŠåããŒã¿ã©ã€ã³ïŒAãBãCãDãEãFãGãDPïŒãšãããããã«2æ¬ã®è²éžæã©ã€ã³ïŒç·ãšèµ€ïŒããããŸãã
波圢ã¹ãã¬ãŒãž
ã¹ãã¬ãŒãžã¯ã波圢ããšã«64 KBã¹ãããïŒåºå®ãµã€ãºïŒã®åŸªç°ãããã¡ãŒã®ååã«åºã¥ããŠæ§æãããŠããŸãã
äºæããªãã·ã£ããããŠã³ãçºçããå Žåã®ããŒã¿ã®æŽåæ§ã®ç¢ºä¿
EEPROMã§ã¯ãããŒã¿ã¯2ã€ã®ã³ããŒã«æžã蟌ãŸããæåŸã«ãã§ãã¯ãµã ãè¿œå ãããŸããããŒã¿èšé²ã®æç¹ã§ããã€ã¹ã®é»æºããªãã«ãªã£ãŠããå ŽåãããŒã¿ã®å°ãªããšã1ã€ã®ã³ããŒã¯ãã®ãŸãŸæ®ããŸãããã§ãã¯ãµã ã¯ããªã·ãã¹ã³ãŒãããŒã¿ã®åã¹ã©ã€ã¹ïŒADCå ¥åã§ã®æž¬å®å€ïŒã«ãè¿œå ããããããã¹ã©ã€ã¹ã®ç¡å¹ãªãã§ãã¯ãµã ã¯ããªã·ãã°ã©ã ã®çµäºã®å åã«ãªããŸãã
ãœãããŠã§ã¢ããŒãžã§ã³ã®èªåçæ
1ïŒversion.fmtãã¡ã€ã«ãäœæããŸãã
ïŒdefine SVN_REVïŒ$ WCREV $ïŒ
2ïŒãããžã§ã¯ãããã«ãããåã«ã次ã®ã³ãã³ããè¿œå ããŸãïŒSystem WorkbanchçšïŒïŒ
SubWCRev $ {ProjDirPath} $ {ProjDirPath} /version.fmt $ {ProjDirPath} /version.h
ãã®ã³ãã³ããå®è¡ãããšãæåŸã®ã³ãããçªå·ã§version.hãã¡ã€ã«ãäœæãããŸãã
GITã«ãåæ§ã®ãŠãŒãã£ãªãã£ããããŸãïŒGitWCRevã/version.fmt ./main/version.h
#define GIT_REVïŒ$ WCLOGCOUNT $ïŒ
ããã«ãããã³ããããšãœãããŠã§ã¢ããŒãžã§ã³ãæ確ã«äžèŽãããããšãã§ããŸãã
ãšãã¥ã¬ãŒã¿
ãªããªã ãã¡ãŒã ãŠã§ã¢ã®éçºã¯ãããŒããŠã§ã¢ã®æåã®ã³ããŒãç»å Žããåã«å§ãŸãããã®åŸãã³ãŒãã®äžéšãPCäžã®ã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ãšããŠèšè¿°ããå§ããŸããã
å©ç¹ïŒ-PCã®
éçºãšãããã°ã¯ãããŒããŠã§ã¢äžã§çŽæ¥è¡ããããç°¡åã§ãã
-ä»»æã®å ¥åä¿¡å·ãçæããæ©èœã
-ããŒããŠã§ã¢ã®ãªãPCã§ã¯ã©ã€ã¢ã³ãããããã°ããæ©èœãcom0comãã©ã€ããŒãPCã«ã€ã³ã¹ããŒã«ãããcomããŒãã®ãã¢ãäœæãããŸãã1ã€ã¯ãšãã¥ã¬ãŒã¿ãèµ·åãããã1ã€ã¯ã¯ã©ã€ã¢ã³ãã«æ¥ç¶ããŸãã
-çŸãã建ç¯ã«è²¢ç®ããŠããã®ã§ ããŒããŠã§ã¢äŸåã¢ãžã¥ãŒã«ã®ã€ã³ã¿ãŒãã§ãŒã¹ãéžæãã2ã€ã®å®è£ ãäœæããå¿ èŠããããŸã
ãµã³ãã«ã³ãŒããeepromããããŒã¿ãèªã¿åã2ã€ã®å®è£ ã
uint32_t eeprom_read(uint32_t offset, uint8_t * buf, uint32_t len);
ifdef STM32H7
uint32_t eeprom_read(uint32_t offset, uint8_t * buf, uint32_t len)
{
if (diag_isError(ERR_I2C))
return 0;
if (eeprom_wait_ready()) {
HAL_StatusTypeDef status = HAL_I2C_Mem_Read(&I2C_MEM_HANDLE, I2C_MEM_DEV_ADDR, offset, I2C_MEMADD_SIZE_16BIT, buf, len, I2C_MEM_TIMEOUT_MS);
if (status == HAL_OK)
return len;
}
diag_setError(ERR_I2C, true);
return 0;
}
#endif
#ifdef _WIN32
static FILE *fpEeprom = NULL;
#define EMUL_EEPROM_FILE "eeprom.bin"
void checkAndCreateEpromFile() {
if (fpEeprom == NULL) {
fopen_s(&fpEeprom, EMUL_EEPROM_FILE, "rb+");
if (fpEeprom == NULL)
fopen_s(&fpEeprom, EMUL_EEPROM_FILE, "wb+");
fseek(fpEeprom, EEPROM_SIZE, SEEK_SET);
fputc('\0', fpEeprom);
fflush(fpEeprom);
}
}
uint32_t eeprom_read(uint32_t offset, uint8_t * buf, uint32_t len)
{
checkAndCreateEpromFile();
fseek(fpEeprom, offset, SEEK_SET);
return (uint32_t)fread(buf, len, 1, fpEeprom);
}
#endif
ããŒã¿è»¢éã®é«éåïŒã¢ãŒã«ã€ãïŒ
ãªã·ãã°ã©ã ã®ããŠã³ããŒãé床ãäžããããã«ãéä¿¡åã«ã¢ãŒã«ã€ããããŸãããuzlibã©ã€ãã©ãªã¯ã¢ãŒã«ã€ããŒãšããŠäœ¿çšãããŸããããã®ãã©ãŒããããCïŒã§è§£åããã®ã¯ãæ°è¡ã®ã³ãŒãã§ãã
ãµã³ãã«ã³ãŒããããŒã¿ã®ã¢ãŒã«ã€ãã
#define ARCHIVER_HASH_BITS (12)
uint8_t __RAM_288K archiver_hash_table[sizeof(uzlib_hash_entry_t) * (1 << ARCHIVER_HASH_BITS)];
bool archive(const uint8_t* src, uint32_t src_len, uint8_t* dst, uint32_t dst_len, uint32_t *archive_len)
{
struct uzlib_comp comp = { 0 };
comp.dict_size = 32768;
comp.hash_bits = ARCHIVER_HASH_BITS;
comp.hash_table = (uzlib_hash_entry_t*)&archiver_hash_table[0];
memset((void*)comp.hash_table, 0, sizeof(archiver_hash_table));
comp.out.outbuf = &dst[10]; // skip header 10 bytes
comp.out.outsize = dst_len - 10 - 8; // skip header 10 bytes and tail(crc+len) 8 bytes
comp.out.is_overflow = false;
zlib_start_block(&comp.out);
uzlib_compress(&comp, src, src_len);
zlib_finish_block(&comp.out);
if (comp.out.is_overflow)
comp.out.outlen = 0;
dst[0] = 0x1f;
dst[1] = 0x8b;
dst[2] = 0x08;
dst[3] = 0x00; // FLG
// mtime
dst[4] =
dst[5] =
dst[6] =
dst[7] = 0;
dst[8] = 0x04; // XFL
dst[9] = 0x03; // OS
unsigned crc = ~uzlib_crc32(src, src_len, ~0);
memcpy(&dst[10 + comp.out.outlen], &crc, sizeof(crc));
memcpy(&dst[14 + comp.out.outlen], &src_len, sizeof(src_len));
*archive_len = 18 + comp.out.outlen;
if (comp.out.is_overflow)
return false;
return true;
}
ãµã³ãã«ã³ãŒããããŒã¿ã®è§£åã
// byte[] res; //
using (var msOut = new MemoryStream())
using (var ms = new MemoryStream(res))
using (var gzip = new GZipStream(ms, CompressionMode.Decompress))
{
int chunk = 4096;
var buffer = new byte[chunk];
int read;
do
{
read = gzip.Read(buffer, 0, chunk);
msOut.Write(buffer, 0, read);
} while (read == chunk);
//msOut.ToArray();//
}
TKã®æä¹
çãªå€æŽã«ã€ããŠ
ã€ã³ã¿ãŒãããããã®ããŒã ïŒ
-ããããããªãã¯å§èšæ¡ä»¶ãæ¿èªããŸããïŒ
-æè¡çãªã¿ã¹ã¯ïŒTKã¯ãèŠç¹ãã ãšæã£ãŠããŸããããããã€ããããŸãã
ãµã³ãã«ã³ãŒããããŒããŒãã®åãæ±ãã
enum {
IVA_KEY_MASK_NONE,
IVA_KEY_MASK_ENTER = 0x1,
IVA_KEY_MASK_ANY = IVA_KEY_MASK_ENTER,
}IVA_KEY;
uint8_t keyboard_isKeyDown(uint8_t keyMask) {
return ((keyMask & keyStatesMask) == keyMask);
}
ãã®ãããªã³ãŒããèŠãŠãããã€ã¹ã«ãã¿ã³ã1ã€ãããªãã®ã«ããªã圌ãããããã¹ãŠç©ã¿äžããã®ããšæããããããŸãããTKã®æåã®ããŒãžã§ã³ã«ã¯5ã€ã®ãã¿ã³ãããããããã®å©ããåããŠãããã€ã¹äžã§çŽæ¥èšå®ã®ç·šéãå®è£ ããããšãèšç»ãããŠããŸããã
enum {
IVA_KEY_MASK_NONE = 0,
IVA_KEY_MASK_ENTER = 0x01,
IVA_KEY_MASK_LEFT = 0x02,
IVA_KEY_MASK_RIGHT = 0x04,
IVA_KEY_MASK_UP = 0x08,
IVA_KEY_MASK_DOWN = 0x10,
IVA_KEY_MASK_ANY = IVA_KEY_MASK_ENTER | IVA_KEY_MASK_LEFT | IVA_KEY_MASK_RIGHT | IVA_KEY_MASK_UP | IVA_KEY_MASK_DOWN,
}IVA_KEY;
ãããã£ãŠãã³ãŒãã«å¥åŠãªç¹ãèŠã€ããå Žåãåã®ããã°ã©ããŒãæªãèšèã§ããã«èŠããŠããå¿ èŠã¯ãããŸããããããããã®æç¹ã§ããã®ãããªå®è£ ã«ã¯çç±ããããŸããã
ããã€ãã®éçºäžã®åé¡
ãã©ãã·ã¥ã¯çµãããŸãã
ãã€ã¯ãããã»ããµã«ã¯128KBã®ãã©ãã·ã¥ã¡ã¢ãªããããŸããããæç¹ã§ããããã°ãã«ãããã®ããªã¥ãŒã ãè¶ ããŸãããããªã¥ãŒã ã«ããæé©åãæå¹ã«ããå¿ èŠããããŸãã-OsãããŒããŠã§ã¢ã§ã®ãããã°ãå¿ èŠãªå Žåã¯ãäžéšã®ãœãããŠã§ã¢ã¢ãžã¥ãŒã«ïŒmodbasã101stïŒãç¡å¹ã«ããŠç¹å¥ãªã¢ã»ã³ããªãäœæããŸããã
QSPIããŒã¿ãšã©ãŒ
qspiãä»ããŠããŒã¿ãèªã¿åããšãã«ããäœåãªããã€ãã衚瀺ãããããšããããŸãããqspiå²ã蟌ã¿ã®åªå 床ãäžãããšãåé¡ã¯è§£æ¶ãããŸããã
ãªã·ãã¹ã³ãŒãã®ããŒã¿ãšã©ãŒ
ãªããªã ããŒã¿ã¯DMAã«ãã£ãŠéä¿¡ãããããã»ããµã¯ããããèªèãããããã£ãã·ã¥ããå€ãããŒã¿ãèªã¿åãããšãã§ããŸããããã£ãã·ã¥ãæ€èšŒããå¿ èŠããããŸãã
ãµã³ãã«ã³ãŒãããã£ãã·ã¥ã®æ€èšŒã
// QSPI/DMA
SCB_CleanDCache_by_Addr((uint32_t*)(((uint32_t)&data[0]) & 0xFFFFFFE0), dataSize + 32);
// ADC/DMA CPU
SCB_InvalidateDCache_by_Addr((uint32_t*)&s_pAlignedAdcBuffer[0], sizeof(s_pAlignedAdcBuffer));
ADCã®åé¡ïŒé»æºãå ¥ããããšã«ç°ãªãèªã¿åãå€ïŒ
ã¹ã€ããããªã³ã«ããŠãããªã³ã«ãããŸã§ãçŸåšã®èªã¿åãå€ã®ç°ãªããªãã»ããïŒ10ã30 mAã®ãªãŒããŒïŒãããã€ã¹ã«çŸããŸããããã®è§£æ±ºçã¯ãVladislavBarsovãšAlexanderKvashinã®Kompelã®ååã«ãã£ãŠå©ãããã圌ãã«æè¬ããŸãã
ãµã³ãã«ã³ãŒããADCã®åæåã
//
HAL_ADCEx_Calibration_SetValue (&hadc1, ADC_SINGLE_ENDED, myCalibrationFactor[0]);
HAL_ADCEx_Calibration_SetValue (&hadc1, ADC_DIFFERENTIAL_ENDED, myCalibrationFactor[1]);
HAL_ADCEx_LinearCalibration_SetValue (&hadc1, &myLinearCalib_Buffer[0]);
ãã£ã¹ãã¬ã€ã®ããã¯ã©ã€ã
ã空ã®ã7ã»ã°ã¡ã³ããã£ã¹ãã¬ã€ã§ã¯ãå®å šã«ã·ã£ããããŠã³ãã代ããã«ã匱ãç §æã衚瀺ãããŸããããã®çç±ã¯ãçŸå®ã®äžçã§ã¯æ³¢åœ¢ãçæ³çã§ã¯ãªããã³ãŒãgpio_set_levelïŒ0ïŒãå®è¡ããå Žåãä¿¡å·ã¬ãã«ãããã«å€æŽãããããšãæå³ããªãããã§ãããã¬ã¢ã¯ãããŒã¿ã©ã€ã³ã«PWMãè¿œå ããããšã«ãã£ãŠæé€ãããŸããã
HALã®Uartãšã©ãŒ
ãªãŒããŒã©ã³ãšã©ãŒãçºçããåŸãUARTã¯åäœãåæ¢ããŸããããã®åé¡ã¯HALãããã§ä¿®æ£ãããŸããã
ãµã³ãã«ã³ãŒããHAL'aã®ãããã
--- if (((isrflags & USART_ISR_ORE) != 0U)
--- && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U) ||
--- ((cr3its & (USART_CR3_RXFTIE | USART_CR3_EIE)) != 0U)))
+++ if ((isrflags & USART_ISR_ORE) != 0U)
{
__HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF);
ã¢ã©ã€ã³ãããŠããªãããŒã¿ãžã®ã¢ã¯ã»ã¹
ãšã©ãŒã¯ã-Osæé©åã¬ãã«ã®ã¢ã»ã³ããªå ã®ããŒããŠã§ã¢ã§ã®ã¿çºçããŸãããå®éã®ããŒã¿ã®ä»£ããã«ãmodbusã¯ã©ã€ã¢ã³ãã¯ãŒããèªã¿åããŸãã
ãµã³ãã«ã³ãŒããã¢ã©ã€ã³ãããŠããªãããŒã¿ã®èªã¿åãäžã«ãšã©ãŒãçºçããŸããã
float f_value;
uint16_t registerValue;
// registerValue 0
//registerValue = ((uint16_t*)&f_value)[(offsetInMaximeterData -
// offsetof(mbreg_Maximeter, primaryValue)) / 2];
// memcpy
memcpy(& registerValue, ((uint16_t*)&f_value) + (offsetInMaximeterData -
offsetof(mbreg_Maximeter, primaryValue)) / 2, sizeof(uint16_t));
HardFaultã®åå ãèŠã€ãã
ç§ã䜿çšããäŸå€ããŒã«ãªãŒãŒã·ã§ã³ããŒã«ã®1ã€ã¯ããŠã©ãããã€ã³ãã§ããã³ãŒãã®åšãã«ãŠã©ãããã€ã³ããåæ£ãããäŸå€ã衚瀺ãããåŸããããã¬ãŒã«æ¥ç¶ããŠãã³ãŒããééãããã€ã³ãã確èªããŸãã
ãµã³ãã«ã³ãŒããSET_DEBUG_POINTïŒ__ LINE__ïŒã
//debug.h
#define USE_DEBUG_POINTS
#ifdef USE_DEBUG_POINTS
// SET_DEBUG_POINT1(__LINE__)
void SET_DEBUG_POINT1(uint32_t val);
void SET_DEBUG_POINT2(uint32_t val);
#else
#define SET_DEBUG_POINT1(...)
#define SET_DEBUG_POINT2(...)
#endif
//debug.c
#ifdef USE_DEBUG_POINTS
volatile uint32_t dbg_point1 = 0;
volatile uint32_t dbg_point2 = 0;
void SET_DEBUG_POINT1(uint32_t val) {
dbg_point1 = val;
}
void SET_DEBUG_POINT2(uint32_t val) {
dbg_point2 = val;
}
#endif
// :
SET_DEBUG_POINT1(__line__);
åå¿è ã®ããã®ãã³ã
1ïŒã³ãŒãäŸãèŠãŠãã ãããesp32ã®å ŽåãSDKã«ã¯äŸãå«ãŸããŠããŸããHALã¹ãã¬ãŒãžå ã®stm32ã®å ŽåSTM32CubeMX \ STM32Cube_FW_H7_V1.7.0 \ Projects \ NUCLEO-H743ZI \ Examples \
2ïŒGoogleïŒããã°ã©ãã³ã°ããã¥ã¢ã«<your chip>ããã¯ãã«ã«ãªãã¡ã¬ã³ã¹ããã¥ã¢ã«<your chip>ãã¢ããªã±ãŒã·ã§ã³ããŒã<your chip>ãããŒã¿ã·ãŒã<yourããã>ã
3ïŒæè¡çãªåé¡ããããäžäœ2ã€ã®ãã€ã³ãã圹ã«ç«ããªãã£ãå Žåã¯ããµããŒããžã®é£çµ¡ãæ ã£ãŠã¯ãªãããã¡ãŒã«ãŒã®äŒç€Ÿã®ãšã³ãžãã¢ãšçŽæ¥é£çµ¡ãåã£ãŠãããã£ã¹ããªãã¥ãŒã¿ãŒã«é£çµ¡ããå¿ èŠããããŸãã
4ïŒãã°ã¯ã³ãŒãã ãã§ãªãã補é å ã®HALã«ããããŸãã
æž èŽããããšãããããŸããã