手头的ESP32-WROOM-32D模组搭载的是单核CPU,因此Arduino IDE需要配置成单核编译模式。用ESP32的示例编译并上传固件后不断重启:
例如GetChipID,源代码:
uint32_t chipId =0;
void setup() {
Serial.begin(115200);
}
void loop() {
for(int i=0; i<17; i=i+8) {
chipId |= ((ESP.getEfuseMac() >> (40 -i)) & 0xff) << i;
}
Serial.printf("ESP32 Chip model = %sRev %d\n", ESP.getChipModel(), ESP.getChipRevision());
Serial.printf("This chip has %dcores\n", ESP.getChipCores());
Serial.print("Chip ID: "); Serial.println(chipId);
delay(3000);
}
则运行后会不断重启并打印如下信息:
Rebooting...
ets Jun 8 2016 00:22:57
rst:0xc(SW_CPU_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)
configsip: 0,SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clockdiv:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room4
load:0x40078000,len:10944
load:0x40080400,len:6388
entry 0x400806b4
E (104)system_api: Base MAC address from BLK0 of EFUSE CRC error, efuse_crc = 0x00;calc_crc = 0xd0
abort() was calledat PC 0x400e1753 on core 0
ELF file SHA256:0000000000000000
Backtrace:0x4008443b:0x3ffb1ee0 0x40084699:0x3ffb1f000x400e1753:0x3ffb1f200x400d0cee:0x3ffb1f600x400d0b9b:0x3ffb1f900x400d14f1:0x3ffb1fb00x40085651:0x3ffb1fd0
如果把源码中的
for(int i=0;i<17; i=i+8) {
chipId |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i;
}
这一部分注释掉,即:
uint32_t chipId =0;
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.printf("ESP32 Chip model = %sRev %d\n", ESP.getChipModel(), ESP.getChipRevision());
Serial.printf("This chip has %dcores\n", ESP.getChipCores());
Serial.print("Chip ID: ");Serial.println(chipId);
delay(3000);
}
则可以完全正常。
请教各位大佬,这是什么原因?该如何解决?
|