Implement full SSD1306 OLED display support: - Splash screen on boot (1.5s) with project name, version, board - Dashboard showing radio state, config, counters, RSSI/SNR - RSSI history sparkline (64-sample ring buffer, 2px-wide bars) - DisplayOn/DisplayOff host commands routed via dedicated channel - Pure render functions against generic DrawTarget (no hardware coupling) - Display on/off control bypasses radio task entirely Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
80 lines
1.5 KiB
Plaintext
80 lines
1.5 KiB
Plaintext
|
|
/* before memory.x to allow override */
|
|
ENTRY(Reset)
|
|
|
|
INCLUDE memory.x
|
|
|
|
/* after memory.x to allow override */
|
|
PROVIDE(__pre_init = DefaultPreInit);
|
|
PROVIDE(__zero_bss = default_mem_hook);
|
|
PROVIDE(__init_data = default_mem_hook);
|
|
PROVIDE(__post_init = default_post_init);
|
|
|
|
INCLUDE exception.x
|
|
|
|
SECTIONS {
|
|
.text : ALIGN(4)
|
|
{
|
|
_stext = .;
|
|
. = ALIGN (4);
|
|
_text_start = ABSOLUTE(.);
|
|
. = ALIGN (4);
|
|
*(.literal .text .literal.* .text.*)
|
|
_text_end = ABSOLUTE(.);
|
|
_etext = .;
|
|
} > ROTEXT
|
|
|
|
.rodata : ALIGN(4)
|
|
{
|
|
_rodata_start = ABSOLUTE(.);
|
|
. = ALIGN (4);
|
|
*(.rodata .rodata.*)
|
|
_rodata_end = ABSOLUTE(.);
|
|
} > RODATA
|
|
|
|
.data : ALIGN(4)
|
|
{
|
|
_data_start = ABSOLUTE(.);
|
|
. = ALIGN (4);
|
|
*(.data .data.*)
|
|
_data_end = ABSOLUTE(.);
|
|
} > RWDATA AT > RODATA
|
|
|
|
/* LMA of .data */
|
|
_sidata = LOADADDR(.data);
|
|
|
|
.bss (NOLOAD) : ALIGN(4)
|
|
{
|
|
_bss_start = ABSOLUTE(.);
|
|
. = ALIGN (4);
|
|
*(.bss .bss.* COMMON)
|
|
_bss_end = ABSOLUTE(.);
|
|
} > RWDATA
|
|
|
|
.noinit (NOLOAD) : ALIGN(4)
|
|
{
|
|
. = ALIGN(4);
|
|
*(.noinit .noinit.*)
|
|
} > RWDATA
|
|
|
|
.rwtext : ALIGN(4)
|
|
{
|
|
. = ALIGN (4);
|
|
*(.rwtext.literal .rwtext .rwtext.literal.* .rwtext.*)
|
|
} > RWTEXT
|
|
|
|
/* must be last segment using RWTEXT */
|
|
.text_heap_start (NOLOAD) : ALIGN(4)
|
|
{
|
|
. = ALIGN (4);
|
|
_text_heap_start = ABSOLUTE(.);
|
|
} > RWTEXT
|
|
|
|
/* must be last segment using RWDATA */
|
|
.heap_start (NOLOAD) : ALIGN(4)
|
|
{
|
|
. = ALIGN (4);
|
|
_heap_start = ABSOLUTE(.);
|
|
} > RWDATA
|
|
}
|