embedded-c-arduino — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited embedded-c-arduino (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
malloc, calloc, realloc, and free. Heap fragmentation on constrained MCUs causes unpredictablefailures.
String class on AVR microcontrollers. Use statically allocated char arrays (C-strings)exclusively.
PROGMEM keyword to store them in Flashinstead of SRAM.
while or for loop may execute indefinitely, even under hardware failure ordisconnected peripheral conditions.
wdt_reset()periodically to recover from hard faults.
goto, setjmp/longjmp, or any form of direct or indirect recursion (MISRA C:2012 Required Rule 15.2,17.2).
delay() calls with non-blocking state machines driven by millis() or hardware timers.volatile flag and return. Defer all processing to the mainloop.
volatile keyword to prevent compilerover-optimisation.
noInterrupts() / cli()) only for the shortest possible critical section when reading orwriting multi-byte volatile variables, then re-enable immediately.
Serial.print, or dynamic allocations from inside an ISR.<stdint.h> (uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t) for allregister-level and protocol code.
int, long, or short for hardware-mapped values; their sizes are architecture-dependent.size_t for buffer lengths and loop indices over arrays.defaults requiring documented justification to deviate.
.c and .h files..c and .h file containing: description, author, date, target hardware, andlicence.
#define constants in UPPER_SNAKE_CASE; name functions in lower_snake_case.manipulation.
read() for inputs, write() for outputs, begin() forinitialisation.
prevent hanging when a peripheral disconnects.
hal_gpio_write, hal_gpio_read,hal_uart_send, hal_uart_recv, hal_spi_transfer, etc.
hal_gpio_avr.c,hal_uart_avr.c).
hardware.
orchestrator.
test/ mirroring the src/ directory structure; one test file per source module.SLEEP_MODE_PWR_DOWN for deepest sleep (wake via external interrupt only).SLEEP_MODE_IDLE for light sleep (wake via any interrupt including timers).PRR / PRR0 / PRR1) beforeentering sleep.
When using FreeRTOS on Arduino-compatible hardware (AVR FreeRTOS library, ESP-IDF, or similar):
uxTaskGetStackHighWaterMark() profiling; never use arbitrarylarge values.
xSemaphoreCreateMutex) for shared resource protection from task context; do not disable interrupts fromtasks.
xSemaphoreCreateBinary) for ISR-to-task synchronisation; never call FreeRTOS blocking APIs(xSemaphoreTake, vTaskDelay, etc.) from within an ISR.
xSemaphoreGiveFromISR / xQueueSendFromISR for all ISR-to-task communication; always pass and checkpxHigherPriorityTaskWoken.
0xAA 0x55) and a 1-byte protocol version field.silently process corrupt data.
docs/PROTOCOL.md.receiving the incoming image.
first boot, revert to the previous bank automatically.
analysis.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.