In this blog, 25.000 books will be uploaded, so far more than 1400 books are available. Books, will be added daily, please check this blog daily.
Thursday, August 5, 2010
The TINI™ Specification and Developer’s Guide
Contents
Foreword xi
Preface xiii
CHAPTER 1 The TINI Platform. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Applications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 TINI Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3.1 The Memory Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3.2 Integrated I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3.3 A Hardware Reference Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4 TINI Runtime Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4.1 API Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4.2 The Java Virtual Machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.4.3 Native Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4.4 TINI OS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.4.5 Bootstrapping the System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.4.6 Step 1: Execute the Bootstrap Loader . . . . . . . . . . . . . . . . . . . . . . 19
1.4.7 Step 2: Initialize the Runtime Environment. . . . . . . . . . . . . . . . . . 20
1.4.8 Step 3: Start the Primary Java Application . . . . . . . . . . . . . . . . . . 21
1.5 The Future . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
CHAPTER 2 Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1 Hardware Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1.1 The TINI Board Model 390 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.1.2 The E10 Socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2 Development Platform Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.2.1 A Java Development Environment. . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2.2 The Java Communications API . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2.3 The TINI SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.3 Loading the TINI Runtime Environment . . . . . . . . . . . . . . . . . . . . . . . . 29
2.4 Slush: A Quick Primer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.4.1 Slush Defined. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.4.2 Starting a New Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.4.3 Exploring the File System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.4.4 Getting Help. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.5 Configuring the Network. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.6 Some Simple Examples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.6.1 HelloWorld. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.6.2 Blinky, Your First TINI I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.6.3 HelloWeb, a Trivial Web Server . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.7 Debugging Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
CHAPTER 3 Serial Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.1 Introduction and Terminology. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.2 The Java Communications API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.2.1 Acquiring and Configuring Serial Ports. . . . . . . . . . . . . . . . . . . . . 56
3.2.2 Flow Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.2.3 Sending and Receiving Serial Data . . . . . . . . . . . . . . . . . . . . . . . . 61
3.2.4 Serial Port Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.3 TINI’s Serial Ports. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.4 A Small Terminal Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.5 A Serial ⇔ Ethernet Converter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
CHAPTER 4 The 1-Wire Net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
4.1 1-Wire Networking Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4.1.1 1-Wire Signalling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4.1.2 1-Wire Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.1.3 Addressing 1-Wire Chips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
4.1.4 1-Wire Chips and iButtons. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
4.2 Adapters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
4.2.1 Finding and Creating Adapters . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
4.2.2 The Internal Adapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.2.3 The External Adapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
4.2.4 Determining an Adapter’s Capabilities . . . . . . . . . . . . . . . . . . . . . 91
4.2.5 Searching for 1-Wire Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
4.2.6 Adapter Ownership . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.3 Direct 1-Wire Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
4.4 Containers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
4.4.1 The Class OneWireContainer . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
4.4.2 Creating Container Instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
4.4.3 Example: 1-Wire Humidity Sensor. . . . . . . . . . . . . . . . . . . . . . . 104
4.5 Ensuring Data Integrity Using CRCs . . . . . . . . . . . . . . . . . . . . . . . . . . 108
CHAPTER 5 TCP/IP Networking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
5.1 TINI Networking Environment and API Overview. . . . . . . . . . . . . . . . 112
5.1.1 The Network Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
5.1.2 Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
5.1.3 PPP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
5.1.4 Loopback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
5.2 Setting Network Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
5.2.1 Committing Static Network Parameters . . . . . . . . . . . . . . . . . . . 119
5.2.2 Dynamic IP Configuration Using DHCP. . . . . . . . . . . . . . . . . . . 121
5.3 DNS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
5.4 HTTP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
5.5 ICMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
CHAPTER 6 Dial-Up Networking Using PPP . . . . . . . . . . . . . . . . . . . . . 139
6.1 The PPP API Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
6.2 PPP Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
6.2.1 STARTING Event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
6.2.2 AUTHENTICATION_REQUESTED Event . . . . . . . . . . . . . . . . 143
6.2.3 UP Event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
6.2.4 STOPPED Event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
6.2.5 CLOSED Event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
CHAPTER 7 Building a Remote Data Logger . . . . . . . . . . . . . . . . . . . . 147
7.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
7.2 The DataLogger Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
7.3 Collecting the Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
7.4 A Sample Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
7.5 Implementing the PPP Daemon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
7.6 Managing the PPP Data Link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
7.6.1 The Serial Link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
7.6.2 Controlling the Modem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
7.7 Adding the PPP Daemon to DataLogger. . . . . . . . . . . . . . . . . . . . . . . . 175
7.8 Testing the Entire Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
CHAPTER 8 Parallel I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
8.1 TINI’s Parallel Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
8.2 The DataPort Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
8.2.1 Data Transfer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
8.2.2 Memory Access Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
8.2.3 Controlling Bus Timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
8.3 Parallel I/O Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
8.3.1 Additional TTL I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
8.3.2 Reading and Writing External Memory. . . . . . . . . . . . . . . . . . . . 196
CHAPTER 9 Just the Bits. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
9.1 TINI’s Ports and Port Pins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
9.2 The BitPort Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
9.3 Synthetic Port Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
9.3.1 Example: Creating Additional Outputs . . . . . . . . . . . . . . . . . . . . 204
9.4 The BytePort Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
9.5 Performance of BitPort and BytePort . . . . . . . . . . . . . . . . . . . . . . . . . . 207
CHAPTER 10 Accessing System Resources . . . . . . . . . . . . . . . . . . . . . . 209
10.1 The Real-Time Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
10.1.1 Setting the Current Date and Time . . . . . . . . . . . . . . . . . . . . . . 212
10.1.2 Using a Network Time Server . . . . . . . . . . . . . . . . . . . . . . . . . . 212
10.2 The Watchdog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
10.2.1 Motivation for Using the Watchdog. . . . . . . . . . . . . . . . . . . . . . 215
10.2.2 A Tail of Two Dogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
10.2.3 Using the Watchdog Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
10.2.4 Example Use of the Watchdog Timer . . . . . . . . . . . . . . . . . . . . 217
10.2.5 Beware of Dog! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
10.3 The External Interrupt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
10.3.1 Polling versus Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
10.3.2 Properties of the External Interrupt . . . . . . . . . . . . . . . . . . . . . . 220
10.3.3 Triggering the External Interrupt . . . . . . . . . . . . . . . . . . . . . . . . 220
10.3.4 Receiving Notification of Interrupts . . . . . . . . . . . . . . . . . . . . . 221
10.3.5 Sharing a Common Interrupt Source . . . . . . . . . . . . . . . . . . . . . 224
CHAPTER 11 Application Programming Tips . . . . . . . . . . . . . . . . . . . . 225
11.1 Performance Profiling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
11.2 Efficient I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
11.2.1 Block Data Transfer versus Byte-Banging . . . . . . . . . . . . . . . . 227
11.2.2 Buffered Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
11.3 Memory Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
11.3.1 Object Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
11.3.2 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
11.3.3 Profiling Memory Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
11.3.4 Garbage Collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
11.4 Other Optimization Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
11.4.1 Relative Cost of Common Operations . . . . . . . . . . . . . . . . . . . . 238
11.4.2 Loop Optimizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
11.4.3 Arithmetic Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
11.4.4 The ArrayUtils Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
11.5 An Optimization Strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
11.6 Application Hardening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
11.6.1 TINI’s Memory Technology and Data Persistence . . . . . . . . . . 249
11.6.2 Application Startup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
11.6.3 Hardening Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
APPENDIX Almanac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Download
Another Software Engineering books
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment