Difference between revisions of "Interview questions"

From Wiki at Neela Nurseries
Jump to: navigation, search
m (^ Section 2)
m (^ Section 2)
Line 101: Line 101:
 
<i>
 
<i>
 
Answer:
 
Answer:
<p>
+
<br />
 
(1)  int *z;
 
(1)  int *z;
<p>
+
<br />
 
(2)  int z[5];
 
(2)  int z[5];
<p>
+
<br />
 
(3)  int *z[5];
 
(3)  int *z[5];
<p>
+
 
 
(4)  int **z;
 
(4)  int **z;
<p>
+
 
 
(5) void (*z)(unsigned int y);
 
(5) void (*z)(unsigned int y);
 
</i>
 
</i>

Revision as of 06:14, 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);


^ References


2022-06-06

The #error pre-processor directive:

Lvalues and rvalues: