20 comments

  • ValdikSS 7 hours ago ago

    In case anyone interested, you can run (nommu) Linux on ESP32 Xtensa boards

    https://github.com/jcmvbkbc/esp32-linux-build

    ESP32-S3 N16R8 is <$5 on aliexpress:

        - Dual-core Xtensa 240 MHz
        - 16 MB NOR flash (eXecute-in-place supported)
        - 8 MB (PS)RAM
        - Wi-Fi 2.4 GHz 802.11n, Bluetooth
    
    As well as Zephyr, NuttX RTOSes, MicroPython.
  • uecker 14 hours ago ago

    Cool! And I do think the world needs more C compilers. There is so much you could do with this language, but it needs to be disentangled from the C++ compiler behemoths. (yes, I now that there are other small C compilers)

    • isitcontent 13 hours ago ago

      There is the TCC. Adapting that would probably be a faster path to a full featured C compiler on esp32 than building up my xcc700. This is more of an educational sandbox project.

      • uecker 13 hours ago ago

        I know, and there are chibicc, kefir, etc. .. and I have my own experimental C compiler.

        • fuhsnn 11 hours ago ago

          I would love to see how you handle variably-modified types, the way I retrofitted them onto chibicc never felt quite right, and I've never seen another non-gcc/clang compiler fully support noplate's VM type patterns.

  • boznz 15 hours ago ago

    Cool, always refreshing to see different approaches to the same problem, and you learn so much by doing, this is more the kind of tinkering I will be doing in retirement.

  • saidnooneever 12 hours ago ago

    hats off. this is really easy to read and well written and easy to comprehend code imho because it only support basic features. its a really nice example to read through thanks. nice inspiration to see its possible to roll your own for this with a bit restricted featureset and goals :).

  • ladyanita22 14 hours ago ago

    That's super cool! I have been wondering what could be done with ESP32 if it weren't for the lack of RAM.

    As a fun of Rust, one thing that saddens me is knowing these things would be difficult to achieve with a Rust compiler, given the language seems to be vastly more complex.

    Unless someone created a subset of Rust without (some?) safety checks, I guess.

    • isitcontent 13 hours ago ago

      Right, Rust is more complex, and it is the complex bits that make it Rust. There are sure some shortcuts possible for starters, for example scope-based lifetimes like in early Rust versions, but still, to make it a worthwhile upgrade over C, it would take some intermediate representation, and definitely more than 700 lines.

      There is a lively movement for coding in Rust for esp32, that works, just not on the device I think.

      • apitman 5 hours ago ago

        I would love to see something like C with a borrow checker and Result/Option but not the fancy type system.

  • MobiusHorizons 15 hours ago ago

    Very cool! What was the shell you are running in the demo video?

    • isitcontent 15 hours ago ago

      Thanks! That is just my small custom experimental mini shell. This project started as a retro DOS-like cyberdeck, and first thing I tried to run there was DOS programs, which is why it looks like that. Only got to COM files, when I learned about elf_loader, so I now focus on that. I might extract and release whatever is valuable/reusable in that shell later on.

      • guestbest 14 hours ago ago

        Thanks for posting this here. I star’d the project. Getting a portable computer with a minimal flexible and previously well supported operating system was one of my goals for the esp32 as well. I’ll be watching for more.

      • MobiusHorizons 13 hours ago ago

        Yeah, very cool. I was thinking about possibly porting it to risc-v and using it on my fpga based core. I was trying to build a monitor style shell, but C like environment would be very cool.

        • isitcontent 13 hours ago ago

          Porting to different CPU/bytecodes should be doable. Just keep in mind that in ESP-IDF we also get the dynamic linker and the libc for free (and any other C functions exposed in the firmware). On the other platforms, that may be some extra work for the compiler.

          • MobiusHorizons 6 hours ago ago

            Yea I was understanding that hurdle, but thanks for the reminder.

  • nunobrito 13 hours ago ago

    Can this run ELF programs that are placed on the memory card?

    • isitcontent 13 hours ago ago

      I only wrote the compiler. But ESP-IDF elf_loader component can do that, yes.