Difference between revisions of "Interview questions"

From Wiki at Neela Nurseries
Jump to: navigation, search
m (^ Section 2)
m (formatting.)
Line 35: Line 35:
 
     A:  Aggregate assignments in C can happen at the point of array declaration, generally not later.
 
     A:  Aggregate assignments in C can happen at the point of array declaration, generally not later.
  
 +
<!-- comentario -->
  
  
 +
== [[#top|^]] Section 3 ==
  
 
[ ]  Given this code fragment:
 
[ ]  Given this code fragment:
 +
<ul>
  
 
         typedef uint32_t (*command_function_t)(const char* arguments);
 
         typedef uint32_t (*command_function_t)(const char* arguments);
  
    Q1:  What type of data element does the following line of C code declare?
+
Q1:  What type of data element does the following line of C code declare?
      A:  This line of code declares a function pointer.
+
<ul>
 +
<i>
 +
A:  This line of code declares a function pointer.
 +
</i>
 +
</ul>
  
    Q2:  What does each set of parentheses express, and bring to the overall declaration this line achieves?
+
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.
+
<ul>
          The second parentheses express the C data type of "function", the data type to which the type-defined pointer points.
+
<i>
 +
A:  The first parentheses assure and clarify that the C pointer operator `*` applies to the declared newly defined type, the function pointer.
 +
<ul>
 +
The second parentheses express the C data type of "function", the data type to which the type-defined pointer points.
 +
</ul>
 +
</i>
 +
</ul>
  
    Q3:  What does the syntax look like to assign a function to a function pointer?
+
Q3:  What does the syntax look like to assign a function to a function pointer?
      A; Syntax looks like 'function_ptr = &function_name;'
+
<ul>
 +
<i>
 +
A: Syntax looks like 'function_ptr = &function_name;'
 +
</i>
 +
</ul>
 +
 
 +
</ul>
  
  

Revision as of 18:51, 9 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.


^ Section 3

[ ] 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 4 - see RMB Consulting reference

[ ] 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


2022-06-06

The #error pre-processor directive:

Lvalues and rvalues:

C unions: