Chiprun

Limits & errors

What a run can do, what it costs against your quota, and what to do when something comes back red.

Limits

Firmware size32 MB per ELF
Virtual time per runUp to 60s, board-dependent
Maximum wait120s before a run reports back as still queued
UART output64 KB, truncated beyond that
Upload slot lifetime10 minutes
Firmware retention7 days, then deleted

Daily run quota

None of this applies to a live session: the engine runs in your browser, so there is no queue, no upload, no size cap and no quota. The limits below are for queued runs — the ones an agent makes over MCP, and the ones that produce a shareable permalink.

Simulation runs have their own budget, separate from the product-data API quota. It resets at 00:00 UTC, and chiprun_help reports what you have left.

If the free allowance is not enough — a class, a course project, anything real — ask for a larger one. Teaching and coursework requests are granted, there is no billing step, and it takes one sentence. The number below is a starting point, not a wall.

The budget is measured in simulated seconds — how much time the chip experiences, not how many times you press run. A two-second run costs two seconds. It used to be counted per run, which charged a two-second run the same as a thirty-second one.

A run is billed for what it uses, not what it asks for: the full amount is held while the job is queued, then reconciled when it completes. In practice the two are almost always the same, because firmware loops forever and the run ends when the clock runs out rather than when the program does. It differs only for an image that goes quiescent.

free120 simulated seconds/day
paidunlimited

What a run covers

  • CPU execution of your ELF or Intel HEX image.
  • USART capture — this is what comes back as output.
  • Peripheral registers and interrupt timing matching the physical chip.
  • The circuit past the pin: per-net voltages and per-element currents, because the board is solved rather than assumed.

Print over USART0 — that is the output captured in the run. There is no semihosting on AVR to fall back to. A run also reports what the engine declined to model: the Uno's crystal is fitted but its oscillator is not solved, for instance, because the clock comes from the fuse bytes.

Errors

Unknown board

Call chiprun_list_boards. Board keys are exact strings; the list is authoritative and may be ahead of the docs.

Unknown firmware_id

Create an upload slot first, and make sure the PUT to upload_url actually succeeded before running.

Firmware object is empty or was never uploaded

The slot was issued but no bytes arrived. Re-check the PUT — it needs Content-Type: application/octet-stream and the raw ELF as the body.

Firmware is N bytes, over the limit

Strip debug symbols or build in release mode. The cap is checked before the run, not at upload, because a presigned URL cannot enforce size.

Daily simulation quota exhausted

Resets at 00:00 UTC. chiprun_help shows your remaining count.

Run did not finish in time and is still queued

The queue is backed up rather than your firmware being broken. Retry shortly; the job keeps running and its result is not lost.

status: timeout

Not a failure. Your firmware was still executing when the virtual-time cap was reached — normal for anything with a main loop. The UART captured up to that point is returned.

Still stuck? The per-board notes cover the chip-specific traps that account for most confusing output.