Bird
Raised Fist0
Embedded Cprogramming~10 mins

Memory layout on a microcontroller (Flash, SRAM, EEPROM) in Embedded C - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Memory layout on a microcontroller (Flash, SRAM, EEPROM)
Program Start
↓
Load Flash Memory
↓
Initialize SRAM
↓
Access EEPROM
↓
Run Program Loop
↓
End or Reset
This flow shows how a microcontroller uses Flash to store code, SRAM for variables during run, and EEPROM for long-term data.
Execution Sample
Embedded C
const int x = 10;  // stored in Flash
int y = 5;          // stored in SRAM
void main() {
  y = x + 2;
  // EEPROM read/write simulated
}
This code shows constants in Flash, variables in SRAM, and simulates EEPROM usage.
Execution Table
StepMemory AreaActionContentNotes
1FlashStore constant x=10x=10Flash is non-volatile, stores program code and constants
2SRAMAllocate variable y=5y=5SRAM is volatile, stores variables during execution
3SRAMExecute y = x + 2y=12Variable y updated in SRAM
4EEPROMRead stored datadata=previous valueEEPROM stores data that persists after power off
5EEPROMWrite new datadata=updated valueEEPROM write simulated
6-Program runs loop or ends-Microcontroller continues running or resets
💡 Program ends or resets; SRAM loses data, Flash and EEPROM retain contents
Variable Tracker
VariableStart (Flash/SRAM/EEPROM)After Step 2After Step 3After Step 5Final
x (Flash)1010101010
y (SRAM)undefined51212undefined (after reset)
EEPROM dataold valueold valueold valueupdated valueupdated value
Key Moments - 3 Insights
Why does variable y lose its value after reset but x does not?
Because y is stored in SRAM which is volatile and loses data on power off, while x is stored in Flash which is non-volatile and keeps data.
Can we change the value of x during program execution?
No, x is stored in Flash memory which is read-only during normal operation; only variables in SRAM or EEPROM can be changed.
Why use EEPROM if Flash is also non-volatile?
EEPROM allows data to be changed and saved during program run, unlike Flash which is mainly for code and constants.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of y after Step 3?
A5
B12
C10
Dundefined
💡 Hint
Check the 'Content' column for Step 3 in the execution table.
At which step does EEPROM data get updated?
AStep 5
BStep 3
CStep 2
DStep 6
💡 Hint
Look for 'Write new data' action in the execution table.
If the microcontroller resets, which memory area retains its data?
ASRAM only
BEEPROM only
CFlash and EEPROM
DSRAM and Flash
💡 Hint
Refer to the exit note and variable tracker for data retention after reset.
Concept Snapshot
Memory layout on microcontrollers:
- Flash: stores program code and constants, non-volatile
- SRAM: stores variables during execution, volatile
- EEPROM: stores data that must persist across resets
- Variables in SRAM lose data on power off
- Constants in Flash and data in EEPROM persist
Full Transcript
This visual execution shows how a microcontroller uses three main memory areas: Flash, SRAM, and EEPROM. Flash memory holds the program code and constants like x=10. SRAM holds variables like y=5 during program run and changes as the program executes. EEPROM stores data that must be saved even when power is off. The execution table traces storing x in Flash, allocating y in SRAM, updating y, reading and writing EEPROM data, and program running or resetting. Variables in SRAM lose their values after reset, but Flash and EEPROM keep their contents. This helps beginners understand memory roles and data persistence on microcontrollers.

Practice

(1/5)
1. Which type of memory in a microcontroller is used to store the program code permanently?
easy
A. SRAM
B. Flash memory
C. EEPROM
D. Cache memory

Solution

  1. Step 1: Understand memory types

    Flash memory is non-volatile and stores the program code permanently.
  2. Step 2: Compare with other memories

    SRAM is temporary for variables, EEPROM stores small data but not the main program.
  3. Final Answer:

    Flash memory -> Option B
  4. Quick Check:

    Program code = Flash memory [OK]
Hint: Program code is always in Flash memory [OK]
Common Mistakes:
  • Confusing SRAM with Flash memory
  • Thinking EEPROM stores program code
  • Assuming cache memory is used in microcontrollers
