0 |
Title Page |
|
14 |
Interrupts |
1 |
Table of Contents |
|
14.1 |
How does the outside world get my attention? |
2 |
The Course, aka CMPUT 296/297, CMPUT 114/115 |
|
14.2 |
The process for servicing an interrupt |
2.1 |
Introduction to the Scaled Up Pilot |
|
14.3 |
Pitfalls |
2.2 |
IMPORTANT NOTE TO THE STUDENT |
|
14.4 |
Examples of Timer Interrupts |
2.3 |
The Story So Far - 2012-09-24 |
|
14.5 |
External Interrupts and Switch Debouncing |
3 |
Bits, Bytes, and Modular Artithmetic |
|
14.6 |
Subtle Issues |
3.1 |
The Natural Numbers Are All You Have |
|
14.7 |
Code examples |
3.2 |
The Division Algorithm |
|
15 |
Queues |
3.3 |
Greatest Common Divisor |
|
15.1 |
What is a Queue? |
3.4 |
Modular Arithmetic |
|
15.2 |
Implementing a queue in C using arrays |
3.5 |
Binary Representations |
|
15.3 |
Implementing a queue in C using linked lists |
3.6 |
Hexadecimal Notation |
|
15.4 |
A Queue Implementation That is More Modular |
3.7 |
General Base-B Positional Representations |
|
16 |
Hash Tables |
3.8 |
Arduino Bit Code |
|
16.1 |
What is a hash table? |
4 |
Signed, Unsigned, Byte, Normal, and Long, LED Bit Arithmetic |
|
16.2 |
Implementing a Hash Table with Collision Lists |
4.1 |
Part 1: Counting Bits |
|
17 |
Python |
4.2 |
Part 2: LED Bit Display |
|
17.1 |
The Python Language and Way |
4.3 |
Tasks |
|
17.2 |
What does assignment mean? |
5 |
Logical Operations on Bits |
|
17.3 |
Our First Python Examples |
5.1 |
Basic Logic Operations |
|
17.4 |
Object Oriented Notions |
5.2 |
DeMorgan's Laws |
|
17.5 |
A simple example object |
5.3 |
Logic and Bit Operations |
|
17.6 |
Converting the hash table into a dictionary |
5.4 |
Bit Shifting |
|
17.7 |
Lists and References |
5.5 |
Bit Manipulation |
|
17.8 |
Lists that contain themselves |
6 |
Strings and Arrays |
|
18 |
Graph Theory |
6.1 |
Internal Representation |
|
18.1 |
Basic Notion of a Graph |
6.2 |
String Example |
|
18.2 |
Graph Notions |
6.3 |
Arrays |
|
18.3 |
Exercise: An Example of A Graph Algorithm |
7 |
Diffie-Hellman Key Exchange |
|
18.4 |
Spanning Trees |
7.1 |
Talking Arduinos |
|
18.5 |
Min-Cost Spanning Trees |
7.2 |
Diffie-Hellman Key Exchange |
|
18.6 |
Shortest Paths |
7.3 |
Implementing Diffie-Hellman on the Arduino |
|
18.7 |
Min-Cost Paths |
7.4 |
Thinking like a Computer Scientist: Modular Exponentiation |
|
18.8 |
The Digraph Class |
7.5 |
Starter Program |
|
18.9 |
Displaying Graphs and Digraphs with Graphviz |
7.6 |
Procedures |
|
19 |
Object-Oriented Class Design Principles |
7.7 |
Algorithm Design |
|
19.1 |
Separation of Concerns |
7.8 |
Algorithm Analysis |
|
19.2 |
Abstraction |
7.9 |
A Better Algorithm |
|
19.3 |
Acessors |
8 |
Reasoning About Programs |
|
19.4 |
Law of Demeter |
8.1 |
Properties, Assertions, and Invariants |
|
19.5 |
Styles of Reuse |
9 |
Using the Adafruit LCD display |
|
19.6 |
Inheritance as Reuse |
9.1 |
Recommended Wiring Order |
|
19.7 |
Liskov's Principle of Substitution |
9.2 |
Hello World: Graphics Test |
|
19.8 |
Is-a vs Has-a |
10 |
Memory |
|
19.9 |
Slicing |
10.1 |
Where is stuff stored? |
|
19.10 |
Polymorphism and Virtual Functions |
10.2 |
How does a program use memory? |
|
19.11 |
Containers |
10.3 |
General Notation and Properties of Pointers |
|
19.12 |
Behaviour Restriction |
10.4 |
Big Endian and Little Endian |
|
19.13 |
Foundation Classes |
10.5 |
The Stack and Heap |
|
19.14 |
Class Refactoring |
10.6 |
Block Variables |
|
20 |
Binary trees |
10.7 |
Procedure/Function Calls and the Stack |
|
20.1 |
Binary Trees |
10.8 |
Passing Arguments by Value to Procedures and Functions |
|
20.2 |
Binary Tree Implementations |
10.9 |
Utilities for Managing Memory |
|
20.3 |
Algorithms over Binary Trees |
10.10 |
Other examples for your viewing pleasure |
|
21 |
Dynamic Programming |
11 |
Data Structures |
|
21.1 |
Recursive decomposition of problems |
11.1 |
Arrays and Address Arithmetic |
|
21.2 |
Floyd-Warshall All-Pairs Min-Cost Paths |
11.2 |
Dynamically Allocated Arrays |
|
22 |
How to Read a Program |
11.3 |
Dynamically Allocating a Singleton |
|
23 |
Installation Instructions |
11.4 |
Making composite data structures |
|
23.1 |
Ubuntu Virtual Machine |
11.5 |
Reading and Writing to the SD card |
|
23.2 |
Ubuntu Linux |
12 |
Sorting and Big O notation |
|
23.3 |
OSX |
12.1 |
Selection Sort |
|
23.4 |
Windows XP and 7 |
12.2 |
Big O Notation |
|
24 |
The AVR Tool Chain |
12.3 |
Merge Sort |
|
24.1 |
Overview |
12.4 |
Quick Sort |
|
24.2 |
Software Abstraction Layers |
12.5 |
Stable Sorting |
|
24.3 |
Makefiles for the Arduino Environment |
12.6 |
Animated Sorting Algorithms |
|
24.4 |
Makefiles in General |
12.7 |
The Sorting Library |
|
24.5 |
Makefiles For Collections Of Files |
13 |
Searching |
|
25 |
Git |
13.1 |
Bruteforce Search |
|
25.1 |
Version Control |
13.2 |
Binary Search |
|
25.2 |
The Various Git Repository Models |
13.3 |
A Typical Binary Search Pattern |
|
25.3 |
Using Git on gpu.srv.ualberta.ca with AFS |
13.4 |
Performance of Binary Search |
|
25.4 |
Using Git |
13.5 |
Other Applications of Binary Search |
|
25.5 |
Installing Git |
13.6 |
The Searching Library |
|
26 |
Revision Log |
13.7 |
Combining Sorting and Searching |
|
27 |
End of Document |