📖 Scenario: You are working on a small embedded system where memory is limited. You need to allocate memory for sensor readings and configuration settings using static memory allocation. This means the memory size and location are fixed at compile time, which helps the system run efficiently without dynamic memory overhead.
🎯 Goal: Build a simple embedded C program that uses static memory allocation to store sensor readings and configuration values. You will declare fixed-size arrays and variables, then access and print their values.
📋 What You'll Learn
Declare a static array called sensor_readings of 5 integers with exact values: 100, 200, 300, 400, 500
Declare a static integer variable called config_threshold and set it to 250
Use a for loop with iterator i to iterate over sensor_readings
Print each sensor reading and whether it is above or below the config_threshold
💡 Why This Matters
🌍 Real World
Embedded systems often have limited memory and cannot use dynamic memory allocation safely. Static memory allocation ensures predictable memory usage and faster execution.
💼 Career
Understanding static memory allocation is essential for embedded software developers working on microcontrollers, IoT devices, and real-time systems.
Progress0 / 4 steps
1
Declare static sensor readings array
Declare a static integer array called sensor_readings with exactly 5 elements: 100, 200, 300, 400, and 500.
Embedded C
Hint
Use the static keyword before the array declaration and initialize it with the given values inside curly braces.
2
Declare static configuration threshold
Declare a static integer variable called config_threshold and set it to 250.
Embedded C
Hint
Use static int config_threshold = 250; to declare and initialize the variable.
3
Loop through sensor readings
Use a for loop with iterator i to iterate over sensor_readings from index 0 to 4.
Embedded C
Hint
Write a for loop starting with int i = 0 and running while i < 5, incrementing i each time.
4
Print sensor readings with threshold check
Inside the for loop, print each sensor reading using printf in the format: "Reading i: value - Above threshold" if the reading is greater than config_threshold, otherwise print "Reading i: value - Below threshold". Replace i and value with the current index and sensor reading.
Embedded C
Hint
Use printf with format specifiers %d for integers. Use an if statement to compare each reading with config_threshold.
Practice
(1/5)
1. What is the main characteristic of static memory allocation in embedded C?
easy
A. Memory size is fixed at compile time and cannot change during execution.
B. Memory is allocated dynamically during program execution.
C. Memory is allocated only when a function is called.
D. Memory size can grow or shrink based on input data.
Solution
Step 1: Understand static memory allocation
Static memory allocation means reserving memory before the program runs, with a fixed size.
Step 2: Compare with dynamic allocation
Dynamic allocation changes size during execution, but static does not.
Final Answer:
Memory size is fixed at compile time and cannot change during execution. -> Option A
Quick Check:
Static memory = fixed size [OK]
Hint: Static means fixed size known before running [OK]
Common Mistakes:
Confusing static with dynamic allocation
Thinking static memory can resize
Assuming static memory is allocated at runtime
2. Which of the following declarations uses static memory allocation correctly in embedded C?
easy
A. int *arr; arr = calloc(10, sizeof(int));
B. int *arr = malloc(10 * sizeof(int));
C. int arr[];
D. int arr[10];
Solution
Step 1: Identify static allocation syntax
Static arrays are declared with fixed size like int arr[10];
Step 2: Recognize dynamic allocation
malloc and calloc allocate memory dynamically at runtime, not static.
Final Answer:
int arr[10]; -> Option D
Quick Check:
Static array declaration = int arr[10]; [OK]
Hint: Static arrays use fixed size brackets [] [OK]
Common Mistakes:
Using malloc or calloc for static allocation
Not specifying array size for static arrays
Confusing pointer declarations with arrays
3. What will be the output of this code snippet in embedded C?
static int buffer[5] = {1, 2, 3, 4, 5};
void main() {
for(int i = 0; i < 5; i++) {
buffer[i] += 1;
printf("%d ", buffer[i]);
}
}
medium
A. Compilation error due to static keyword
B. 2 3 4 5 6
C. 0 1 2 3 4
D. 1 2 3 4 5
Solution
Step 1: Understand static array initialization
The static array buffer starts with values {1, 2, 3, 4, 5} fixed at compile time.
Step 2: Trace the loop increment and print
Each element is increased by 1, so values become {2, 3, 4, 5, 6} and printed.
Final Answer:
2 3 4 5 6 -> Option B
Quick Check:
Increment each element by 1 = 2 3 4 5 6 [OK]
Hint: Static arrays behave like normal arrays with fixed size [OK]
Common Mistakes:
Thinking static causes compile error
Forgetting to increment values before printing
Confusing static with uninitialized variables
4. Identify the error in this static memory allocation code snippet:
B. Static keyword cannot be used inside functions.
C. Array size is not specified for static array.
D. Missing return type for main function.
Solution
Step 1: Check static array declaration
Static arrays must have size or initializer; data[] without size or init is invalid.
Step 2: Verify other code parts
Static inside functions is allowed; assigning values and printing is valid; main return type is void (allowed in embedded C).
Final Answer:
Array size is not specified for static array. -> Option C
Quick Check:
Static array needs size or initializer [OK]
Hint: Static arrays need size or initializer [OK]
Common Mistakes:
Assuming static arrays can omit size without initializer
Thinking static is disallowed inside functions
Confusing main return type errors with static errors
5. You need to store sensor readings in a fixed-size buffer that must retain values between function calls in embedded C. Which static memory allocation pattern is best suited?
hard
A. Declare a static array inside the function to hold readings.
B. Use dynamic memory allocation with malloc inside the function.
C. Declare a local array inside the function without static keyword.
D. Use global variables without static keyword.
Solution
Step 1: Understand requirement for retaining values
Values must persist between calls, so memory must not be reinitialized each time.
Step 2: Choose static array inside function
Static array inside function keeps values between calls and has fixed size, perfect for sensor buffer.
Step 3: Exclude other options
Dynamic allocation is flexible but not static; local array resets each call; global without static may cause namespace issues.
Final Answer:
Declare a static array inside the function to hold readings. -> Option A
Quick Check:
Static inside function retains data between calls [OK]
Hint: Static inside function keeps data persistent [OK]
Common Mistakes:
Using local arrays that reset each call
Choosing dynamic allocation when fixed size needed
Ignoring static keyword for persistence
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.