2. Which of the following declarations correctly places a variable in EEPROM memory in embedded C?
easy
A. int var __attribute__((section(".eeprom")));
B. int var __attribute__((section(".sram")));
C. int var __attribute__((section(".flash")));
D. int var __attribute__((section(".stack")));

Solution

  1. Step 1: Identify EEPROM section syntax

    Variables placed in EEPROM use the section attribute ".eeprom" in embedded C.
  2. Step 2: Check other options

    ".sram" is for SRAM, ".flash" for Flash, ".stack" is not a valid section for variables.
  3. Final Answer:

    int var __attribute__((section(".eeprom"))); -> Option A
  4. Quick Check:

    EEPROM section attribute = .eeprom [OK]
Hint: EEPROM variables use section ".eeprom" attribute [OK]
Common Mistakes:
  • Using .sram or .flash instead of .eeprom
  • Forgetting __attribute__ syntax
  • Confusing stack with memory sections
3. Consider this embedded C code snippet:
const int x = 10;
int y = 20;
int main() {
  static int z = 30;
  return 0;
}
Where are the variables x, y, and z stored respectively?
medium
A. x in SRAM, y in EEPROM, z in Flash
B. x in EEPROM, y in Flash, z in EEPROM
C. x in Flash, y in EEPROM, z in SRAM
D. x in Flash, y in SRAM, z in SRAM

Solution

  1. Step 1: Analyze variable storage rules

    Constants like x are stored in Flash memory. Global variables like y go to SRAM. Static variables like z also reside in SRAM during runtime.
  2. Step 2: Match variables to memory types

    x = Flash, y = SRAM, z = SRAM.
  3. Final Answer:

    x in Flash, y in SRAM, z in SRAM -> Option D
  4. Quick Check:

    const = Flash, global/static = SRAM [OK]
Hint: const vars in Flash, globals and statics in SRAM [OK]
Common Mistakes:
  • Assuming static variables go to EEPROM
  • Thinking const variables are in SRAM
  • Mixing EEPROM with Flash for constants
4. This embedded C code tries to store a variable in EEPROM:
int var __attribute__((section(".eeprom"))) = 5;
void main() {
  var = 10;
}
What is the main problem with this code?
medium
A. You cannot assign a new value to EEPROM variable at runtime like this
B. The section attribute syntax is incorrect
C. Variables in EEPROM must be declared as const
D. The main function must return int, not void

Solution

  1. Step 1: Understand EEPROM write limitations

    EEPROM variables cannot be assigned new values by simple assignment at runtime; special functions are needed to write EEPROM.
  2. Step 2: Check other code aspects

    The section attribute syntax is correct, variables need not be const, and main can be void in embedded C.
  3. Final Answer:

    You cannot assign a new value to EEPROM variable at runtime like this -> Option A
  4. Quick Check:

    EEPROM write needs special functions [OK]
Hint: EEPROM writes need special functions, not simple assignment [OK]
Common Mistakes:
  • Assuming normal assignment writes EEPROM
  • Thinking section attribute is wrong
  • Confusing main return type with memory issues
5. You want to store a configuration value that must persist after power off and be modifiable during runtime on a microcontroller. Which memory type should you use and why?
hard
A. Cache memory, because it stores frequently used data
B. Flash, because it is fast and can be rewritten easily during runtime
C. EEPROM, because it retains data without power and allows runtime updates with special functions
D. SRAM, because it is volatile and fast for temporary storage

Solution

  1. Step 1: Identify memory needs

    The value must persist after power off and be modifiable during runtime.
  2. Step 2: Match memory type to needs

    EEPROM is non-volatile and supports runtime updates via special functions. Flash is non-volatile but rewriting is slower and more complex. SRAM is volatile and loses data on power off. Cache is not used for persistent storage.
  3. Final Answer:

    EEPROM, because it retains data without power and allows runtime updates with special functions -> Option C
  4. Quick Check:

    Persistent modifiable data = EEPROM [OK]
Hint: Use EEPROM for persistent, modifiable data [OK]
Common Mistakes:
  • Choosing Flash for frequent runtime updates
  • Using SRAM for persistent storage
  • Confusing cache with persistent memory
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard