Difference between revisions of "Interview questions"
m (→^ Section 2) |
m (→^ References) |
||
Line 160: | Line 160: | ||
Lvalues and rvalues: | Lvalues and rvalues: | ||
* https://www.embedded.com/lvalues-and-rvalues/ | * https://www.embedded.com/lvalues-and-rvalues/ | ||
+ | |||
+ | C unions: | ||
+ | * https://en.wikipedia.org/wiki/Union_type#C/C++_2 | ||
<!-- EOF --> | <!-- EOF --> |
Revision as of 21:15, 7 June 2022
2022-06-02 Some resources to review for firmware technical interview questions:
^ Section 1
Starting pool of technical firmware oriented questions:
[ ] Q: What is the difference between a compiler and a cross-compiler?
A: A compiler produces executable code for the same processor family on which it runs, a cross-compiler produces executable code for a distinct processor family from the processor type on which it runs.
[ ] Q: What are some key benefits of incorporating an RTOS in a firmware project?
A: Memory and CPU resource management, task scheduling, guaranteed max latency as specified by the RTOS
[ ] Q: What are the four compilation stages a typical gcc like toolchain carries out?
A: pre-processing, compilation, assembly, linking
[ ] Q: What type of file typically are dot S files?
A: assembly source files
[ ] Q: What uses and benefits of C enumerations can you describe?
A: (1) C enumerations provide a helpful labeling mechanism for states, tasks, or cases which require conditional handling. (2) C enums are checked at compile time for duplicate integer values in the given enumeration. (3) C enums free programmers from having to adjust numeric values when adding and removing from the start or middle of the list, that is the enumeration.
[ ] Q: When may aggregate assignment be used in a C program, e.g. assigning all or some of the values to elements of an array?
A: Aggregate assignments in C can happen at the point of array declaration, generally not later.
[ ] Given this code fragment:
typedef uint32_t (*command_function_t)(const char* arguments);
Q1: What type of data element does the following line of C code declare? A: This line of code declares a function pointer.
Q2: What does each set of parentheses express, and bring to the overall declaration this line achieves? A: The first parentheses assure and clarify that the C pointer operator `*` applies to the declared newly defined type, the function pointer. The second parentheses express the C data type of "function", the data type to which the type-defined pointer points.
Q3: What does the syntax look like to assign a function to a function pointer? A; Syntax looks like 'function_ptr = &function_name;'
[ ] Multi-part question:
Q1: In an RTOS based project, what high level code pieces are typically present? A: (1) the RTOS or scheduler, (2) third party libraries and drivers, (3) application code
Q2: Of these code modules, who's the boss? (Which code takes a controlling or leading role at run time?) A: ( RTOS in many ways, but open ended answer . . . )
Q3: In a threaded firmware project, in the application part of the code who is the boss? A: One answer: there may not be a boss, but rather threads which work cooperatively toward a common task, with no one thread controlling a majority or any of the others.
[ ] Q: In a memory constrained system what is a compact way to store multiple Boolean type values?
A: Two or more Boolean values may be bit-wise encoded into a C char type or C integer type variable.
[ ] Q: Where might C language's union construct play a role in a firmware project?
-
A: A couple of examples: a C union could provide two ways for application code and driver code to "see" data packets sent via a certain protocol, or similarly two ways for different modules to treat bit-encoded configuration flags.
^ Section 2
[ ] What are a couple of uses of the C pre-processor directive #error
?
-
A: C's #error directive can be used to stop compilation at a point where code is in progress, but not complete enough to perform meaningful tasks. The #error directive may also be used to stop compilation and warn of undefined symbols which end users or developers must provide and set.
[ ] Using the variable name 'z', write out C declarations for the following variable types:
(1) a pointer to an integer
(2) an array of five integers
(3) an array of five pointers to integers
(4) a pointer to a pointer to an integer
(5) a pointer to a function which accepts an unsigned integer as its only parameter and returns nothing
-
Answer:
(1) int *z;
(2) int z[5];
(3) int *z[5];
(4) int **z;
(5) void (*z)(unsigned int y);
[ ] What are two or three examples in which you would use the C language volatile
qualifier?
-
Answer:
(1) to qualify a variable that points to a status register which may change due to external-to-firmware causes
(2) to qualify variables which are accessed by two or more threads, that is variables which exist in shared memory
(3) to qualify variables which are not located on the or a stack and are referenced in an interrupt service routine
[ ] What does C's const
qualifier mean?
-
Answer short: C's const qualifier means "read only".
^ References
- https://w3.cs.jmu.edu/kirkpams/OpenCSF/Books/csf/html/FunctionPointers.html . . . C function pointers
- https://www.calleluks.com/the-four-stages-of-compiling-a-c-program/ . . . Four stages of C compilation
- https://medium.com/@bartobri/untangling-complex-c-declarations-9b6a0cf88c96 . . . Untangling complex C declarations
2022-06-06
- https://rmbconsulting.us/publications/a-c-test-the-0x10-best-questions-for-would-be-embedded-programmers/ . . . RMB Consulting embedded interview questions
- https://www.dansaks.com/articles.shtml . . . Dan Saks programmer and articles on C const qualifier "read only" and others
The #error pre-processor directive:
Lvalues and rvalues:
C unions: