You are viewing a static version of the site. Enable JavaScript to benefit from the
full functionality of this site and enable such things as forum posting.
Did ESP32-PICO got lost on recent updates?
ullix:
I have been using my sketches on all 3 of ESP32-Wroom-Dev, WROVER, and PICO. I can still use them on the first 2, but no longer on PICO.
When compiling on PICO the linker fails with:
• Linking sketch...
/home/ullix/Code/uecide/am_0.4_04-27b/build/am_0.4_04-27b_combined.cpp.o:(.literal._Z10readButtonv+0x4): undefined reference to `EasyButton::read()'
/home/ullix/Code/uecide/am_0.4_04-27b/build/am_0.4_04-27b_combined.cpp.o:(.literal._Z10initButtonv+0x14): undefined reference to `EasyButtonBase::onPressed(void (*)())'
/home/ullix/Code/uecide/am_0.4_04-27b/build/am_0.4_04-27b_combined.cpp.o:(.literal._Z10initButtonv+0x18): undefined reference to `EasyButtonBase::onPressedFor(unsigned int, void (*)())'
/home/ullix/Code/uecide/am_0.4_04-27b/build/am_0.4_04-27b_combined.cpp.o:(.literal._Z10initButtonv+0x1c): undefined reference to `EasyButtonBase::onSequence(unsigned char, unsigned int, void (*)())'
/home/ullix/Code/uecide/am_0.4_04-27b/build/am_0.4_04-27b_combined.cpp.o: In function `readButton()':
/home/ullix/Code/uecide/am_0.4_04-27b/util.ino:189: undefined reference to `EasyButton::read()'
/home/ullix/Code/uecide/am_0.4_04-27b/build/am_0.4_04-27b_combined.cpp.o: In function `initButton()':
/home/ullix/Code/uecide/am_0.4_04-27b/util.ino:189: undefined reference to `EasyButtonBase::onPressed(void (*)())'
/home/ullix/Code/uecide/am_0.4_04-27b/util.ino:189: undefined reference to `EasyButtonBase::onPressedFor(unsigned int, void (*)())'
/home/ullix/Code/uecide/am_0.4_04-27b/util.ino:189: undefined reference to `EasyButtonBase::onSequence(unsigned char, unsigned int, void (*)())'
collect2: error: ld returned 1 exit status
Compiling Failed
Easybutton is a rather benign lib.
Also, more strangeness, the options when PICO is selected are strangely limited, see picture. No FFat partition? Why the reduced selections, the chip is with respect to Flash basically the same as the other ESPs?
And the partitions.csv file - is it still be honored by uecide? I actually think the file is ignored, and only the menu selection is used?
ullix:
Just tested it with PICO on Arduino IDE - compiles, links, and runs!
matt:
As with any linking errors: do a clean build as step one (shift-click compile).
As for what options are available - I only provide what the upstream core provides, and that's all there is in the boards.txt file for the pico:
pico32.menu.PartitionScheme.default=Default
pico32.menu.PartitionScheme.default.build.partitions=default
pico32.menu.PartitionScheme.no_ota=No OTA (Large APP)
pico32.menu.PartitionScheme.no_ota.build.partitions=no_ota
pico32.menu.PartitionScheme.no_ota.upload.maximum_size=2097152
pico32.menu.PartitionScheme.min_spiffs=Minimal SPIFFS (Large APPS with OTA)
pico32.menu.PartitionScheme.min_spiffs.build.partitions=min_spiffs
pico32.menu.PartitionScheme.min_spiffs.upload.maximum_size=1966080
ullix:
Ooops, the shift-clean did the trick! Perhaps you can have uecide give out a reminder after a failed linker action?
Re the partitioning: does uecide still honor any included partitions.csv file and prefer this over a menu-selected option?
None of the current partition options includes FFat. Though after I had started my sketch on PICO - with none of the two options selected - there was a working FFat partition. But it could have been a left-over from a previous run?
matt:
I would probably have been, yes. I'll look into the local partitioning, though I don't think that side of things has changed.
matt:
No, it should still be using your local partitions.csv file. You won't "notice" it unless you look at the command being executed.
In the config file:
core.partition=${onefile:${sketch:root}/partitions.csv,${find:${board:root}::${core:root}/partitions,${build.partitions}.csv}}
The anatomy of that:
onefile
selects the first file found from a list of comma-separated files
${sketch:root}/partitions.csv
${find:${board:root}::${core:root}/partitions,${build.partitions}.csv}}
sketch:root
resolves to the directory of your sketch
find
returns the first instance of a named file found in a list of directories
File: ${build.partitions}.csv
Directories:
${board:root}
${core:root}/partitions
build.partitions
is specified by the menu entry or the board
board:root
is the folder the board files are in
core:root
is the folder of the ESP32 core.
So the upshot is, it will search in this order:
/path/to/your/sketch/partitions.csv
/path/to/.uecide/boards/ESP32/pico32/min_spiffs.csv
/path/to/.uecide/cores/ESP32/partitions/min_spiffs.csv
Oh, and UECIDE has no concept of a "linker error". It only knows it failed, not why it failed. It is vastly improved in the development branch though where it is much more able to work out that a library hasn't completely compiled. I have done major work on the library subsystem which should make it far far more powerful.
ullix:
VERY(!) good on the partitions.csv!
At least an option for more verbosity is truly welcome, looking forward to it.
matt:
Turning on verbose command execution and looking in the Output tab will show you what is being executed. If you trawl through the reams of data in there you can see where it generates the binary partition file from the CSV file. You can then confirm exactly where it's getting the partition data from. It can be tricky to find what you want in there though.
Maybe I can tweak it so it says "Generating parts file from /blah/blah" in the main panel. That may take some thinking about though.
ullix:
While you are at it: please, make the fonts large enough to become legible! At least to the level of the Status output.
If you can read it, great, but not everyone has your eagle eyes. And having to copy it into an editor just underlines its size inappropriateness!
matt:
That's not my job. That's yours. Just select different fonts in the Theme section of preferences. You can also use global display scaling in preferences too if you are using it with a newer (9+) version of Java.
Some Theme changes need a restart of the IDE to be picked up properly in the current version.