IP Library Granted Patent US 9,720,699
Granted Patent B2
US 9,720,699 · App. 15/250,762 · Granted Aug 1, 2017

Efficient RAM usage in computing devices

Inventor: Tino Lin (Tustin, CA)
Assignee: Western Digital Technologies, Inc.
G06F9/4406G06F3/061G06F3/0655G06F3/0679G06F9/4401G06F9/5016
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 9,720,699
App. No.
15/250,762
Granted
Aug 1, 2017
Kind
B2
Abstract

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.

Claims (52)

1. A computing device comprising:

a volatile random access memory (RAM);

a non-volatile flash memory storing program code comprising:

initialization code designed to be executed a single time during device booting;

main program code separate from the initialization code and designed to be executed after execution of the initialization code; and

main code loader code designed to direct the controller to load the main program code from the flash memory to the RAM when executed by the controller; and

a controller configured to:

load the initialization code and the main code loader code to first and second adjacent portions of the RAM, respectively;

load 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; and

execute the main program code.

2. The computing device of claim 1 , wherein: the initialization code comprises X bytes of data; the main program code comprises Y bytes of data; the RAM consists of less than Z bytes of storage space; and Z=X+Y.

3. The computing device of claim 1 , wherein the controller is further configured to:

load the initialization code and the main code loader code as part of a first load operation; and

load the main program code as part of a second load operation executed subsequently to the first load operation.

4. The computing device of claim 1 , wherein the controller is further configured to execute the main program code without using program overlays.

5. The computing device of claim 1 , wherein the initialization code and main program code are separately-compiled pieces of code.

6. The computing device of claim 1 , wherein the initialization code comprises code that, when executed, directs the controller to perform power-on self-testing and initialize one or more peripheral devices.

7. A computing device comprising:

a volatile random access memory (RAM);

a non-volatile flash memory storing program code comprising:

initialization code designed to be executed a single time during device booting;

initialization code loader code designed to direct the controller to load the initialization code from the flash memory to the RAM when executed by the controller;

main program code separate from the initialization code and designed to be executed after execution of the initialization code; and

main code loader code designed to direct the controller to load the main program code from the flash memory to the RAM when executed by the controller; and

a controller configured to:

load the initialization code loader code to a first portion of the RAM;

in response to execution of the initialization code loader code from the RAM, load the initialization code to a second portion of the RAM;

load the main code loader code to a third portion of the RAM that overlaps at least one of the first portion and the second portion; and

in response to execution of the main code loader code, load the main program code to a fourth portion of the RAM at least partially overlapping the second portion but not overlapping the third portion, thereby at least partially overwriting the initialization code.

8. The computing device of claim 7 , wherein: the initialization code comprises X bytes of data; the main program code comprises Y bytes of data; and the RAM consists of less than Z bytes of storage space; and Z=X+Y.

9. The computing device of claim 7 , wherein the initialization code comprises code that, when executed, directs the controller to perform power-on self-testing and initialize one or more peripheral devices.

10. The computing device of claim 7 , wherein the flash memory, RAM and controller are components of an embedded system.

11. The computing device of claim 7 , wherein the controller is further configured to:

load the initialization code and the main code loader code as part of a first load operation; and

load the main program code as part of a second load operation executed subsequently to the first load operation.

12. The computing device of claim 7 , wherein the third portion and fourth portion are disposed adjacent to one another in the RAM.

13. The computing device of claim 7 , wherein the controller is further configured to execute the main program code without using program overlays.

14. The computing device of claim 7 , wherein the controller is further configured to execute the initialization code without saving global data for use by the main program code.

15. The computing device of claim 7 , wherein the initialization code and main program code are separately-compiled pieces of code.

16. A method of booting a computing device, the method comprising:

loading initialization code loader code from a non-volatile flash memory to a first portion of a volatile random access memory (RAM), the initialization code loader code being designed to cause initialization code to be loaded from the flash memory to the RAM when executed;

executing the initialization code loader code;

in response to said executing the initialization code loader code from the RAM, loading the initialization code to a second portion of the RAM;

executing the initialization code;

in response to said executing the initialization code, loading main code loader code to a third portion of the RAM that overlaps at least one of the first portion and the second portion, the main code loader code being designed to cause main program code to be loaded from the flash memory to the RAM when executed;

executing the main code loader code;

in response to said executing the main code loader code, loading the main program code to a fourth portion of the RAM at least partially overlapping the second portion but not overlapping the third portion, thereby at least partially overwriting the initialization code; and

executing the main program code.

17. The method of claim 16 , wherein: the initialization code comprises X bytes of data; the main program code comprises Y bytes of data; the RAM consists of less than Z bytes of storage space; and Z=X+Y.

18. The method of claim 16 , wherein the third portion and fourth portion are disposed adjacent to one another in the RAM.

19. The method of claim 16 , wherein the main program code comprises at least one of operating system code and hardware device driver code.

20. The method of claim 16 , wherein the initialization code and main program code are separately-compiled pieces of code.

Assignments (11)
SECURITY AGREEMENT Recorded Apr 25, 2025
From: SANDISK TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A., AS COLLATERAL AGENT
Reel/Frame 071050/0001 →
PARTIAL RELEASE OF SECURITY INTERESTS Recorded Apr 25, 2025
From: JPMORGAN CHASE BANK, N.A., AS AGENT
To: SANDISK TECHNOLOGIES, INC.
Reel/Frame 071382/0001 →
PATENT COLLATERAL AGREEMENT Recorded Aug 23, 2024
From: SANDISK TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A., AS THE AGENT
Reel/Frame 068762/0494 →
CHANGE OF NAME Recorded Jun 27, 2024
From: SANDISK TECHNOLOGIES, INC.
To: SANDISK TECHNOLOGIES, INC.
Reel/Frame 067982/0032 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 29, 2024
From: WESTERN DIGITAL TECHNOLOGIES, INC.
To: SANDISK TECHNOLOGIES, INC.
Reel/Frame 067567/0682 →
PATENT COLLATERAL AGREEMENT - A&R LOAN AGREEMENT Recorded Aug 21, 2023
From: WESTERN DIGITAL TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A.
Reel/Frame 064715/0001 →
PATENT COLLATERAL AGREEMENT - DDTL LOAN AGREEMENT Recorded Aug 21, 2023
From: WESTERN DIGITAL TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A.
Reel/Frame 067045/0156 →
RELEASE OF SECURITY INTEREST AT REEL 052915 FRAME 0566 Recorded Feb 8, 2022
From: JPMORGAN CHASE BANK, N.A.
To: WESTERN DIGITAL TECHNOLOGIES, INC.
Reel/Frame 059127/0001 →
SECURITY INTEREST Recorded Feb 6, 2020
From: WESTERN DIGITAL TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A., AS AGENT
Reel/Frame 052915/0566 →
CORRECTIVE ASSIGNMENT TO CORRECT THE ASSIGNEE NAME PREVIOUSLY RECORDED ON REEL 039569 FRAME 0852. ASSIGNOR(S) HEREBY CONFIRMS THE ASSIGNMENT. Recorded Sep 20, 2016
From: LIN, TINO
To: WESTERN DIGITAL TECHNOLOGIES, INC.
Reel/Frame 040496/0864 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 29, 2016
From: LIN, TINO
To: WESTERN DIGITAL TECHNOLOGIES
Reel/Frame 039569/0852 →
Continuity (3)
Continuation 14135890 · Dec 20, 2013
Provisional Application 61902086 · Nov 8, 2013
Related Publication 20160371096A1 · Dec 22, 2016