<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://murray.cds.caltech.edu/index.php?action=history&amp;feed=atom&amp;title=EECI08%3A_Embedded_Systems_Programming</id>
	<title>EECI08: Embedded Systems Programming - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://murray.cds.caltech.edu/index.php?action=history&amp;feed=atom&amp;title=EECI08%3A_Embedded_Systems_Programming"/>
	<link rel="alternate" type="text/html" href="https://murray.cds.caltech.edu/index.php?title=EECI08:_Embedded_Systems_Programming&amp;action=history"/>
	<updated>2026-06-25T23:26:06Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://murray.cds.caltech.edu/index.php?title=EECI08:_Embedded_Systems_Programming&amp;diff=8998&amp;oldid=prev</id>
		<title>Murray: EECI: Embedded Systems Programming moved to EECI08: Embedded Systems Programming</title>
		<link rel="alternate" type="text/html" href="https://murray.cds.caltech.edu/index.php?title=EECI08:_Embedded_Systems_Programming&amp;diff=8998&amp;oldid=prev"/>
		<updated>2009-03-01T20:13:31Z</updated>

		<summary type="html">&lt;p&gt;EECI: Embedded Systems Programming moved to EECI08: Embedded Systems Programming&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:13, 1 March 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key acs_math_mw_144-murraycds_:diff:1.41:old-7694:rev-8998 --&gt;
&lt;/table&gt;</summary>
		<author><name>Murray</name></author>
	</entry>
	<entry>
		<id>https://murray.cds.caltech.edu/index.php?title=EECI08:_Embedded_Systems_Programming&amp;diff=7694&amp;oldid=prev</id>
		<title>Murray at 00:58, 29 March 2008</title>
		<link rel="alternate" type="text/html" href="https://murray.cds.caltech.edu/index.php?title=EECI08:_Embedded_Systems_Programming&amp;diff=7694&amp;oldid=prev"/>
		<updated>2008-03-29T00:58:01Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 00:58, 29 March 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{eeci-sp08 header|prev=[[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;NCS&lt;/del&gt;: Case Study - Autonomous Driving|Autonomous Driving]]|next=[[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;NCS&lt;/del&gt;: Trajectory Generation and Differential Flatness|Trajectory Generation]]}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{eeci-sp08 header|prev=[[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;EECI&lt;/ins&gt;: Case Study - Autonomous Driving|Autonomous Driving]]|next=[[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;EECI&lt;/ins&gt;: Trajectory Generation and Differential Flatness|Trajectory Generation]]}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{righttoc}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{righttoc}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key acs_math_mw_144-murraycds_:diff:1.41:old-7633:rev-7694:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Murray</name></author>
	</entry>
	<entry>
		<id>https://murray.cds.caltech.edu/index.php?title=EECI08:_Embedded_Systems_Programming&amp;diff=7633&amp;oldid=prev</id>
		<title>Murray: NCS: Embedded Systems Programming moved to EECI: Embedded Systems Programming</title>
		<link rel="alternate" type="text/html" href="https://murray.cds.caltech.edu/index.php?title=EECI08:_Embedded_Systems_Programming&amp;diff=7633&amp;oldid=prev"/>
		<updated>2008-03-28T15:18:54Z</updated>

		<summary type="html">&lt;p&gt;NCS: Embedded Systems Programming moved to EECI: Embedded Systems Programming&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 15:18, 28 March 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Murray</name></author>
	</entry>
	<entry>
		<id>https://murray.cds.caltech.edu/index.php?title=EECI08:_Embedded_Systems_Programming&amp;diff=7590&amp;oldid=prev</id>
		<title>Murray at 20:11, 16 March 2008</title>
		<link rel="alternate" type="text/html" href="https://murray.cds.caltech.edu/index.php?title=EECI08:_Embedded_Systems_Programming&amp;diff=7590&amp;oldid=prev"/>
		<updated>2008-03-16T20:11:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:11, 16 March 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{eeci-sp08 header|prev=[[NCS: Case Study - Autonomous Driving|Autonomous Driving]]|next=[[NCS: &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Real-Time &lt;/del&gt;Trajectory Generation|Trajectory Generation]]}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{eeci-sp08 header|prev=[[NCS: Case Study - Autonomous Driving|Autonomous Driving]]|next=[[NCS: Trajectory Generation &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and Differential Flatness&lt;/ins&gt;|Trajectory Generation]]}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{righttoc}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{righttoc}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Murray</name></author>
	</entry>
	<entry>
		<id>https://murray.cds.caltech.edu/index.php?title=EECI08:_Embedded_Systems_Programming&amp;diff=7589&amp;oldid=prev</id>
		<title>Murray at 20:10, 16 March 2008</title>
		<link rel="alternate" type="text/html" href="https://murray.cds.caltech.edu/index.php?title=EECI08:_Embedded_Systems_Programming&amp;diff=7589&amp;oldid=prev"/>
		<updated>2008-03-16T20:10:08Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:10, 16 March 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{eeci-sp08 header|prev=[[NCS: Case Study - Autonomous Driving|Autonomous Driving]]|next=[[NCS: Real-Time Trajectory Generation|Trajectory Generation]]}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{eeci-sp08 header|prev=[[NCS: Case Study - Autonomous Driving|Autonomous Driving]]|next=[[NCS: Real-Time Trajectory Generation|Trajectory Generation]]}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{righttoc}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Early control systems used carefully synchronized control loops running on a single computer to insure that control processes ran at a fixed clock cycle and with predictable timing.  Modern multi-threaded control environments use much looser timing models and provide non-deterministic execution, but provide advantages in terms of programming flexibility and processor utilization.  In addition, networked communication allows multiple computers to run asynchronously, allowing a much richer set of behaviors but complicating the problem of debugging and verifying code.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Early control systems used carefully synchronized control loops running on a single computer to insure that control processes ran at a fixed clock cycle and with predictable timing.  Modern multi-threaded control environments use much looser timing models and provide non-deterministic execution, but provide advantages in terms of programming flexibility and processor utilization.  In addition, networked communication allows multiple computers to run asynchronously, allowing a much richer set of behaviors but complicating the problem of debugging and verifying code.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This lecture describes some of the software infractructure used to implement moder networked control systems.  We first discuss &amp;quot;message transfer systems&amp;quot;, which is responsible for managing network communications between computers and software modules with the control system.  We focus on the use of [[spread]] as a specific example of a low-level message transfer subsystem and describe how it can be used in a NCS context.  We then describe the  [[Pthreads]] programming environment, which provides a standardized API for managing process threads and mutexes (to resolve data access conflicts).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This lecture describes some of the software infractructure used to implement moder networked control systems.  We first discuss &amp;quot;message transfer systems&amp;quot;, which is responsible for managing network communications between computers and software modules with the control system.  We focus on the use of [[spread]] as a specific example of a low-level message transfer subsystem and describe how it can be used in a NCS context.  We then describe the  [[Pthreads]] programming environment, which provides a standardized API for managing process threads and mutexes (to resolve data access conflicts).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key acs_math_mw_144-murraycds_:diff:1.41:old-7588:rev-7589:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Murray</name></author>
	</entry>
	<entry>
		<id>https://murray.cds.caltech.edu/index.php?title=EECI08:_Embedded_Systems_Programming&amp;diff=7588&amp;oldid=prev</id>
		<title>Murray at 20:09, 16 March 2008</title>
		<link rel="alternate" type="text/html" href="https://murray.cds.caltech.edu/index.php?title=EECI08:_Embedded_Systems_Programming&amp;diff=7588&amp;oldid=prev"/>
		<updated>2008-03-16T20:09:47Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{eeci-sp08 header|prev=[[NCS: Case Study - Autonomous Driving|Autonomous Driving]]|next=[[NCS: Real-Time Trajectory Generation|Trajectory Generation]]}}&lt;br /&gt;
