Download presentation
Presentation is loading. Please wait.
1
Bitwise Operators Pointers Functions Structs Interrupts (in C)
2
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
3
fig_07_00 Examples of c operations at the byte level
4
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)
5
fig_07_02 Using shift operators (remember these are logical):
6
fig_07_03 Redoing the previous problem with shifts:
7
fig_07_04 Getting data from the port:
8
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
9
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
10
fig_07_07 Pointers: example data
11
fig_07_09 Example instruction:
12
fig_07_10 Example 2 of Instruction execution
13
fig_07_11 Example: what is output?
14
fig_07_12a Pointer arithmetic—not for beginners!
15
fig_07_12b Pointer arithmetic: additional examples
16
fig_07_13 Constant pointers:
17
fig_07_14 Using constants and constant pointers:
18
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
19
fig_07_15 C functions:
20
fig_07_16 Example:
21
fig_07_17 Function call: note order of parameters on stack
22
fig_07_18 Using stack to return result: Function body in memory:
23
fig_07_20 Pass by value (default in c):
24
fig_07_21 Pass by reference:
25
fig_07_22 Information hiding: static qualifier prevents visibility outside this file (even to linker):
26
fig_07_23 Function documentation: template for header
27
fig_07_24 We can also define pointers to functions: Dereferencing methods:
28
fig_07_26 Example:
29
fig_07_27 Example 2:
30
fig_07_28 Pointing to add:
31
fig_07_29 Pointing to subtract: pointer does not know functionality, only address
32
fig_07_31 User-defined data structure: struct
33
fig_07_30 User-defined data structure: struct Example:
34
fig_07_34 Can also define a type and use it repeatedly:
35
fig_07_35 Syntax for using struct:
36
fig_07_36 Example: define a rectangle
37
fig_07_37 One struct using another:
38
fig_07_38 C code for this example:
39
fig_07_39 Definign the rectangle type:
40
fig_07_40 Using point and rectangle definitions:
41
fig_07_41 Rectangle functions:
42
fig_07_42 Example program:
43
fig_07_43 Example: passing a struct to a function:
44
fig_07_44 Interrupt service routines: ISR—needs to be SHORT and SIMPLE
45
fig_07_45 How an interrupt occurs: Interrupt may be disabled under certain conditions
46
fig_07_46 Enable / disable control mechanisms: Global Masking method 1: use priorities method 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
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.