Did ESP32-PICO got lost on recent updates?

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?

Attachments: 

Comments

As with any linking errors:

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

Ooops, the shift-clean did

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?

I would probably have been,

I would probably have been, yes. I'll look into the local partitioning, though I don't think that side of things has changed.

No, it should still be using

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:

  1. /path/to/your/sketch/partitions.csv
  2. /path/to/.uecide/boards/ESP32/pico32/min_spiffs.csv
  3. /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.

VERY(!) good on the

VERY(!) good on the partitions.csv!

At least an option for more verbosity is truly welcome, looking forward to it.

Turning on verbose command

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.

While you are at it: please,

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!

That's not my job. That's

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.

Pages