Ignore u64ctrl's build directory - #780
Conversation
raw_u64 and raw_c3 each carry a .gitignore holding "build"; u64ctrl, the third ESP32 project, does not. Nothing noticed because the CI image builds elsewhere, but building it locally leaves 1250 files of CMake and object output sitting untracked in the working tree, one "git add -A" away from being committed.
|
@barryw Hey Barry! Thank you so much for fixing the same issue for the other two products as well! Before merging, I was just wondering if I should merge PR 778, 779 and 780 in order? Good thinking about that flag, making it volatile. One thing to note is that the ESP32 and ESP32-S3 are dual core CPUs. I think the tasks are running on the same core, but if they weren't, a volatile keyword is not enough, as it only guarantees that a value is read from memory every time. It doesn't guarantee cache coherency per se. I wonder how much would fall apart if I were to run the Ultimate application on two concurrent CPU cores. ;-) Especially because my Risc-V core does not support the atomic extension, nor any cache coherency protocol. |
|
@GideonZ Thanks! On the merge order, and then on the volatile point, which is a better question than it first looks. Order#780 can go in whenever — it is green, and it cannot affect anything else. #779 before #778, but there is a prerequisite that is yours rather than mine: the runner's ESP-IDF Python environment is out of date and both PRs are failing on it. Neither failure compiles a line of the changes under review:
Worth knowing why it surfaced only now. The ESP32 build step has been skipped on every recent One consequence worth flagging: merging #779 will make the ESP32 build run more often, because the key will finally invalidate on A correction to something I wrote on #778I said there that #779 needed to land first or #778's CI would not rebuild the module it is meant to be testing. That was true when Chris observed it, when #778 only touched On volatileYou are right, and it applies to more of this than I had checked before you raised it. Both dual-core targets are SMP builds here:
and both tasks are created with plain Why I still think That is an argument that it works, not that it is robust. It leans on three facts that are true today and are not written down anywhere. If you would rather it not depend on them, Your closing question is the more interesting one, and the answer is different for your own core than for the ESP32. Without the atomic extension, C11 atomics degrade to libatomic calls or interrupt masking, and with no coherency protocol anything shared would need explicit flushes at well-defined points rather than a keyword. On the current single-core application that cost is invisible, which is precisely what would make the transition expensive — the places that quietly rely on "only one thing runs at a time" are not marked, and a fair number of them will be in the UI and filesystem layers rather than anywhere obviously concurrency-shaped. Worth its own issue if you ever get serious about it. |
software/wifi/raw_u64/.gitignoreandsoftware/wifi/raw_c3/.gitignoreeach holdbuild.software/u64ctrl, the third ESP32 project, has none.Nothing has noticed because the CI image builds elsewhere, but building it locally
leaves about 1250 files of CMake output, object files and ELF images sitting
untracked in the working tree — one
git add -Aaway from being committed. I cameclose to doing exactly that while working on #778.
One line, matching what its two siblings already do.
No firmware change, so the hardware gate has nothing to say about it. For the record,
the full default E2E set passes on an Ultimate 64 Elite here, firmware 3.15, FPGA 123,
core 1.4B, 20 of 20 — attached to #778.