|
ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
|
#147/#162/#164 glyph-cache workload sweep: drive the real ra8_glyph_atlas with a realistic text-render glyph stream and report the hit rate (and rasterisations saved) versus the cache budget. More...
#include <signal.h>#include <stddef.h>#include <stdint.h>#include <string.h>#include <unistd.h>#include "ra8_attributes.h"#include "ra8_err.h"#include "ra8_glyph_atlas.h"#include "ra8_io_stream.h"#include "ra8_io_stream_posix.h"#include "ra8_keycache.h"#include "ra8_log.h"Go to the source code of this file.
Data Structures | |
| struct | gb_workspace_t |
| Exact caller-owned backing for the largest measured atlas. More... | |
Enumerations | |
| enum | gb_dim_t : uint32_t { k_gb_pages = 200U , k_gb_page_glyphs = 1800U , k_gb_reread_pages = 3U , k_gb_body_px = 24U , k_gb_heading_px = 36U , k_gb_heading_pct = 3U , k_gb_cap_pct = 8U , k_gb_punct_pct = 6U , k_gb_digit_pct = 2U , k_gb_pct_base = 100U , k_gb_cell_bytes = 64U , k_gb_buckets = 512U , k_gb_prod_cell_kib = 36U , k_gb_max_budget = 256U , k_gb_decimal_scale = 100U , k_gb_dec_radix = 10U , k_gb_budget_width = 5U , k_gb_ram_width = 12U , k_gb_hit_width = 7U , k_gb_raster_width = 14U } |
| Workload model dimensions (no bare literals). More... | |
| enum | gb_const_t : uint32_t { k_gb_xs_a = 13U , k_gb_xs_b = 7U , k_gb_xs_c = 17U , k_gb_ascii_az_a = 97U , k_gb_ascii_az_z = 26U , k_gb_case_delta = 32U , k_gb_ascii_0 = 48U , k_gb_digits = 10U } |
| xorshift64 + fill constants. More... | |
| enum | gb_seed_t : uint64_t { k_gb_seed = 0xD1B54A32D192ED03ULL } |
| Deterministic xorshift64 seed. More... | |
| enum | gb_freq_t : uint32_t { k_gb_freq_total = 9999U } |
| Sum of s_gb_letter_freq (the selection range). More... | |
Functions | |
| static ra8_err_t | internal_write_parts (ra8_io_stream_t *stream, const char *const *parts, size_t count) |
| Write a fixed sequence of NUL-terminated fragments exactly. | |
| static void | internal_log_byte (void *context, uint8_t byte) |
| Forward one logger byte into the bound diagnostic stream. | |
| static ra8_err_t | internal_output_init (void) |
| Bind process output descriptors and make broken pipes observable. | |
| static uint64_t | internal_gb_rng (uint64_t *s) |
| Advance a fixed-seed xorshift64 generator and return the new state. | |
| static uint32_t | internal_gb_below (uint64_t *s, uint32_t span) |
Draw a uniform pseudo-random integer in [0, span). | |
| static uint32_t | internal_gb_pick_letter (uint64_t *s) |
| Pick a lowercase letter codepoint weighted by English frequency. | |
| static uint32_t | internal_gb_pick_codepoint (uint64_t *s) |
| Choose one codepoint for the glyph stream from the weighted mix. | |
| static ra8_err_t | internal_gb_render (void *ctx, const ra8_glyph_key_t *key, uint8_t *cell, uint32_t cell_bytes, uint16_t *out_w, uint16_t *out_h) |
| Atlas render-on-miss callback: stand in for one rasterisation. | |
| static ra8_err_t | internal_submit_access (ra8_glyph_atlas_t *atlas, uint64_t *rng) |
| Generate and submit one deterministic glyph access. | |
| static ra8_err_t | internal_replay_page_glyphs (ra8_glyph_atlas_t *atlas, uint64_t *page_rng) |
| Replay one page's fixed glyph-access sequence against a running RNG. | |
| static ra8_err_t | internal_replay_workload (ra8_glyph_atlas_t *atlas) |
| Regenerate and replay the exact legacy session without a trace buffer. | |
| static ra8_err_t | internal_run_budget (uint32_t budget, uint32_t *out_hits, uint32_t *out_rasters) |
| Execute one budget against the caller-visible fixed atlas backing. | |
| static ra8_err_t | internal_put_padded_u64 (ra8_io_stream_t *stream, uint64_t value, uint32_t width) |
| Write one unsigned value left-padded to a fixed field width. | |
| static ra8_err_t | internal_report_header (void) |
| Write the fixed report preamble and workload dimensions. | |
| static ra8_err_t | internal_report_row (uint32_t budget, uint32_t hits, uint32_t rasters) |
| Write one exact table row from integer hit/miss evidence. | |
| static ra8_err_t | internal_run_report (void) |
| Run the complete deterministic cache-budget report. | |
| int | main (void) |
| The application entry point Reset_Handler hands control to. | |
Variables | |
| static const uint32_t | s_gb_budgets [] |
| Swept cache budgets (cell counts). | |
| static const uint16_t | s_gb_letter_freq [26] |
| English letter relative frequencies, scaled to a per-mille-ish table indexed by letter (a..z). | |
| static gb_workspace_t | s_gb_workspace |
| Process-lifetime semantic backing for one measured atlas. | |
| static ra8_io_stream_t | s_gb_output |
| Borrowed stdout/stderr portable stream handles. | |
| static ra8_io_stream_t | s_gb_diagnostic |
| static ra8_io_stream_posix_state_t | s_gb_output_posix |
| Raw-descriptor adapter states for the borrowed process streams. | |
| static ra8_io_stream_posix_state_t | s_gb_diagnostic_posix |
| static const uint32_t | s_gb_punct [] = {' ', '.', ',', ';', ':', '\'', '"', '-', '!', '?'} |
| A small punctuation/space repertoire (codepoints). | |
| static const uint64_t | s_gb_access_total |
| Total glyph accesses in the deterministic session. | |
#147/#162/#164 glyph-cache workload sweep: drive the real ra8_glyph_atlas with a realistic text-render glyph stream and report the hit rate (and rasterisations saved) versus the cache budget.
HOST tool (not firmware). The Layer-3 glyph atlas earns its keep when the renderer stops re-rasterising glyphs it just drew; this sweep quantifies that on a realistic page-render workload so #164 can size the cell budget. It models reading a book: each page draws a stream of glyphs from an English letter-frequency distribution (plus spaces, capitals, punctuation, digits) at a body font size with occasional headings, and page-turns re-render the same working set. The stream is replayed through the ACTUAL ra8_glyph_atlas at a range of budgets (cell counts); for each it reports the hit rate and the number of render-on-miss calls (= rasterisations the renderer would actually perform).
Cache hit/miss/eviction depends only on the key stream and the budget, not on the bitmap content, so the render callback is a cheap deterministic stub – the measured hit rate is exact. Each cell in production is sized to the largest glyph bitmap (2 * max font px squared, ~36 KiB), so the RAM cost of a budget is cells * ~36 KiB; the table prints that so the knee is easy to read.
[Ring 7 / Tooling] {World: NS}
Definition in file glyph_bench.c.
| enum gb_const_t : uint32_t |
xorshift64 + fill constants.
Definition at line 70 of file glyph_bench.c.
| enum gb_dim_t : uint32_t |
Workload model dimensions (no bare literals).
Definition at line 46 of file glyph_bench.c.
| enum gb_freq_t : uint32_t |
Sum of s_gb_letter_freq (the selection range).
| Enumerator | |
|---|---|
| k_gb_freq_total | Sum of the 26 letter weights above. |
Definition at line 100 of file glyph_bench.c.
| enum gb_seed_t : uint64_t |
Deterministic xorshift64 seed.
| Enumerator | |
|---|---|
| k_gb_seed | Fixed seed. |
Definition at line 82 of file glyph_bench.c.
|
static |
Draw a uniform pseudo-random integer in [0, span).
Advances internal_gb_rng once and reduces modulo span. The modulo bias is negligible for the small spans this workload uses and does not affect the cache hit/miss decision being measured.
| [in,out] | s | Generator state, advanced by one step when span > 0. |
| [in] | span | Exclusive upper bound of the range. |
span). | 0 | span was 0 (an empty range is reported as 0). |
s is non-NULL and seeded. span fits the intended selection range. s is advanced by exactly one step when span is non-zero. span (or 0 when span is 0).s with the caller. Definition at line 257 of file glyph_bench.c.
References internal_gb_rng(), and RA8_INTERNAL.
Referenced by internal_gb_pick_codepoint(), internal_gb_pick_letter(), and internal_submit_access().
|
static |
Choose one codepoint for the glyph stream from the weighted mix.
Rolls once to split the repertoire into punctuation/space (k_gb_punct_pct), digits (k_gb_digit_pct) and letters (the remainder); for a letter it draws a frequency-weighted lowercase codepoint (internal_gb_pick_letter) and upper-cases it with probability k_gb_cap_pct. The distribution mirrors body text so the atlas working set matches a real page.
| [in,out] | s | Generator state, advanced during selection. |
| 32 | (space) when the punctuation roll selected the first repertoire entry, s_gb_punct[0]. |
s is non-NULL and seeded. s is advanced by one or more steps. s with the caller. Definition at line 324 of file glyph_bench.c.
References internal_gb_below(), internal_gb_pick_letter(), k_gb_ascii_0, k_gb_cap_pct, k_gb_case_delta, k_gb_digit_pct, k_gb_digits, k_gb_pct_base, k_gb_punct_pct, RA8_INTERNAL, and s_gb_punct.
Referenced by internal_submit_access().
|
static |
Pick a lowercase letter codepoint weighted by English frequency.
Draws a value in [0, k_gb_freq_total) and walks the cumulative s_gb_letter_freq table, so 'e'/'t'/'a' appear far more often than 'q'/'z' – the distribution that makes the glyph cache behave like real text. The final fallthrough returns 'a' only if a rounding gap leaves the draw unmatched.
| [in,out] | s | Generator state, advanced during selection. |
| 97 | ('a') the frequency walk fell through (draw exceeded the table sum). |
s is non-NULL and seeded. s is advanced. s with the caller. Definition at line 285 of file glyph_bench.c.
References internal_gb_below(), k_gb_ascii_az_a, k_gb_ascii_az_z, k_gb_freq_total, RA8_INTERNAL, and s_gb_letter_freq.
Referenced by internal_gb_pick_codepoint().
|
static |
Atlas render-on-miss callback: stand in for one rasterisation.
The atlas invokes this on a cache miss to fill the freed cell. Hit / miss / eviction depends only on the key stream and the budget, not on the bitmap content, so this stub just zeroes the cell and reports a 1x1 glyph – each call therefore counts as exactly one rasterisation the renderer would have performed, keeping the measured hit rate exact while the bench stays cheap.
| [in] | ctx | Unused render context (the bench carries no state). |
| [in] | key | Unused glyph key (content is irrelevant to hit rate). |
| [out] | cell | Cell memory to fill; zeroed here. |
| [in] | cell_bytes | Size of cell in bytes. |
| [out] | out_w | Receives the glyph width (1). |
| [out] | out_h | Receives the glyph height (1). |
| k_ra8_ok | Always; the stub cannot fail. |
cell is non-NULL with at least cell_bytes bytes. out_w and out_h are non-NULL. cell is zeroed and out_w / out_h are set to 1. Definition at line 369 of file glyph_bench.c.
References k_ra8_ok, memset(), and RA8_INTERNAL.
Referenced by internal_run_budget().
|
static |
Advance a fixed-seed xorshift64 generator and return the new state.
The standard xorshift64 recurrence (shifts 13/7/17) over s, updated in place. Deterministic across runs and platforms, so a given seed always produces the same glyph stream – which is what makes the benched hit rate exactly reproducible.
| [in,out] | s | The 64-bit generator state; replaced with the next state. |
| 0 | Never, for a non-zero seed: xorshift64 cannot reach 0 from a non-zero state, and k_gb_seed is non-zero. |
s is non-NULL. s was seeded non-zero (k_gb_seed). s holds the advanced state. s.Definition at line 225 of file glyph_bench.c.
References k_gb_xs_a, k_gb_xs_b, k_gb_xs_c, and RA8_INTERNAL.
Referenced by internal_gb_below().
|
static |
Forward one logger byte into the bound diagnostic stream.
Adapts the repository logger's byte callback to the same bounded stream contract used for normal benchmark diagnostics.
| [in,out] | context | Bound ra8_io_stream_t destination. |
| [in] | byte | Byte emitted by the shared logger. |
context points to a bound stream. Definition at line 165 of file glyph_bench.c.
References RA8_INTERNAL, and ra8_io_stream_putc().
Referenced by internal_output_init().
|
static |
Bind process output descriptors and make broken pipes observable.
Installs non-owning raw-descriptor adapters for the process streams, then binds the logger only after both adapters are valid.
| k_ra8_ok | Both borrowed descriptors are bound. |
| k_ra8_err_comm_error | SIGPIPE disposition setup failed. |
| other | A raw-descriptor binding failed. |
Definition at line 185 of file glyph_bench.c.
References internal_log_byte(), k_ra8_err_comm_error, k_ra8_ok, RA8_INTERNAL, ra8_io_stream_posix_init(), ra8_log_init(), ra8_log_set_byte_sink(), s_gb_diagnostic, s_gb_diagnostic_posix, s_gb_output, and s_gb_output_posix.
Referenced by main().
|
static |
Write one unsigned value left-padded to a fixed field width.
Counts decimal digits arithmetically, emits the required leading spaces, and delegates the value conversion to the bounded stream helper.
| [in,out] | stream | Bound destination stream. |
| [in] | value | Value to render. |
| [in] | width | Minimum field width. |
| k_ra8_ok | The complete padded value was accepted. |
| other | The first rejected padding or value write. |
stream is non-null and bound. width is a small human-report width. Definition at line 542 of file glyph_bench.c.
References k_gb_dec_radix, k_ra8_ok, ra8_io_stream_put_u64(), and ra8_io_stream_putc().
Referenced by internal_report_row().
|
static |
Replay one page's fixed glyph-access sequence against a running RNG.
Submits k_gb_page_glyphs sequential accesses, stopping at the first failure so the caller's reread loop can propagate it.
| [in,out] | atlas | Initialized measured atlas. |
| [in,out] | page_rng | Running PRNG state advanced by each access. |
| k_ra8_ok | Every glyph access in the page completed. |
| other | The first glyph access failure. |
atlas is non-null and ready for ra8_glyph_atlas_get. page_rng designates a valid PRNG state. page_rng through the full page sequence. Definition at line 434 of file glyph_bench.c.
References internal_submit_access(), k_gb_page_glyphs, k_ra8_ok, and RA8_INTERNAL.
Referenced by internal_replay_workload().
|
static |
Regenerate and replay the exact legacy session without a trace buffer.
Saves each page's PRNG start state, regenerates it for all rereads, then advances the session from the first pass's ending state.
| [in,out] | atlas | Initialized measured atlas. |
| k_ra8_ok | The full deterministic workload completed. |
| other | The first glyph access failure. |
atlas is non-null and ready for ra8_glyph_atlas_get. Definition at line 461 of file glyph_bench.c.
References internal_replay_page_glyphs(), k_gb_pages, k_gb_reread_pages, k_gb_seed, k_ra8_ok, and RA8_INTERNAL.
Referenced by internal_run_budget().
|
static |
Write the fixed report preamble and workload dimensions.
Emits the legacy report as bounded constant and integer fragments, avoiding locale, varargs formatting, and a large transient line buffer.
| k_ra8_ok | The complete preamble was accepted. |
| other | The first rejected fragment or integer write. |
Definition at line 571 of file glyph_bench.c.
References internal_write_parts(), k_gb_body_px, k_gb_heading_px, k_gb_page_glyphs, k_gb_pages, k_gb_reread_pages, k_ra8_ok, RA8_INTERNAL, ra8_io_stream_put_u32(), ra8_io_stream_put_u64(), ra8_io_stream_puts(), s_gb_access_total, and s_gb_output.
Referenced by internal_run_report().
|
static |
Write one exact table row from integer hit/miss evidence.
Computes the rounded two-decimal percentage with checked-width integer fields so report bytes do not depend on locale or floating point.
| [in] | budget | Measured cell budget. |
| [in] | hits | Measured hits. |
| [in] | rasters | Measured misses/rasterizations. |
| k_ra8_ok | The complete row was accepted. |
| other | The first rejected row fragment or integer write. |
Definition at line 635 of file glyph_bench.c.
References internal_put_padded_u64(), k_gb_budget_width, k_gb_dec_radix, k_gb_decimal_scale, k_gb_hit_width, k_gb_pct_base, k_gb_prod_cell_kib, k_gb_ram_width, k_gb_raster_width, k_ra8_ok, RA8_INTERNAL, ra8_io_stream_put_u32(), ra8_io_stream_putc(), ra8_io_stream_puts(), s_gb_access_total, and s_gb_output.
Referenced by internal_run_report().
|
static |
Execute one budget against the caller-visible fixed atlas backing.
Clears and binds the exact semantic workspace, replays the complete deterministic session, then publishes counters only after replay succeeds.
| [in] | budget | Active atlas cell count. |
| [out] | out_hits | Measured cache hits. |
| [out] | out_rasters | Measured misses/rasterizations. |
| k_ra8_ok | The budget completed and both counters were published. |
| other | Atlas initialization, replay, or statistics failed. |
budget is non-zero and at most k_gb_max_budget. Definition at line 500 of file glyph_bench.c.
References internal_gb_render(), internal_replay_workload(), k_gb_buckets, k_gb_cell_bytes, k_ra8_ok, memset(), ra8_glyph_atlas_init(), ra8_glyph_atlas_stats(), and s_gb_workspace.
Referenced by internal_run_report().
|
static |
Run the complete deterministic cache-budget report.
Writes the preamble, measures each fixed budget in order using the single semantic workspace, and appends the legacy no-cache comparison.
| k_ra8_ok | Every measurement and report write completed. |
| other | The first atlas, workload, or stream failure. |
Definition at line 696 of file glyph_bench.c.
References internal_report_header(), internal_report_row(), internal_run_budget(), k_ra8_ok, RA8_INTERNAL, ra8_io_stream_put_u64(), ra8_io_stream_puts(), s_gb_access_total, s_gb_budgets, and s_gb_output.
Referenced by main().
|
static |
Generate and submit one deterministic glyph access.
Advances the supplied page-local PRNG through the legacy heading/codepoint choices, then balances every successful atlas get with a matching put.
| [in,out] | atlas | Initialized measured atlas. |
| [in,out] | rng | Page-local generator state. |
| k_ra8_ok | One glyph access completed. |
| other | The atlas rejected the get or matching put operation. |
atlas and rng are non-null. rng is a non-zero page-start or continuation state. rng advances by the workload's fixed selection sequence. Definition at line 405 of file glyph_bench.c.
References ra8_glyph_t::bitmap, internal_gb_below(), internal_gb_pick_codepoint(), k_gb_body_px, k_gb_heading_pct, k_gb_heading_px, k_gb_pct_base, k_ra8_ok, ra8_glyph_atlas_get(), ra8_glyph_atlas_put(), and RA8_INTERNAL.
Referenced by internal_replay_page_glyphs().
|
static |
Write a fixed sequence of NUL-terminated fragments exactly.
Iterates the borrowed fragments without formatting or staging so a short/error result remains attributable to the destination stream.
| [in,out] | stream | Bound destination stream. |
| [in] | parts | Fragment vector. |
| [in] | count | Number of entries in parts. |
| k_ra8_ok | Every fragment was accepted. |
| other | The first rejected fragment's status. |
stream and parts are non-null. Definition at line 140 of file glyph_bench.c.
References k_ra8_ok, and ra8_io_stream_puts().
Referenced by internal_report_header(), and main().
| int main | ( | void | ) |
The application entry point Reset_Handler hands control to.
Returns void, not int. This is a freestanding image: there is no hosted C environment, no process and nothing to report an exit status to. ISO C fixes main at int only for a hosted implementation; for a freestanding one (C23 5.1.2.1) the startup function's name and type are implementation-defined, and this is that definition. Reset_Handler discards no value because there is none to discard, and if main ever does return, startup halts the CPU rather than resuming anything.
The firmware lane is compiled -ffreestanding (see cmake/ra8_add_app.cmake) and the flag and this signature travel together: without it both GCC and clang reject a non-int main (-Wmain / -Wmain-return-type). Do not remove one without the other.
That coupling is why the declaration sits behind __STDC_HOSTED__ == 0, which -ffreestanding sets and a hosted build does not. The guard is not defensive dressing: this header is reachable from host builds (the unit tests compile ra8_core natively), and an unguarded void main(void); makes every hosted translation unit that includes it fail with conflicting types for 'main' against its own ISO int main. The declaration therefore exists exactly where its contract does.
Hosted first-party code – everything under tests/ and tools/ – uses the ISO int main(...) contract instead, because it genuinely does run under an OS that reads the exit status. scripts/checks/check_entry_points.py holds each domain to its own contract (#707).
Declared here, once, for the same reason SystemInit is: every vector_table.c used to restate it as a local extern int32_t main(void);, sixteen copies that no compiler ever compared against the definition – and roughly thirty of them had silently drifted out of agreement with the main they called.
The application entry point Reset_Handler hands control to.
Brings up CGC + BSP audio then plays blocks.
The application entry point Reset_Handler hands control to.
Brings up CGC + GPT triple, runs sweep.
The application entry point Reset_Handler hands control to.
Brings up clocks + UART + RMII pins, then ThreadX.
The application entry point Reset_Handler hands control to.
Brings up clocks + UART, then enters ThreadX.
The application entry point Reset_Handler hands control to.
Brings up LED, console, SDHI pins, then ThreadX.
The application entry point Reset_Handler hands control to.
Brings up CGC + USB-FS + UAC1, then enters the iso-IN feed loop forever.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
See file header.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Profiles power modes once a second.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Brings up the clocks, console, SPI, and SD card, then runs the shared ra8_io VFS round-trip over the SD-over-SPI block device. On success it prints the exact PASS banner the HIL runner and ra8_emulator smoke gate scrape for; on any failure it prints FAIL and parks the core.
The application entry point Reset_Handler hands control to.
Initialises logging and the console, brings up the OSPI NOR volume, runs the erase-before-write round-trip, and prints a single PASS/FAIL verdict line over SCI8 before parking in an infinite loop.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Both USB controllers' clocks and pins come up before the kernel so the workers only deal with stack bring-up.
The application entry point Reset_Handler hands control to.
Brings up logging and the clock tree, releases the Cortex-M33 (which then blinks LED1 via ra8_pcntr_set_output()), and idles. See the file header.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Brings up logging, the clock tree, and the VCOM console, runs the cacheable-SRAM round-trip with the D-cache that SystemInit() enabled through ra8_cache_dcache_enable(), emits the matching PASS / FAIL banner over the console and ra8_log, then parks in WFI. Every byte the self-test touches runs with the L1 caches + MPU enabled by the shared boot (RA8_BOOT_ENABLE_CACHE_MPU + RA8_BOOT_CACHE_VIA_HAL).
The application entry point Reset_Handler hands control to.
Publishes the mailbox, releases the Cortex-M33 into the emitter, yields until it signals done, validates the blob the M33 built, then logs the PASS/FAIL verdict and the chapter count read back from the blob. See the file header for the offload narrative.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Publishes the mailbox, arms the IPC0 wake and configures the LPM block, releases the Cortex-M33 into the reader, waits for the first held page, logs the page-0 verdict, then runs the #150 mode-switch cycle – parking in low-power WFI and waking on the M33's page-turn pokes – before logging the handoff verdict and parking for good. See the file header for the narrative.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Brings up the timebase then measures forever.
The application entry point Reset_Handler hands control to.
Arms the RIIC1 target and polls the dispatcher.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Brings up the LIN commander then drives frames.
The application entry point Reset_Handler hands control to.
Brings up logging, "renders" page 0 into the shared mailbox, releases the Cortex-M33 into its hold loop, and parks the M85 in low-power WFI sleep. See the file header for the power-saving narrative.
The application entry point Reset_Handler hands control to.
The USB clock, pins, console, and the SD card all come up before the kernel so the worker only deals with USB stack bring-up.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Brings up logging, the clock tree, and the VCOM console, runs the three-step self-test (MPU enabled, canonical boot map, Device MMIO), emits the matching PASS / FAIL banner over the console and ra8_log, then parks in WFI.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Initialises logging + console, brings up the MRAM volume, runs the wear-levelling + power-cycle-survival flow, and prints a single PASS/FAIL verdict.
The application entry point Reset_Handler hands control to.
Initialises logging + console, brings up the MRAM volume, runs the program/erase round-trip, and prints a single PASS/FAIL verdict.
The application entry point Reset_Handler hands control to.
Brings up the clocks, console, and SDHI bus pins, runs the native SD card identification, fills the payload, then runs the full ra8_io VFS round-trip over the native-SDHI block device. On success it prints the exact PASS banner the HIL runner and ra8_emulator smoke gate scrape for; on any failure it prints FAIL and parks the core.
The application entry point Reset_Handler hands control to.
Brings up the console and both stdio sinks, retargets the engine's stdio to the in-RAM capture sink, runs the two-backend swap, replays the RAM capture out of the UART, and prints a single PASS/FAIL verdict per abstraction before parking in an infinite loop.
The application entry point Reset_Handler hands control to.
Brings up the clocks, console, and SDHI bus pins, runs the native SD card identification, fills the payload, then writes + reads + compares one raw 512-byte block straight against ra8_sdcard. On success it prints the exact PASS banner; on any failure it prints FAIL and parks the core.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Brings up clocks + UART + RMII + RSIP, then ThreadX.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Initializes and arms ADC_B, formats each successful channel sample without variadic I/O, emits the verdict, toggles LED1, and delays.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Brings up logging, releases the Cortex-M33 (which then blinks LED1), and idles. See the file header for the teaching narrative.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
See the file header for the full behaviour summary.
The application entry point Reset_Handler hands control to.
Brings up logging, the clock tree, and the VCOM console, runs the three-step self-test (cacheable SRAM, RO MRAM const, Device MMIO), emits the matching PASS / FAIL banner over the console and ra8_log, then parks in WFI. Every byte the self-test touches runs with the L1 caches and MPU enabled by the shared boot (RA8_BOOT_ENABLE_CACHE_MPU).
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Lights HOCO + PLL, then runs a 1 Hz blink.
The application entry point Reset_Handler hands control to.
See file header for behaviour summary.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Initializes the demo, executes one comparison per period, increments the exported match or mismatch counter, and toggles the matching LED.
The application entry point Reset_Handler hands control to.
Brings up the clock tree, MSTP, ISR/ELC, and the VCOM console, programs a software-triggered DTC block copy, runs it with the L1 caches + MPU enabled by the shared boot (RA8_BOOT_ENABLE_CACHE_MPU), emits the matching PASS / FAIL banner over the console and ra8_log, then parks in WFI.
The application entry point Reset_Handler hands control to.
Brings up logging, zeros the shared control block, releases the Cortex-M33, waits for its boot signature, then yields while the M33 counts autonomously to k_bg_target_count. After the M33 sets done, the M85 reads the counter and logs the PASS/FAIL verdict.
The application entry point Reset_Handler hands control to.
Brings up logging, releases the Cortex-M33, confirms it booted, runs k_m85_demo_rounds narrated mailbox rounds, then drops into the idle heartbeat. See the file header for the teaching narrative.
The application entry point Reset_Handler hands control to.
Fires ELC software events once a second.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Initializes the demo, tracks falling SW1 edges as counter deltas, and independently increments the exported liveness counter whenever successive GPT samples advance.
The application entry point Reset_Handler hands control to.
Initializes the demo and GPT0, runs one bounded DMA request per iteration, updates the exported match/mismatch counter, and delays.
The application entry point Reset_Handler hands control to.
Initializes and arms GPT0 once, then starts, polls, records the exported pass/failure counters, toggles LED1 on completion, and delays before the next one-shot.
The application entry point Reset_Handler hands control to.
Brings up both controllers then scans each.
The application entry point Reset_Handler hands control to.
Brings up CGC + IIC_B + console then probes.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Emits the boot banner, initializes the option-controlled IWDT, samples its counter, and on legal samples queues a refresh, clears status, toggles LED1, and emits the refresh banner.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Performs one Deep-Sleep cycle, emits the wake banner, then parks in a normal blink loop.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Initializes channel zero, formats and enqueues each counter line, toggles LED1, and delays before incrementing the next sample.
The application entry point Reset_Handler hands control to.
Bench-tests SDRAM and prints MB/s.
The application entry point Reset_Handler hands control to.
Brings up SPI_B + loops a self-test pattern.
The application entry point Reset_Handler hands control to.
Configures GPIO, then launches ThreadX.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Brings up clocks + UART, then enters ThreadX.
The application entry point Reset_Handler hands control to.
Brings up CGC + SCI8 then drops into the ThreadX scheduler.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Brings up clocks + UART + RMII pins, then enters ThreadX.
The application entry point Reset_Handler hands control to.
Raises CPUCLK0, configures LED1, launches ThreadX.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Brings up CGC + SCI8 + LED1 then prints.
The application entry point Reset_Handler hands control to.
Brings up SCI8 + ISRs, prints, then echoes via IRQ.
The application entry point Reset_Handler hands control to.
Initializes and arms ULPT0, then polls its underflow bit. Each event emits the fixed wake banner, stops the channel to clear status, and starts the next interval with the same reload.
The application entry point Reset_Handler hands control to.
Both USB controllers' clocks and pins come up before the kernel so the two workers only deal with stack bring-up.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
The application entry point Reset_Handler hands control to.
Brings up CGC + USB-FS pins + LED1 + ThreadX.
The application entry point Reset_Handler hands control to.
Brings up CGC + USB-HS pin + LED1 + ThreadX.
The application entry point Reset_Handler hands control to.
Alternates between the HS and FS host ports and runs the file-op suite until it fully passes.
The application entry point Reset_Handler hands control to.
Definition at line 721 of file glyph_bench.c.
References internal_output_init(), internal_run_report(), internal_write_parts(), k_ra8_ok, and s_gb_diagnostic.
|
static |
Total glyph accesses in the deterministic session.
Definition at line 385 of file glyph_bench.c.
Referenced by internal_report_header(), internal_report_row(), and internal_run_report().
|
static |
Swept cache budgets (cell counts).
Definition at line 87 of file glyph_bench.c.
Referenced by internal_run_report().
|
static |
Definition at line 117 of file glyph_bench.c.
Referenced by internal_output_init(), and main().
|
static |
Definition at line 120 of file glyph_bench.c.
Referenced by internal_output_init().
|
static |
English letter relative frequencies, scaled to a per-mille-ish table indexed by letter (a..z).
Sums to k_gb_freq_total.
Definition at line 94 of file glyph_bench.c.
Referenced by internal_gb_pick_letter().
|
static |
Borrowed stdout/stderr portable stream handles.
Definition at line 116 of file glyph_bench.c.
Referenced by internal_output_init(), internal_report_header(), internal_report_row(), and internal_run_report().
|
static |
Raw-descriptor adapter states for the borrowed process streams.
Definition at line 119 of file glyph_bench.c.
Referenced by internal_output_init().
|
static |
A small punctuation/space repertoire (codepoints).
Definition at line 298 of file glyph_bench.c.
Referenced by internal_gb_pick_codepoint().
|
static |
Process-lifetime semantic backing for one measured atlas.
Definition at line 114 of file glyph_bench.c.
Referenced by internal_run_budget().