# NeoECU Firmware Coding Guidelines

These rules apply to the `CM7` engine-control firmware.

## Style

- Functions: `camelCase`
- Variables: `python_case`
- Constants and macros: `UPPER_CASE`
- Types: `python_case_t`

## Real-Time Code

- Do not allocate from the heap in the engine-control path.
- Prefer static task, buffer, and control-structure allocation.
- Keep ISRs short: capture data, update the minimum state, wake a task, return.
- Keep heavy validation, filtering, and scheduling logic in task context.
- Avoid avoidable copies, indirection, and generic `void *` plumbing.

## Structure

- Keep one source file per feature or subsystem where practical.
- Put shared engine state in `global_state.h`.
- Put shared helper macros in `macros.h`.
- Prefer explicit state machines over implicit control flow.
- Make ISR-to-task ownership obvious from names and file placement.
- Use named constants and enums instead of magic numbers.
