bitwise operators pointers functions structs interrupts (in c)
Post on 19-Dec-2015
223 Views
Preview:
TRANSCRIPT
Bitwise Operators
Pointers
Functions
Structs
Interrupts
(in C)
table_07_00
Bitwise operators: useful for dealing with signals of different widths;NOTE: these are LOGICAL operators and variables are declared UNSIGNED—why?(example: homework 1, problem 1)
Additional useful reference: http://www.cs.cf.ac.uk/Dave/C/node13.html
fig_07_00
Examples of c operations at the byte level
fig_07_01
Example of c program—”portShadow” mirrors what is on port;Note use of parentheses to guarantee order of bitlevel operations (even if we are using default order)
fig_07_02
Using shift operators (remember these are logical):
fig_07_03
Redoing the previous problem with shifts:
fig_07_04
Getting data from the port:
fig_07_05
Using bitlevel operations for arithmetic;Are there any problems with this approach?
C: on signed data, left shift undefined if overflow occurs, right shift is implementation-dependent;Java: all integers are signed
fig_07_06
Can use shifts for slightly more complex multiplies and divides;More complex operations (e.g., with 3 1’s in multiplier or divider) are probably not efficient
fig_07_07
Pointers: example data
fig_07_09
Example instruction:
fig_07_10
Example 2 of Instruction execution
fig_07_11
Example: what is output?
fig_07_12a
Pointer arithmetic—not for beginners!
fig_07_12b
Pointer arithmetic: additional examples
fig_07_13
Constant pointers:
fig_07_14
Using constants and constant pointers:
fig_07_14
Note: pointers can be “generic” or NULL:
Generic:Type void: pointer can point to a variable of any type
example: 7.3, p. 265
NULL:Pointer needs to be assigned a valid address before dereferencing, otherwise hard-to-find bugs can occur
Address 0 is not acceptable
Solution: use null pointer address, (void*) 0
fig_07_15
C functions:
fig_07_16
Example:
fig_07_17
Function call: note order of parameters on stack
fig_07_18
Using stack to return result:
Function body in memory:
fig_07_20
Pass by value (default in c):
fig_07_21
Pass by reference:
fig_07_22
Information hiding: static qualifier prevents visibility outside this file (even to linker):
fig_07_23
Function documentation: template for header
fig_07_24
We can also define pointers to functions:
Dereferencing methods:
fig_07_26
Example:
fig_07_27
Example 2:
fig_07_28
Pointing to add:
fig_07_29
Pointing to subtract: pointer does not know functionality, only address
fig_07_31
User-defined data structure: struct
fig_07_30
User-defined data structure: struct
Example:
fig_07_34
Can also define a type and use it repeatedly:
fig_07_35
Syntax for using struct:
fig_07_36
Example: define a rectangle
fig_07_37
One struct using another:
fig_07_38
C code for this example:
fig_07_39
Definign the rectangle type:
fig_07_40
Using point and rectangle definitions:
fig_07_41
Rectangle functions:
fig_07_42
Example program:
fig_07_43
Example: passing a struct to a function:
fig_07_44
Interrupt service routines: ISR—needs to be SHORT and SIMPLE
fig_07_45
How an interrupt occurs:
Interrupt may be disabled under certain conditions
fig_07_46
Enable / disable control mechanisms:
Global
Maskingmethod 1: use prioritiesmethod 2: use mask register
(bitwise masks)
Note: interrupts are transient, if we choose to ignore one we may not be able to service it later
top related