Boot Loader Segmentation for Embedded RAM Optimization

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Embedded systems face challenges in managing limited volatile memory resources, leading to complex overlay programming and performance impacts due to loading times, which motivates the need for efficient firmware RAM usage without overlays.

Innovation Solution

Separating initialization code from main firmware code and using a boot loader to load and execute them separately in volatile memory, reducing overall volatile memory module size requirements by removing the initialization code after execution, thereby avoiding the need for overlay programming.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Quantity of substance

If overlay programming is used to manage limited volatile memory, then firmware can be executed with limited RAM, but system performance deteriorates due to overlay loading times

Engineering Contradiction:
Improvevolatile memory sizeVSAvoidsystem performance
Core Design Contradiction:
Quantity of substanceVSProductivity

Solution Approach 1:

The patent segments firmware into initialization code and main code, loading them at different times to different memory locations. The initialization code is loaded first to a first location, executed, then the main code is loaded to a second location (overlapping the first), and the initialization code is discarded. This segmentation allows efficient use of limited RAM without overlay programming, resolving the contradiction between limited memory and performance.

Inventive Principle:
Principle #1Segmentation

2Ease of operation

If initialization code is kept in volatile memory throughout execution, then code execution is simplified, but volatile memory usage increases

Engineering Contradiction:
Improvecode execution simplicityVSAvoidvolatile memory usage
Core Design Contradiction:
Ease of operationVSQuantity of substance

Solution Approach 1:

The patent applies preliminary action by loading and executing the initialization code before loading the main code. The initialization code performs necessary setup tasks, then is discarded before the main code execution begins. This preliminary execution approach simplifies memory management by allowing the main code to be loaded independently without needing the initialization code present, reducing overall volatile memory usage while maintaining execution simplicity.

Inventive Principle:
Principle #10Preliminary action

3Quantity of substance

If overlay programming is implemented to reduce RAM usage, then memory efficiency improves, but device complexity increases

Engineering Contradiction:
ImproveRAM usage efficiencyVSAvoidprogramming complexity
Core Design Contradiction:
Quantity of substanceVSDevice complexity

Solution Approach 1:

The patent segments the firmware into distinct initialization and main code portions with separate loading and execution phases. This segmentation provides a straightforward memory management approach that achieves efficient RAM usage without requiring complex overlay programming mechanisms. The simple two-phase loading process reduces device complexity while maintaining good memory efficiency.

Inventive Principle:
Principle #1Segmentation

Data Source

PatentUS9720699B2Efficient RAM usage in computing devices
Publication Date: 2017.08.01 SANDISK TECHNOLOGIES LLC
  • US9720699B2 patent drawing
  • US9720699B2 patent drawing
  • US9720699B2 patent drawing

AI summary

Systems and methods are disclosed for managing program code in a computing device, such as an embedded system. In a computing device, a non-volatile flash memory stores program code comprising initialization code designed to be executed a single time during device booting, main program code separate from the initialization code, and main code loader code designed to direct a controller of the computing device to load the main program code from the flash memory to the RAM when executed by the controller. The controller loads the initialization code and the main code loader code to first and second adjacent portions of the RAM, respectively, and loads the main program code, separately from the initialization code, to a third portion of the RAM at least partially overlapping the first portion but not overlapping the second portion, thereby at least partially overwriting the initialization code.