&lt;br /&gt;
Early control systems used carefully synchronized control loops running on a single computer to insure that control processes ran at a fixed clock cycle and with predictable timing.  Modern multi-threaded control environments use much looser timing models and provide non-deterministic execution, but provide advantages in terms of programming flexibility and processor utilization.  In addition, networked communication allows multiple computers to run asynchronously, allowing a much richer set of behaviors but complicating the problem of debugging and verifying code.&lt;br /&gt;
This lecture describes some of the software infractructure used to implement moder networked control systems.  We first discuss &amp;quot;message transfer systems&amp;quot;, which is responsible for managing network communications between computers and software modules with the control system.  We focus on the use of [[spread]] as a specific example of a low-level message transfer subsystem and describe how it can be used in a NCS context.  We then describe the  [[Pthreads]] programming environment, which provides a standardized API for managing process threads and mutexes (to resolve data access conflicts).&lt;br /&gt;
&lt;br /&gt;
== Lecture Materials ==&lt;br /&gt;
* Lecture slides: {{eeci-sp08 pdf|L3_embedded.pdf|Embedded Systems Programming}}&lt;br /&gt;
&lt;br /&gt;
== Reading ==&lt;br /&gt;
=== Messaging Systems ===&lt;br /&gt;
* &amp;lt;p&amp;gt;[http://portal.acm.org/citation.cfm?id=359563 Time, clocks, and the ordering of events in a distributed system], L. Lamport. &amp;#039;&amp;#039;Communications of the ACM&amp;#039;&amp;#039;, 21(7):558-565, 1978.  This is a classic paper on ordering of messages in distributed systems.  A must read for distributed systems.  &amp;lt;/p&amp;gt;&lt;br /&gt;
* &amp;lt;p&amp;gt;[http://portal.acm.org/citation.cfm?coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;id=37515 Exploiting virtual synchrony in distributed systems], K. Birman and T. Joseph. ACM Symposium on Operating Systems Principles, 1987.  This paper gives a nice overview of some of the problems in group messaging systems and is one of the sets of papers that motivated the work that lead to [[Spread]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;p&amp;gt;[http://www.spread.org/docs/guide/users_guide.pdf A Users Guide to Spread], J. Stanton. 2002.  This is the documentation for the [http://www.spread.org Spread Toolkit].  The first and second chapters provide most of the information you need to understand the basic ideas, although the way in which [[Spread]] servers are configured, described in Chapter 3, is also useful.&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;p&amp;gt;[http://www.cnds.jhu.edu/pub/papers/spread.pdf The Spread Wide Area Group Communication System], Y. Amir and J. Stanton.  Technical Report CNDS-98-4, The Center for Networking and Distributed Systems, The Johns Hopkins University, 1998.  The paper provides a detailed technical description of how [[Spread]] works.  It is mainly useful if you want to know more about what [[spread]] does.  Requires some background in network protocols if you want to understand the details. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;p&amp;gt;[http://www.cnds.jhu.edu/pub/papers/hop_ftcs2000.pdf A Low Latency, Loss Tolerant Architecture and Protocol for Wide Area Group Communication], Yair Amir, Claudiu Danilov, and Jonathan Stanton.  International Conference on Dependable Systems and Networks (DSN00), New York, New York, June 25-28, 2000. The paper is similar to the one above but with more technical details. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Threads ===&lt;br /&gt;
* &amp;lt;p&amp;gt;[http://www.llnl.gov/computing/tutorials/pthreads/ POSIX Threads Programming], Lawrence Livermore National Laboratory. 2006.  This tutorial provides an introduction to Pthreads, the standard implementation of threads under linux. It&amp;#039;s a pretty quick read, with examples of the code and pretty good descriptions of the basic pthreads functionality.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;p&amp;gt;[http://www.acm.org/classics/feb96/ Monitors: An Operating System Structuring Concept], C. A. R. Hoare.  &amp;#039;&amp;#039;Communciations of the ACM&amp;#039;&amp;#039;, 17(10):549--557, 1974.  This paper describes the concept of a &amp;quot;monitor&amp;quot;, which is basically a function that uses mutexes to access a shared resourse.  This is one of the early papers on concurrent computing and is cited as one of the design patterns for using threads and mutexes.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;p&amp;gt;Cooperating Sequential Processes, E. W. Dijkstra.  In &amp;#039;&amp;#039;Structured Programming&amp;#039;&amp;#039;, Academic Press, 1972.  This is one of the most widely cited papers in concurrent programming and is often labelled as the paper that started the field.  I haven&amp;#039;t been able to locate an online copy yet (and haven&amp;#039;t read it either).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional Resources ==&lt;br /&gt;
* [http://www.spread.org Spread Toolbox] - The Spread Wide Area Group Communication System&lt;br /&gt;
* [http://www.isd.mel.nist.gov/projects/rcslib/NMLcpp.html  Neutral Message Language (NML) Programmers Guide] - part of the NIST [http://www.isd.mel.nist.gov/projects/rcslib/ Realtime Control System] library&lt;br /&gt;
* [http://roboflag.mae.cornell.edu/Documentation.html RoboFlag documentation] - includes discussion of how RoboFlag network communications are implemented&lt;/div&gt;</summary>
		<author><name>Murray</name></author>
	</entry>
</feed>