Public Noodle API for small CNN/ML inference on microcontrollers. More...
#include <stdint.h>#include <stddef.h>#include "noodle_config.h"#include "noodle_fs.h"#include "noodle_buffer.h"

Go to the source code of this file.
Classes | |
| struct | Conv |
| File-backed convolution parameter bundle. More... | |
| struct | ConvFile |
| File-backed convolution parameter bundle alias. More... | |
| struct | ConvMem |
| Memory-backed convolution parameter bundle. More... | |
| struct | ConvProgmem |
| Near-PROGMEM convolution parameter bundle. More... | |
| struct | Pool |
| Valid-pooling parameter bundle. More... | |
| struct | FCN |
| File-backed fully connected parameter bundle. More... | |
| struct | FCNFile |
| File-backed fully connected parameter bundle alias. More... | |
| struct | FCNMem |
| Memory-backed fully connected parameter bundle. More... | |
| struct | FCNProgmem |
| Far-PROGMEM fully connected parameter bundle for AVR. More... | |
Macros | |
| #define | NULL 0 |
Typedefs | |
| typedef unsigned char | byte |
| Arduino-compatible byte alias for non-Arduino builds. | |
| typedef void(* | CBFPtr) (float progress) |
| Progress callback used by long-running layer routines. | |
Enumerations | |
| enum | Activation : uint8_t { ACT_NONE = 0 , ACT_RELU = 1 , ACT_SOFTMAX = 2 } |
| Activation applied after bias where supported. More... | |
Functions | |
| static float | noodle_pgm_float (const float *p, uint32_t idx) |
| Read a float from normal memory or near AVR PROGMEM. | |
| bool | noodle_fs_init (uint8_t clk_pin, uint8_t cmd_pin, uint8_t d0_pin) |
| Initialize SD_MMC with explicit 1-bit pins, or default-init other backends. | |
| bool | noodle_fs_init (uint8_t clk_pin, uint8_t cmd_pin, uint8_t d0_pin, uint8_t d1_pin, uint8_t d2_pin, uint8_t d3_pin) |
| Initialize SD_MMC with explicit 4-bit pins, or default-init other backends. | |
| bool | noodle_fs_init () |
| Initialize the selected filesystem backend with default settings. | |
| bool | noodle_fs_init (uint8_t cs_pin) |
| Initialize the selected filesystem backend with an SPI chip-select pin. | |
| bool | noodle_fs_init (uint8_t cs_pin, SPIClass &spi, uint8_t sck_mhz) |
| Initialize SdFat with an explicit SPI bus and clock speed. | |
| void | noodle_read_top_line (const char *fn, char *line, size_t maxlen) |
| Read the first line from a text file. | |
| void | noodle_delete_file (const char *fn) |
| Delete a file through the selected filesystem backend. | |
| size_t | noodle_read_bytes_until (NDL_File &file, char terminator, char *buffer, size_t length) |
| Read bytes until a terminator or until the buffer is full. | |
| void | noodle_write_float (NDL_File &f, float d) |
| Write a float using NOODLE_FILE_FORMAT. | |
| float | noodle_read_float (NDL_File &f) |
| Read a float using NOODLE_FILE_FORMAT. | |
| byte | noodle_read_byte (NDL_File &f) |
| Read a byte using NOODLE_FILE_FORMAT. | |
| void | noodle_write_byte (NDL_File &f, byte d) |
| Write a byte using NOODLE_FILE_FORMAT. | |
| void | noodle_setup_temp_buffers (void *b1, void *b2) |
| Install caller-owned internal scratch buffers. | |
| void | noodle_setup_temp_buffers (void *b2) |
| Install only the caller-owned accumulation scratch buffer. | |
| void | noodle_temp_buffers_free (void) |
| Release automatically allocated internal scratch buffers. | |
| float * | noodle_create_buffer (uint16_t size) |
| Allocate a raw byte buffer and return it as a float pointer. | |
| void | noodle_delete_buffer (float *buffer) |
| Free a buffer allocated by noodle_create_buffer(). | |
| void | noodle_array_to_file (float *array, const char *fn, uint16_t n) |
| Write a float array to a file. | |
| void | noodle_grid_to_file (byte *grid, const char *fn, uint16_t n) |
| Write an n x n byte grid to a file in row-major order. | |
| void | noodle_grid_to_file (float *grid, const char *fn, uint16_t n) |
| Write an n x n float grid to a file in row-major order. | |
| void | noodle_array_from_file (const char *fn, float *buffer, uint16_t K) |
| Read a float array from a file. | |
| void | noodle_grid_from_file (const char *fn, byte *buffer, uint16_t K) |
| Read a K x K grid into a byte buffer. | |
| void | noodle_grid_from_file (const char *fn, int8_t *buffer, uint16_t K) |
| Read a K x K grid into an int8 buffer. | |
| void | noodle_grid_from_file (const char *fn, float *buffer, uint16_t K) |
| Read a K x K grid into a float buffer. | |
File-backed layers | |
File-backed convolution APIs read packed input tensors from files, stream parameters from files or memory/PROGMEM, and write packed output tensors to a file. They return the output width/length, or 0 on allocation/open/shape failure. | |
| uint16_t | noodle_conv_byte (const char *in_fn, uint16_t n_inputs, uint16_t n_outputs, const char *out_fn, uint16_t W, const Conv &conv, const Pool &pool, CBFPtr progress_cb=0) |
| Run file-to-file 2D convolution on byte input feature maps. | |
| uint16_t | noodle_conv_float (const char *in_fn, uint16_t n_inputs, uint16_t n_outputs, const char *out_fn, uint16_t W, const Conv &conv, const Pool &pool, CBFPtr progress_cb=0) |
| Run file-to-file 2D convolution on float input feature maps. | |
| uint16_t | noodle_conv_float (const char *in_fn, uint16_t n_inputs, uint16_t n_outputs, const char *out_fn, uint16_t W, const ConvMem &conv, const Pool &pool, CBFPtr progress_cb=0) |
| Run file-to-file 2D convolution with memory-backed parameters. | |
| uint16_t | noodle_conv_float (const char *in_fn, uint16_t n_inputs, uint16_t n_outputs, const char *out_fn, uint16_t W, const ConvProgmem &conv, const Pool &pool, CBFPtr progress_cb=0) |
| Run file-to-file 2D convolution with near-PROGMEM parameters. | |
| uint16_t | noodle_conv1d (const char *in_fn, uint16_t n_inputs, const char *out_fn, uint16_t n_outputs, uint16_t W, const Conv &conv, const Pool &pool, CBFPtr progress_cb=0) |
| Run file-to-file 1D convolution with file-backed parameters and pooling. | |
| uint16_t | noodle_conv1d (const char *in_fn, uint16_t n_inputs, const char *out_fn, uint16_t n_outputs, uint16_t W, const Conv &conv, CBFPtr progress_cb=0) |
| Run file-to-file 1D convolution with file-backed parameters. | |
| uint16_t | noodle_conv1d (const char *in_fn, uint16_t n_inputs, const char *out_fn, uint16_t n_outputs, uint16_t W, const ConvMem &conv, CBFPtr progress_cb=0) |
| Run file-to-file 1D convolution with memory-backed parameters. | |
| uint16_t | noodle_dwconv_float (const char *in_fn, uint16_t n_channels, const char *out_fn, uint16_t W, const Conv &conv, const Pool &pool, CBFPtr progress_cb=0) |
| Run file-to-file depthwise 2D convolution with file-backed parameters. | |
| uint16_t | noodle_dwconv_float (const char *in_fn, uint16_t n_channels, const char *out_fn, uint16_t W, const ConvProgmem &conv, const Pool &pool, CBFPtr progress_cb=0) |
| Run file-to-file depthwise 2D convolution with near-PROGMEM parameters. | |
| uint16_t | noodle_fcn (const int8_t *input, uint16_t n_inputs, uint16_t n_outputs, const char *out_fn, const FCNFile &fcn, CBFPtr progress_cb=0) |
| Run a fully connected layer from int8 memory to a file. | |
| uint16_t | noodle_fcn (const byte *input, uint16_t n_inputs, uint16_t n_outputs, const char *out_fn, const FCNFile &fcn, CBFPtr progress_cb=0) |
| Run a fully connected layer from byte memory to a file. | |
| uint16_t | noodle_fcn (const char *in_fn, uint16_t n_inputs, uint16_t n_outputs, const char *out_fn, const FCNFile &fcn, CBFPtr progress_cb=0) |
| Run a fully connected layer from a file to a file. | |
NoodleBuffer RAM-to-RAM layers | |
These overloads read input from input->data, grow | |
| uint16_t | noodle_conv_float (NoodleBuffer *input, uint16_t n_inputs, uint16_t n_outputs, NoodleBuffer *output, uint16_t W, const Conv &conv, const Pool &pool, CBFPtr progress_cb=0) |
| Run 2D convolution using file-backed parameters. | |
| uint16_t | noodle_conv_float (NoodleBuffer *input, uint16_t n_inputs, uint16_t n_outputs, NoodleBuffer *output, uint16_t W, const ConvMem &conv, const Pool &pool, CBFPtr progress_cb=0) |
| Run 2D convolution using memory-backed parameters. | |
| uint16_t | noodle_conv_float (NoodleBuffer *input, uint16_t n_inputs, uint16_t n_outputs, NoodleBuffer *output, uint16_t W, const ConvProgmem &conv, const Pool &pool, CBFPtr progress_cb=0) |
| Run 2D convolution using near-PROGMEM parameters. | |
| uint16_t | noodle_conv1d (NoodleBuffer *input, uint16_t n_inputs, NoodleBuffer *output, uint16_t n_outputs, uint16_t W, const ConvMem &conv, CBFPtr progress_cb=0) |
| Run 1D convolution using memory-backed parameters. | |
| uint16_t | noodle_conv1d (NoodleBuffer *input, uint16_t n_inputs, NoodleBuffer *output, uint16_t n_outputs, uint16_t W, const ConvMem &conv, const Pool &pool, CBFPtr progress_cb=0) |
| Run 1D convolution using memory-backed parameters and pooling. | |
| uint16_t | noodle_dwconv_float (NoodleBuffer *input, uint16_t n_channels, NoodleBuffer *output, uint16_t W, const Conv &conv, const Pool &pool, CBFPtr progress_cb=0) |
| Run depthwise 2D convolution using file-backed parameters. | |
| uint16_t | noodle_dwconv_float (NoodleBuffer *input, uint16_t n_channels, NoodleBuffer *output, uint16_t W, const ConvMem &conv, const Pool &pool, CBFPtr progress_cb=0) |
| Run depthwise 2D convolution using memory-backed parameters. | |
| uint16_t | noodle_dwconv_float (NoodleBuffer *input, uint16_t n_channels, NoodleBuffer *output, uint16_t W, const ConvProgmem &conv, const Pool &pool, CBFPtr progress_cb=0) |
| Run depthwise 2D convolution using near-PROGMEM parameters. | |
| uint16_t | noodle_conv_transpose_float (NoodleBuffer *input, uint16_t n_inputs, uint16_t n_outputs, NoodleBuffer *output, uint16_t W, const ConvMem &conv, CBFPtr progress_cb=0) |
| Run 2D transpose convolution using memory-backed parameters. | |
| uint16_t | noodle_fcn (NoodleBuffer *input, uint16_t n_inputs, uint16_t n_outputs, NoodleBuffer *output, const FCNMem &fcn, CBFPtr progress_cb=0) |
| Run a fully connected layer using memory-backed parameters. | |
| uint16_t | noodle_fcn (NoodleBuffer *input, uint16_t n_inputs, uint16_t n_outputs, NoodleBuffer *output, const FCNFile &fcn, CBFPtr progress_cb=0) |
| Run a fully connected layer using file-backed parameters. | |
| uint16_t | noodle_fcn (NoodleBuffer *input, uint16_t n_inputs, uint16_t n_outputs, NoodleBuffer *output, const FCNProgmem &fcn, CBFPtr progress_cb=0) |
| Run a fully connected layer using far-PROGMEM parameters. | |
| uint16_t | noodle_fcn (const byte *input, uint16_t n_inputs, uint16_t n_outputs, NoodleBuffer *output, const FCNFile &fcn, CBFPtr progress_cb=0) |
| Run a fully connected layer from byte memory to a NoodleBuffer. | |
| uint16_t | noodle_fcn (const int8_t *input, uint16_t n_inputs, uint16_t n_outputs, NoodleBuffer *output, const FCNFile &fcn, CBFPtr progress_cb=0) |
| Run a fully connected layer from int8 memory to a NoodleBuffer. | |
| uint16_t | noodle_fcn (const char *in_fn, uint16_t n_inputs, uint16_t n_outputs, NoodleBuffer *output, const FCNFile &fcn, CBFPtr progress_cb=0) |
| Run a fully connected layer from a file to a NoodleBuffer. | |
| uint16_t | noodle_fcn_progmem (NoodleBuffer *input, uint16_t n_inputs, uint16_t n_outputs, NoodleBuffer *output, const float *weight, const float *bias, Activation act, CBFPtr progress_cb=0) |
| Run a fully connected layer using near-PROGMEM weights. | |
| uint16_t | noodle_flat (const char *in_fn, NoodleBuffer *output, uint16_t V, uint16_t n_filters) |
| Flatten a packed file tensor into a NoodleBuffer. | |
| uint16_t | noodle_flat (NoodleBuffer *input, NoodleBuffer *output, uint16_t V, uint16_t n_filters) |
| Flatten a packed NoodleBuffer tensor into HWC-like order. | |
| uint16_t | noodle_reshape (NoodleBuffer *src_hwc, NoodleBuffer *dst_chw, uint16_t W, uint16_t C) |
| Convert HWC-like NoodleBuffer data to packed channel-first data. | |
| uint16_t | noodle_gap (NoodleBuffer *inout, uint16_t C, uint16_t W) |
| Apply global average pooling in place on packed channel-first maps. | |
| uint16_t | noodle_gmp (NoodleBuffer *inout, uint16_t C, uint16_t W) |
| Apply global max pooling in place on packed channel-first data. | |
| uint16_t | noodle_soft_max (NoodleBuffer *input_output, uint16_t n) |
| Apply numerically stabilized softmax in place on a NoodleBuffer. | |
| uint16_t | noodle_sigmoid (NoodleBuffer *input_output, uint16_t n) |
| Apply sigmoid in place on a NoodleBuffer. | |
| float | noodle_sigmoidf (float x) |
| Compute sigmoid for one scalar. | |
| uint16_t | noodle_logit (NoodleBuffer *input_output, uint16_t n) |
| Apply logistic sigmoid in place on a NoodleBuffer. | |
| uint16_t | noodle_relu (NoodleBuffer *input_output, uint16_t n) |
| Apply ReLU in place on a NoodleBuffer. | |
| void | noodle_find_max (NoodleBuffer *input, uint16_t n, float &max_val, uint16_t &max_idx) |
| Find the maximum value and its index in a NoodleBuffer vector. | |
| uint16_t | noodle_bn1d (NoodleBuffer *x, uint16_t N, const float *gamma, const float *beta, const float *mean, const float *var, float eps) |
| Apply 1D batch normalization in place to a NoodleBuffer vector. | |
| uint16_t | noodle_bn1d (NoodleBuffer *x, uint16_t N, const float *bn_params, float eps) |
| Apply 1D batch normalization from a packed parameter array. | |
| uint16_t | noodle_bn1d_relu (NoodleBuffer *x, uint16_t N, const float *gamma, const float *beta, const float *mean, const float *var, float eps) |
| Apply 1D batch normalization followed by ReLU in place. | |
| uint16_t | noodle_bn1d_relu (NoodleBuffer *x, uint16_t N, const float *bn_params, float eps) |
| Apply packed 1D batch normalization followed by ReLU in place. | |
| uint16_t | noodle_bn2d (NoodleBuffer *x, uint16_t C, uint16_t W, const float *gamma, const float *beta, const float *mean, const float *var, float eps) |
| Apply 2D channel-wise batch normalization in place. | |
| uint16_t | noodle_bn2d (NoodleBuffer *x, uint16_t C, uint16_t W, const float *bn_params, float eps) |
| Apply 2D channel-wise batch normalization from packed parameters. | |
| uint16_t | noodle_bn2d_relu (NoodleBuffer *x, uint16_t C, uint16_t W, const float *gamma, const float *beta, const float *mean, const float *var, float eps) |
| Apply 2D channel-wise batch normalization followed by ReLU. | |
| uint16_t | noodle_bn2d_relu (NoodleBuffer *x, uint16_t C, uint16_t W, const float *bn_params, float eps) |
| Apply packed 2D batch normalization followed by ReLU. | |
| uint16_t | noodle_bn (NoodleBuffer *x, uint16_t C, uint16_t W, const float *gamma, const float *beta, const float *mean, const float *var, float eps) |
| Backward-compatible alias for noodle_bn2d(). | |
| uint16_t | noodle_bn (NoodleBuffer *x, uint16_t C, uint16_t W, const float *bn_params, float eps) |
| Backward-compatible alias for packed-parameter noodle_bn2d(). | |
| uint16_t | noodle_bn_relu (NoodleBuffer *x, uint16_t C, uint16_t W, const float *gamma, const float *beta, const float *mean, const float *var, float eps) |
| Backward-compatible alias for noodle_bn2d_relu(). | |
| uint16_t | noodle_bn_relu (NoodleBuffer *x, uint16_t C, uint16_t W, const float *bn_params, float eps) |
| Backward-compatible alias for packed-parameter noodle_bn2d_relu(). | |
Public Noodle API for small CNN/ML inference on microcontrollers.
Noodle provides compact convolution, depthwise convolution, transpose convolution, fully connected, pooling, activation, batch-normalization, and tensor-layout helpers. The public RAM-to-RAM layer functions use NoodleBuffer so tensor storage can grow automatically. Raw float pointers are kept for small math utilities, simple file utilities, and private implementation helpers declared in noodle_internal.h.
Unless a function says otherwise, feature maps use channel-first packed storage:
File-backed APIs use the scalar encoding selected by NOODLE_FILE_FORMAT. Text mode stores one scalar at a time; binary mode stores raw scalar bytes in the same packed order.
Internal convolution scratch buffers are allocated and grown on demand by default. The legacy noodle_setup_temp_buffers() overloads can still install fixed caller-owned buffers; when they are used, Noodle treats those pointers as external memory with unknown capacity and never resizes or frees them.
| #define NULL 0 |
| typedef unsigned char byte |
Arduino-compatible byte alias for non-Arduino builds.