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 size | 32 MB per ELF |
| Virtual time per run | Up to 60s, board-dependent |
| Maximum wait | 120s before a run reports back as still queued |
| UART output | 64 KB, truncated beyond that |
| Upload slot lifetime | 10 minutes |
| Firmware retention | 7 days, then deleted |
Daily run quota
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.
| free | 20 runs/day |
| pro | 500 runs/day |
| business | 5,000 runs/day |
What a run covers
- CPU execution of your ELF binary.
- UART/USART/LPUART capture — this is what comes back as output.
- Peripheral registers and interrupt timing matching the physical chip.
Semihosting output is not captured; print over the UART instead. On QEMU boards a semihosting exit does end the run early, which is handy for test firmware that knows when it's done.
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.