This set of Arduino Multiple Choice Questions & Answers (MCQs) focuses on “PROGMEM Utility”.
1. In which memory does the Arduino save data in when the PROGMEM Utility is invoked?
a) EEPROM
b) SRAM
c) Flash
d) DRAM
View Answer
Explanation: When the PROGMEM Utility is invoked, data being saved is diverted to the flash memory instead of the SRAM. This utility is a variable modifier, which means it can change the variable policy whenever invoked.
2. Which header file contains the PROGMEM Utility?
a) The avr/pgmspace.h header file
b) The pmspace.h header file
c) The avr/pspace.h header file
d) The avr/progmem.h header file
View Answer
Explanation: The PROGMEM Utility is contained within the avr/pgmspace.h header file and this file is to be invoked whenever a programmer needs to use the PROGMEM Utility for his or her program. However, while using the data stored in the Flash memory one also needs to use certain functions defined within the header file to retrieve the data.
3. What type of variables does the PROGMEM Utility work on?
a) Globally Defined or static
b) Defined inside a function and non-static
c) Defined inside a for-loop and non-static
d) Defined inside a while-loop and non-static
View Answer
Explanation: The PROGMEM Utility can only be used for variables which have “public” access to the entire program and conversely can be accessed by anyone, or is a static variable, which means they need to be defined outside a function and be static or non-static, or if they are defined within any function, they need to be static.
4. Can the PROGMEM Utility work on non-static variables?
a) Yes
b) No
View Answer
Explanation: The PROGMEM Utility can be used with non-static variables provided they are defined outside any function, i.e. they are defined globally. Conversely if one needs to work on a variable that is not defined globally then they would need to convert that variable into a static variable in order to use the PROGMEM Utility.
5. Can PROGMEM be used on arrays?
a) Yes
b) No
View Answer
Explanation: When the PROGMEM Utility is invoked, data being saved is diverted to the flash memory instead of the SRAM. This utility is a variable modifier so it can be used on any kind of data structures allowed by the language.
6. What is the equivalent macro for the PROGMEM Utility when dealing with sending data that is to be printed, into the Flash memory?
a) A() Macro
b) C() Macro
c) F() Macro
d) N() Macro
View Answer
Explanation: The F() macro is used for sending data, which is usually in the form of strings that are declared within the Serial.print() function which means they are not to be stored anywhere in the program but are to be printed onto the serial monitor, to the Flash Memory before it is printed.
7. Given below are four lines of boilerplate code. Which ones are faulty?
const dataType variableName[] PROGMEM = {}; const PROGMEM dataType variableName[] = {}; const dataType PROGMEM variableName[] = {}; dataType PROGMEM const variableName[] = {};
a) Lines 1 and 3
b) Lines 3 and 4
c) Lines 1 and 2
d) Lines 3 and 2
View Answer
Explanation: The PROGMEM Utility can only be used for variables which have “public” access to the entire program and conversely can be accessed by anyone, or is a static variable, which means they need to be defined outside a function and be static or non-static. This means that there is a certain degree of syntactical freedom that the programmer is vested with when using the PROGMEM Utility since it is a variable modifier.
8. In which versions of the Arduino IDE can the PROGMEM Utility be used without declaration in the Arduino code?
a) Any Arduino IDE version above 2.0
b) Any Arduino IDE version above 1.0
c) Any Arduino IDE version below 1.0
d) Any Arduino IDE version above 3.1
View Answer
Explanation: PROGMEM is part of the avr/pgmspace.h library. It is imported automatically in the more recent versions of the Arduino IDE. However, if one is using an IDE version below 1.0, then the header must be included first at the top of the code.
9. What is the purpose of the boilerplate code given below?
strcpy_P(buffer, (char *)pgm_read_word(&(StringVariable)));
a) To copy data from the SRAM
b) To copy data from the EEPROM
c) To copy data from the Flash Memory
d) To copy data to the EEPROM
View Answer
Explanation: The boilerplate code given, does the job of retrieving the data for a particular variable, for use in the program. This function gives “READ” access to the programmer into the Flash Memory for retrieving any variable data saved in the Flash Memory by the PROGMEM Utility.
10. What is the use of the boilerplate code given below?
someByte = pgm_read_word ( &( someData[x][y] ) );
a) Reading Strings from Flash Memory
b) Reading Integers from Flash Memory
c) Reading files from Flash Memory
d) Reading special characters from Flash Memory
View Answer
Explanation: The boilerplate code given, does the job of retrieving the integer data for a particular variable, for use in the program. This function gives “READ” access to the programmer into the Flash Memory for retrieving any variable data saved in the Flash Memory by the PROGMEM Utility.
Sanfoundry Global Education & Learning Series – Arduino.
To practice all areas of Arduino, here is complete set of 1000+ Multiple Choice Questions and Answers.
- Practice Electrical Engineering MCQs
- Check Arduino Books
- Check Electrical Engineering Books
- Practice Electrical & Electronics Engineering MCQs
- Apply for Electrical Engineering Internship