<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments for Software Integrity Ltd</title>
	<atom:link href="http://software-integrity.com/blog/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://software-integrity.com/blog</link>
	<description>Realtime and Embedded Software</description>
	<lastBuildDate>Tue, 11 Jun 2013 09:36:39 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
	<item>
		<title>Comment on Whatever Happened to the Worst Case? by Peter Bushell</title>
		<link>http://software-integrity.com/blog/2011/08/25/whatever-happened-to-the-worst-case/comment-page-1/#comment-1224</link>
		<dc:creator>Peter Bushell</dc:creator>
		<pubDate>Tue, 11 Jun 2013 09:36:39 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=719#comment-1224</guid>
		<description><![CDATA[I accidentally trashed a relevant comment from &lt;strong&gt;Juha Aaltonen&lt;/strong&gt;. Sorry, Juha! However, I was able to retrieve it from the notification email:



&lt;blockquote&gt;Too hard for the today&#039;s engineers. The push for a lot of cheap labor has paid off.
To get less capable people graduated (and better results in  the P.O.V of university administrations) the level must have been dropped.

&quot;There are no crimes if even murder is legal&quot;.&lt;/blockquote&gt;

]]></description>
		<content:encoded><![CDATA[<p>I accidentally trashed a relevant comment from <strong>Juha Aaltonen</strong>. Sorry, Juha! However, I was able to retrieve it from the notification email:</p>
<blockquote><p>Too hard for the today&#8217;s engineers. The push for a lot of cheap labor has paid off.<br />
To get less capable people graduated (and better results in  the P.O.V of university administrations) the level must have been dropped.</p>
<p>&#8220;There are no crimes if even murder is legal&#8221;.</p></blockquote>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Whatever Happened to the Worst Case? by Jim Cooling</title>
		<link>http://software-integrity.com/blog/2011/08/25/whatever-happened-to-the-worst-case/comment-page-1/#comment-1202</link>
		<dc:creator>Jim Cooling</dc:creator>
		<pubDate>Fri, 31 May 2013 10:03:07 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=719#comment-1202</guid>
		<description><![CDATA[Peter, have just found this posting  -  agree with you 100%.  But having spent many years promoting the virtues of quality software engineering, all I can say is &#039;I failed&#039;.  Sadly, dismal but true.]]></description>
		<content:encoded><![CDATA[<p>Peter, have just found this posting  &#8211;  agree with you 100%.  But having spent many years promoting the virtues of quality software engineering, all I can say is &#8216;I failed&#8217;.  Sadly, dismal but true.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Bit-Banding Updated by abhi</title>
		<link>http://software-integrity.com/blog/2013/05/07/bit-banding-updated/comment-page-1/#comment-1035</link>
		<dc:creator>abhi</dc:creator>
		<pubDate>Wed, 08 May 2013 16:49:53 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=870#comment-1035</guid>
		<description><![CDATA[that would be great. thank you :)]]></description>
		<content:encoded><![CDATA[<p>that would be great. thank you <img src='http://software-integrity.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Bit-Banding Updated by Peter Bushell</title>
		<link>http://software-integrity.com/blog/2013/05/07/bit-banding-updated/comment-page-1/#comment-1034</link>
		<dc:creator>Peter Bushell</dc:creator>
		<pubDate>Wed, 08 May 2013 16:46:22 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=870#comment-1034</guid>
		<description><![CDATA[The C++ class above does not support this way of doing things; it expects you to create a BitWord variable, then access it, either as a word or one bit at a time.

However, I did write a couple of functions to set and clear bits in a word whose address was given as an argument. I&#039;m not putting those on the blog (unless the demand is overwhelming!) but I&#039;ll send you the code by email.]]></description>
		<content:encoded><![CDATA[<p>The C++ class above does not support this way of doing things; it expects you to create a BitWord variable, then access it, either as a word or one bit at a time.</p>
<p>However, I did write a couple of functions to set and clear bits in a word whose address was given as an argument. I&#8217;m not putting those on the blog (unless the demand is overwhelming!) but I&#8217;ll send you the code by email.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Bit-Banding Updated by abhi</title>
		<link>http://software-integrity.com/blog/2013/05/07/bit-banding-updated/comment-page-1/#comment-1032</link>
		<dc:creator>abhi</dc:creator>
		<pubDate>Wed, 08 May 2013 15:13:51 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=870#comment-1032</guid>
		<description><![CDATA[thanks for your response. I have one more query. 
If im right, m_pBit stored the alias of the RAM addresses. Lets suppose there is a variable *add storing the address of a variable. Is it possible to set exactly one bit in this address? It would be great if you can provide an example.
Thanks in advance..]]></description>
		<content:encoded><![CDATA[<p>thanks for your response. I have one more query.<br />
If im right, m_pBit stored the alias of the RAM addresses. Lets suppose there is a variable *add storing the address of a variable. Is it possible to set exactly one bit in this address? It would be great if you can provide an example.<br />
Thanks in advance..</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Bit-Banding Updated by Peter Bushell</title>
		<link>http://software-integrity.com/blog/2013/05/07/bit-banding-updated/comment-page-1/#comment-1028</link>
		<dc:creator>Peter Bushell</dc:creator>
		<pubDate>Tue, 07 May 2013 18:03:03 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=870#comment-1028</guid>
		<description><![CDATA[Thanks for your comment, Abhi.

I hadn&#039;t really thought about it, but I don&#039;t see why things couldn&#039;t be configured that way, though the class would then need to be a template to set the array size for the unsigned ints. The other point I would make is that it would be m_value[x][32], the way I have things configured (for unsigned int rather than unsigned char, which would also be possible).

What I&#039;d prefer to see, as a tidier alternative, is an array of actual BitWord variables, where such a thing might be required - something like this:

BitWord b[12];
b[2][1] = 1U;]]></description>
		<content:encoded><![CDATA[<p>Thanks for your comment, Abhi.</p>
<p>I hadn&#8217;t really thought about it, but I don&#8217;t see why things couldn&#8217;t be configured that way, though the class would then need to be a template to set the array size for the unsigned ints. The other point I would make is that it would be m_value[x][32], the way I have things configured (for unsigned int rather than unsigned char, which would also be possible).</p>
<p>What I&#8217;d prefer to see, as a tidier alternative, is an array of actual BitWord variables, where such a thing might be required &#8211; something like this:</p>
<p>BitWord b[12];<br />
b[2][1] = 1U;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Bit-Banding Updated by abhi</title>
		<link>http://software-integrity.com/blog/2013/05/07/bit-banding-updated/comment-page-1/#comment-1027</link>
		<dc:creator>abhi</dc:creator>
		<pubDate>Tue, 07 May 2013 17:27:06 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=870#comment-1027</guid>
		<description><![CDATA[can m_value be a two dimensional(containing binary values) matrix? like m_value[12][8]. So that using bitbanding these bits of m_value can be set?]]></description>
		<content:encoded><![CDATA[<p>can m_value be a two dimensional(containing binary values) matrix? like m_value[12][8]. So that using bitbanding these bits of m_value can be set?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on ARM Cortex Bit-Banding in C++ by Peter Bushell</title>
		<link>http://software-integrity.com/blog/2013/03/04/arm-cortex-bit-banding-in-c/comment-page-1/#comment-871</link>
		<dc:creator>Peter Bushell</dc:creator>
		<pubDate>Tue, 12 Mar 2013 10:54:45 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=847#comment-871</guid>
		<description><![CDATA[I&#039;ve just edited the BitWord class, above, to put a comment about my header-file wrongdoing in the illustrative code!

If you want to use the class, the constants need to be defined in a better place.]]></description>
		<content:encoded><![CDATA[<p>I&#8217;ve just edited the BitWord class, above, to put a comment about my header-file wrongdoing in the illustrative code!</p>
<p>If you want to use the class, the constants need to be defined in a better place.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Slides from Embedded Masterclass 2012 by Peter Bushell</title>
		<link>http://software-integrity.com/blog/2012/07/16/slides-from-embedded-masterclass-2012/comment-page-1/#comment-828</link>
		<dc:creator>Peter Bushell</dc:creator>
		<pubDate>Mon, 23 Jul 2012 15:43:42 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=818#comment-828</guid>
		<description><![CDATA[You&#039;re welcome, Dan.

The workshop attracted a &quot;full house&quot; of 14 people and I was pleased that my talk was well attended, too - especially as it took place at the very end of the day.

Interest seems to be picking up again in C++ for embedded work, and not before time!]]></description>
		<content:encoded><![CDATA[<p>You&#8217;re welcome, Dan.</p>
<p>The workshop attracted a &#8220;full house&#8221; of 14 people and I was pleased that my talk was well attended, too &#8211; especially as it took place at the very end of the day.</p>
<p>Interest seems to be picking up again in C++ for embedded work, and not before time!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Slides from Embedded Masterclass 2012 by Dan</title>
		<link>http://software-integrity.com/blog/2012/07/16/slides-from-embedded-masterclass-2012/comment-page-1/#comment-827</link>
		<dc:creator>Dan</dc:creator>
		<pubDate>Mon, 23 Jul 2012 15:17:15 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=818#comment-827</guid>
		<description><![CDATA[Peter - thanks for posting the slides, I&#039;m sure your workshop &amp; talk were well-attended.

Looking forward to hearing more about SKP as things develop!]]></description>
		<content:encoded><![CDATA[<p>Peter &#8211; thanks for posting the slides, I&#8217;m sure your workshop &amp; talk were well-attended.</p>
<p>Looking forward to hearing more about SKP as things develop!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Embedded Masterclass, Cambridge, UK, 27/06/12 by Peter Bushell</title>
		<link>http://software-integrity.com/blog/2012/06/11/embedded-masterclass-cambridge-uk-270612/comment-page-1/#comment-822</link>
		<dc:creator>Peter Bushell</dc:creator>
		<pubDate>Tue, 03 Jul 2012 14:23:15 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=807#comment-822</guid>
		<description><![CDATA[&lt;a href=&quot;#comment-821&quot; rel=&quot;nofollow&quot;&gt;@Andrew Bird &lt;/a&gt; 
And thank you for attending; I&#039;m glad you enjoyed it.

I was pleasantly surprised by the interest in C++ in general, at the event. Perhaps its time has finally come, to steal at least some of C&#039;s thunder, for smaller embedded and real-time systems.]]></description>
		<content:encoded><![CDATA[<p><a href="#comment-821" rel="nofollow">@Andrew Bird </a><br />
And thank you for attending; I&#8217;m glad you enjoyed it.</p>
<p>I was pleasantly surprised by the interest in C++ in general, at the event. Perhaps its time has finally come, to steal at least some of C&#8217;s thunder, for smaller embedded and real-time systems.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Embedded Masterclass, Cambridge, UK, 27/06/12 by Andrew Bird</title>
		<link>http://software-integrity.com/blog/2012/06/11/embedded-masterclass-cambridge-uk-270612/comment-page-1/#comment-821</link>
		<dc:creator>Andrew Bird</dc:creator>
		<pubDate>Tue, 03 Jul 2012 13:28:28 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=807#comment-821</guid>
		<description><![CDATA[Just wanted to say that I enjoyed your workshop at Embedded Masterclass. Some interesting ideas about the benefits of a native C++ RTOS / Kernel and thought provoking discussion about dynamic memory.

Thanks.]]></description>
		<content:encoded><![CDATA[<p>Just wanted to say that I enjoyed your workshop at Embedded Masterclass. Some interesting ideas about the benefits of a native C++ RTOS / Kernel and thought provoking discussion about dynamic memory.</p>
<p>Thanks.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on WCP: How does your software stack up? by Peter Bushell</title>
		<link>http://software-integrity.com/blog/2011/10/18/wcp-how-does-your-software-stack-up/comment-page-1/#comment-782</link>
		<dc:creator>Peter Bushell</dc:creator>
		<pubDate>Fri, 21 Oct 2011 15:19:05 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=774#comment-782</guid>
		<description><![CDATA[You make a very important point, Dan, about the need to evaluate the stack requirement at the last minute. Perhaps it need not be done rigorously for every build, but a fresh evaluation (and adjustment, if necessary) should be done before each release.

My thoughts about doing some of the spadework at unit testing time are relevant here. If per-function figures can be obtained through an enhanced, automated test harness, then normal regression testing will produce fresh numbers each time. There remains the call-tree analysis, but that could be automated too (with some initial manual input for function pointers, which shouldn&#039;t need to be modified too often). These are my current thoughts and, like you, I welcome other people&#039;s.]]></description>
		<content:encoded><![CDATA[<p>You make a very important point, Dan, about the need to evaluate the stack requirement at the last minute. Perhaps it need not be done rigorously for every build, but a fresh evaluation (and adjustment, if necessary) should be done before each release.</p>
<p>My thoughts about doing some of the spadework at unit testing time are relevant here. If per-function figures can be obtained through an enhanced, automated test harness, then normal regression testing will produce fresh numbers each time. There remains the call-tree analysis, but that could be automated too (with some initial manual input for function pointers, which shouldn&#8217;t need to be modified too often). These are my current thoughts and, like you, I welcome other people&#8217;s.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on WCP: How does your software stack up? by Dan</title>
		<link>http://software-integrity.com/blog/2011/10/18/wcp-how-does-your-software-stack-up/comment-page-1/#comment-781</link>
		<dc:creator>Dan</dc:creator>
		<pubDate>Tue, 18 Oct 2011 17:05:21 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=774#comment-781</guid>
		<description><![CDATA[Good points about stack usage &amp; allocation.

One thing many engineers overlook - the problem that as software is refactored, debugged/fixed, enhanced, etc. its RAM usage (stack in particular) changes.  Maybe now we&#039;re using more stack in certain places, maybe now we&#039;re using less.  **But no one ever goes back &amp; re-evaluates the stack usage.**

I&#039;ve worked in (with) a lot of different organizations, and I can say confidently that very few of them do very detailed stack usage analysis in the first place... and even those who do tend to do it one time, during the initial development, and then the subject is never re-visited.  Typically task stacks (in the case of an RTOS) are sized conservatively, and then some kind of margin is added on top (either a fixed amount or a percentage).

My point is that the holy grail would be some way to analyze the worst case at build time, and then have some type of stack size configuration file generated which would be guaranteed to be sufficient / correct.  This file would be used at initialization (when tasks are created) to ensure stack sizes are adequate.

This is unattainable, however, because the dynamic nature of most programs makes this difficult or impossible.  For example, with function pointers, the call flow isn&#039;t known at compile time.  And with C++ and dynamic types (not to mention 3rd party libraries, etc.) the problem expands even further.  Now adjust your compiler options, inline (or un-inline) some routines, get rid of some globals &amp; pass more parameters, and bang! everything has changed again.  Change an iterative algorithm to a recursive one, yep that&#039;s gonna screw things up too...

I guess my point is that this is indeed a complex problem and I haven&#039;t found the proverbial silver bullet.  I just now went over to Nigel&#039;s post &amp; read it - he identified many of the same issues, especially the points about function pointers &amp; also not measuring once &amp; then forgetting about it.

I&#039;ll be interested to see what others have to say.  Although I&#039;m a big believer in doing the required rigorous work each time, what I&#039;d really like to see is some sort of automated process that (mostly) removes the human from the equation (in other words, a system that always ensures by the time the code is loaded on the target, we&#039;re &quot;guaranteed&quot; to not have stack overflow problems).  Not saying it&#039;s attainable, but it&#039;s an interesting thought.  Until then, I think we&#039;ll have to continue to use things like stack checking hooks, MPUs, etc. to detect the problem post-facto &amp; recover.]]></description>
		<content:encoded><![CDATA[<p>Good points about stack usage &amp; allocation.</p>
<p>One thing many engineers overlook &#8211; the problem that as software is refactored, debugged/fixed, enhanced, etc. its RAM usage (stack in particular) changes.  Maybe now we&#8217;re using more stack in certain places, maybe now we&#8217;re using less.  **But no one ever goes back &amp; re-evaluates the stack usage.**</p>
<p>I&#8217;ve worked in (with) a lot of different organizations, and I can say confidently that very few of them do very detailed stack usage analysis in the first place&#8230; and even those who do tend to do it one time, during the initial development, and then the subject is never re-visited.  Typically task stacks (in the case of an RTOS) are sized conservatively, and then some kind of margin is added on top (either a fixed amount or a percentage).</p>
<p>My point is that the holy grail would be some way to analyze the worst case at build time, and then have some type of stack size configuration file generated which would be guaranteed to be sufficient / correct.  This file would be used at initialization (when tasks are created) to ensure stack sizes are adequate.</p>
<p>This is unattainable, however, because the dynamic nature of most programs makes this difficult or impossible.  For example, with function pointers, the call flow isn&#8217;t known at compile time.  And with C++ and dynamic types (not to mention 3rd party libraries, etc.) the problem expands even further.  Now adjust your compiler options, inline (or un-inline) some routines, get rid of some globals &amp; pass more parameters, and bang! everything has changed again.  Change an iterative algorithm to a recursive one, yep that&#8217;s gonna screw things up too&#8230;</p>
<p>I guess my point is that this is indeed a complex problem and I haven&#8217;t found the proverbial silver bullet.  I just now went over to Nigel&#8217;s post &amp; read it &#8211; he identified many of the same issues, especially the points about function pointers &amp; also not measuring once &amp; then forgetting about it.</p>
<p>I&#8217;ll be interested to see what others have to say.  Although I&#8217;m a big believer in doing the required rigorous work each time, what I&#8217;d really like to see is some sort of automated process that (mostly) removes the human from the equation (in other words, a system that always ensures by the time the code is loaded on the target, we&#8217;re &#8220;guaranteed&#8221; to not have stack overflow problems).  Not saying it&#8217;s attainable, but it&#8217;s an interesting thought.  Until then, I think we&#8217;ll have to continue to use things like stack checking hooks, MPUs, etc. to detect the problem post-facto &amp; recover.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on ARM Cortex PendSV problem &amp; solution(?) by Peter Bushell</title>
		<link>http://software-integrity.com/blog/2011/09/27/arm-cortex-pendsv-problem-solution/comment-page-1/#comment-775</link>
		<dc:creator>Peter Bushell</dc:creator>
		<pubDate>Thu, 29 Sep 2011 12:28:41 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=765#comment-775</guid>
		<description><![CDATA[I just edited this post, so it may be worth revisiting it.]]></description>
		<content:encoded><![CDATA[<p>I just edited this post, so it may be worth revisiting it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on WCP: Uncertain Times&#8230; by Peter Bushell</title>
		<link>http://software-integrity.com/blog/2011/09/20/wcp-uncertain-times/comment-page-1/#comment-770</link>
		<dc:creator>Peter Bushell</dc:creator>
		<pubDate>Wed, 21 Sep 2011 14:38:24 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=738#comment-770</guid>
		<description><![CDATA[My Software Implication (3) is actually worse than stated above. Once a hardware timer has been started, the software has eventually to synchronise with it, by waiting for its expiry. As the Software timing is unpredictable, all we can be sure of is that the timer, once started, defines a &lt;u&gt;minimum&lt;/u&gt; time before which the software cannot pass the synchronisation point.]]></description>
		<content:encoded><![CDATA[<p>My Software Implication (3) is actually worse than stated above. Once a hardware timer has been started, the software has eventually to synchronise with it, by waiting for its expiry. As the Software timing is unpredictable, all we can be sure of is that the timer, once started, defines a <u>minimum</u> time before which the software cannot pass the synchronisation point.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on WCP: The Worst Case Principle by Software Integrity Ltd &#187; WCP: Uncertain Times&#8230;</title>
		<link>http://software-integrity.com/blog/2011/09/08/wcp-the-worst-case-principle/comment-page-1/#comment-769</link>
		<dc:creator>Software Integrity Ltd &#187; WCP: Uncertain Times&#8230;</dc:creator>
		<pubDate>Tue, 20 Sep 2011 17:00:16 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=730#comment-769</guid>
		<description><![CDATA[[...] through with these definitions) is simply that. It is the software to which we are applying the WCP and which we are trying to make perfect. It does not include any third-party software, firmware, [...]]]></description>
		<content:encoded><![CDATA[<p>[...] through with these definitions) is simply that. It is the software to which we are applying the WCP and which we are trying to make perfect. It does not include any third-party software, firmware, [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Whatever Happened to the Worst Case? by Software Integrity Ltd &#187; WCP: The Worst Case Principle</title>
		<link>http://software-integrity.com/blog/2011/08/25/whatever-happened-to-the-worst-case/comment-page-1/#comment-766</link>
		<dc:creator>Software Integrity Ltd &#187; WCP: The Worst Case Principle</dc:creator>
		<pubDate>Thu, 08 Sep 2011 17:26:17 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=719#comment-766</guid>
		<description><![CDATA[[...] last article, Whatever Happened to the Worst Case?, was a bit of a rant but it promised further articles on the subject. This is the first of these, [...]]]></description>
		<content:encoded><![CDATA[<p>[...] last article, Whatever Happened to the Worst Case?, was a bit of a rant but it promised further articles on the subject. This is the first of these, [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Whatever Happened to the Worst Case? by Ian Johns</title>
		<link>http://software-integrity.com/blog/2011/08/25/whatever-happened-to-the-worst-case/comment-page-1/#comment-764</link>
		<dc:creator>Ian Johns</dc:creator>
		<pubDate>Wed, 31 Aug 2011 15:34:10 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=719#comment-764</guid>
		<description><![CDATA[I agree with the sentiment that companys&#039; rush-to-market will be the death of engineers and customers.]]></description>
		<content:encoded><![CDATA[<p>I agree with the sentiment that companys&#8217; rush-to-market will be the death of engineers and customers.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Whatever Happened to the Worst Case? by Peter Bushell</title>
		<link>http://software-integrity.com/blog/2011/08/25/whatever-happened-to-the-worst-case/comment-page-1/#comment-763</link>
		<dc:creator>Peter Bushell</dc:creator>
		<pubDate>Wed, 31 Aug 2011 13:05:52 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=719#comment-763</guid>
		<description><![CDATA[Thanks to all!

Dave (and others), you might find this post interesting, though my comment underneath it is more relevant to your point about timescales:

http://embeddedgurus.com/stack-overflow/2011/08/rabbit-patches-and-embedded-systems/]]></description>
		<content:encoded><![CDATA[<p>Thanks to all!</p>
<p>Dave (and others), you might find this post interesting, though my comment underneath it is more relevant to your point about timescales:</p>
<p><a href="http://embeddedgurus.com/stack-overflow/2011/08/rabbit-patches-and-embedded-systems/" rel="nofollow">http://embeddedgurus.com/stack-overflow/2011/08/rabbit-patches-and-embedded-systems/</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Whatever Happened to the Worst Case? by Dave Banham</title>
		<link>http://software-integrity.com/blog/2011/08/25/whatever-happened-to-the-worst-case/comment-page-1/#comment-762</link>
		<dc:creator>Dave Banham</dc:creator>
		<pubDate>Wed, 31 Aug 2011 11:12:15 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=719#comment-762</guid>
		<description><![CDATA[I totally agree!

In my experience, the one thing more than any other that contributes to poor quality is when management insist on development time scales that are too short and thereby result in the job being rushed and botched through. The very fact that we are using software in an embedded system means that the problem is more complex than can easily or cost effectively be solved by hardware alone. Therefore this complexity needs a commensurate amount of engineering time! The only way that I can see to deal with this problem is the practise of software estimation, even though this is just as difficult as Peter&#039;s experience with high reliability hardware design and often just as tedious. However, without it the software engineering team has no stick with which to bat back the big stick of management!]]></description>
		<content:encoded><![CDATA[<p>I totally agree!</p>
<p>In my experience, the one thing more than any other that contributes to poor quality is when management insist on development time scales that are too short and thereby result in the job being rushed and botched through. The very fact that we are using software in an embedded system means that the problem is more complex than can easily or cost effectively be solved by hardware alone. Therefore this complexity needs a commensurate amount of engineering time! The only way that I can see to deal with this problem is the practise of software estimation, even though this is just as difficult as Peter&#8217;s experience with high reliability hardware design and often just as tedious. However, without it the software engineering team has no stick with which to bat back the big stick of management!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Whatever Happened to the Worst Case? by Susan</title>
		<link>http://software-integrity.com/blog/2011/08/25/whatever-happened-to-the-worst-case/comment-page-1/#comment-761</link>
		<dc:creator>Susan</dc:creator>
		<pubDate>Tue, 30 Aug 2011 21:06:22 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=719#comment-761</guid>
		<description><![CDATA[It is so refreshing to read this article and the following comment by Dan. I heartily agree with you both and it is nice to know there are engineers out there like the 2 of you.]]></description>
		<content:encoded><![CDATA[<p>It is so refreshing to read this article and the following comment by Dan. I heartily agree with you both and it is nice to know there are engineers out there like the 2 of you.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Whatever Happened to the Worst Case? by Peter Bushell</title>
		<link>http://software-integrity.com/blog/2011/08/25/whatever-happened-to-the-worst-case/comment-page-1/#comment-757</link>
		<dc:creator>Peter Bushell</dc:creator>
		<pubDate>Fri, 26 Aug 2011 17:03:09 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=719#comment-757</guid>
		<description><![CDATA[Thank you for your comment, Dan. I&#039;m not a great fan of procedures, either, and part of keeping those we do need (and we do need some!) as servants rather than masters is to build in more quality by design, rather than engaging in futile attempts to beat it in later via a test harness!]]></description>
		<content:encoded><![CDATA[<p>Thank you for your comment, Dan. I&#8217;m not a great fan of procedures, either, and part of keeping those we do need (and we do need some!) as servants rather than masters is to build in more quality by design, rather than engaging in futile attempts to beat it in later via a test harness!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Whatever Happened to the Worst Case? by Dan</title>
		<link>http://software-integrity.com/blog/2011/08/25/whatever-happened-to-the-worst-case/comment-page-1/#comment-756</link>
		<dc:creator>Dan</dc:creator>
		<pubDate>Fri, 26 Aug 2011 16:26:44 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=719#comment-756</guid>
		<description><![CDATA[Peter,

Hear, hear!  I wish more of our peers would take software quality seriously.  Over the years, I&#039;ve learned a lot by working with people who design firmwarethat is life-critical - peoples&#039; lives are saved when it works, and people die when it malfunctions.  I try to apply the same principles of every system I work on, even if lives aren&#039;t at stake. 

I&#039;ve found that shops that &quot;test bugs out of the system&quot; tend to have low quality.  By &quot;test bugs out of the system&quot;, I mean using the test phase to find bugs that they pretty much &quot;know&quot; are in there, because of deficiencies in specification / design / implementation phases.  In other words, they enter the test phase *expecting* to find bugs.  If the test phase was treated more like a verification phase, the expected outcome would be different.

In probably 3 or 4 opportunities in my career, I&#039;ve encountered someone who acknowledged a design deficiency, but basically said &quot;unlikely to happen, and too painful to design in prevention.&quot;  2 of the cases I can recall were race conditions.  In one case, the window was approximately 20 nsec, and the engineer said something to the effect &quot;It&#039;s so unlikely to happen, I&#039;m not going to go to the trouble to prevent it.&quot;  I said to him, &quot;If this firmware was in a product that your mother was using, and her life depended on it, would you have that same attitude?&quot;  Naturally, he decided it actually *was* worthwhile...

One other thing - you mentioned your early career as an electronics engineer &amp; the worst case.  About 3 years ago I was brought in to find &amp; fix a very strange problem... customer thought it was firmware, in fact the hardware manager said (literally) &quot;There is absolutely no possibility that this is a hardware problem.&quot;  Turns out it was hardware.  Complicated circuit with many resistors, 10% tolerance parts used on the board, and guess what?  The tolerances lined up in the circuit (almost +10% here, almost -10% there) such that readings &amp; behavior were intermittently erratic.  Original designer assumed a 470K resistor meant a 470K resistor, not possibly a 430K resistor.

Last thing - and I don&#039;t mean to steal your thunder, since you&#039;re going to be writing a series, but in addition to good design &amp; implementation, I think process can have a huge beneficial impact on quality.  I&#039;m not a process fanboy, I&#039;m in the &quot;just enough to make sense&quot; camp, but coding standards, code reviews, static analysis, version control, regression testing, etc. can all have huge impacts on the product&#039;s shipping quality.  Seems silly to even have to mention these activities, they should almost be a foregone conclusion, but sadly I can say that is *definitely* not the case.]]></description>
		<content:encoded><![CDATA[<p>Peter,</p>
<p>Hear, hear!  I wish more of our peers would take software quality seriously.  Over the years, I&#8217;ve learned a lot by working with people who design firmwarethat is life-critical &#8211; peoples&#8217; lives are saved when it works, and people die when it malfunctions.  I try to apply the same principles of every system I work on, even if lives aren&#8217;t at stake. </p>
<p>I&#8217;ve found that shops that &#8220;test bugs out of the system&#8221; tend to have low quality.  By &#8220;test bugs out of the system&#8221;, I mean using the test phase to find bugs that they pretty much &#8220;know&#8221; are in there, because of deficiencies in specification / design / implementation phases.  In other words, they enter the test phase *expecting* to find bugs.  If the test phase was treated more like a verification phase, the expected outcome would be different.</p>
<p>In probably 3 or 4 opportunities in my career, I&#8217;ve encountered someone who acknowledged a design deficiency, but basically said &#8220;unlikely to happen, and too painful to design in prevention.&#8221;  2 of the cases I can recall were race conditions.  In one case, the window was approximately 20 nsec, and the engineer said something to the effect &#8220;It&#8217;s so unlikely to happen, I&#8217;m not going to go to the trouble to prevent it.&#8221;  I said to him, &#8220;If this firmware was in a product that your mother was using, and her life depended on it, would you have that same attitude?&#8221;  Naturally, he decided it actually *was* worthwhile&#8230;</p>
<p>One other thing &#8211; you mentioned your early career as an electronics engineer &amp; the worst case.  About 3 years ago I was brought in to find &amp; fix a very strange problem&#8230; customer thought it was firmware, in fact the hardware manager said (literally) &#8220;There is absolutely no possibility that this is a hardware problem.&#8221;  Turns out it was hardware.  Complicated circuit with many resistors, 10% tolerance parts used on the board, and guess what?  The tolerances lined up in the circuit (almost +10% here, almost -10% there) such that readings &amp; behavior were intermittently erratic.  Original designer assumed a 470K resistor meant a 470K resistor, not possibly a 430K resistor.</p>
<p>Last thing &#8211; and I don&#8217;t mean to steal your thunder, since you&#8217;re going to be writing a series, but in addition to good design &amp; implementation, I think process can have a huge beneficial impact on quality.  I&#8217;m not a process fanboy, I&#8217;m in the &#8220;just enough to make sense&#8221; camp, but coding standards, code reviews, static analysis, version control, regression testing, etc. can all have huge impacts on the product&#8217;s shipping quality.  Seems silly to even have to mention these activities, they should almost be a foregone conclusion, but sadly I can say that is *definitely* not the case.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Documenting Code with Doxygen by Dan</title>
		<link>http://software-integrity.com/blog/2011/06/17/documenting-code-with-doxygen/comment-page-1/#comment-751</link>
		<dc:creator>Dan</dc:creator>
		<pubDate>Fri, 12 Aug 2011 16:20:11 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=703#comment-751</guid>
		<description><![CDATA[Awesome Peter, glad to hear it.  Look forward to additional posts (not just on SKC++) when you have time...]]></description>
		<content:encoded><![CDATA[<p>Awesome Peter, glad to hear it.  Look forward to additional posts (not just on SKC++) when you have time&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Documenting Code with Doxygen by Peter Bushell</title>
		<link>http://software-integrity.com/blog/2011/06/17/documenting-code-with-doxygen/comment-page-1/#comment-750</link>
		<dc:creator>Peter Bushell</dc:creator>
		<pubDate>Fri, 12 Aug 2011 11:22:03 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=703#comment-750</guid>
		<description><![CDATA[Thank you for your words of encouragement, Dan.

I have certainly been neglecting my blog but have resolved to get back to it - though I don&#039;t have so much time for it as I had a year or so ago.

I&#039;ve been reviewing SKC++ and will revive it, with some changes, probably under a different name. I made the prototype; now I&#039;m going for the product!]]></description>
		<content:encoded><![CDATA[<p>Thank you for your words of encouragement, Dan.</p>
<p>I have certainly been neglecting my blog but have resolved to get back to it &#8211; though I don&#8217;t have so much time for it as I had a year or so ago.</p>
<p>I&#8217;ve been reviewing SKC++ and will revive it, with some changes, probably under a different name. I made the prototype; now I&#8217;m going for the product!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Documenting Code with Doxygen by Dan</title>
		<link>http://software-integrity.com/blog/2011/06/17/documenting-code-with-doxygen/comment-page-1/#comment-748</link>
		<dc:creator>Dan</dc:creator>
		<pubDate>Fri, 12 Aug 2011 03:20:51 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=703#comment-748</guid>
		<description><![CDATA[Peter, nice to see a blog post again.

Will you be continuing with the SKC++ series?  I enjoyed that &amp; hope that you have time to resurrect it!]]></description>
		<content:encoded><![CDATA[<p>Peter, nice to see a blog post again.</p>
<p>Will you be continuing with the SKC++ series?  I enjoyed that &amp; hope that you have time to resurrect it!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on The Mysteries of C++ by Peter Bushell</title>
		<link>http://software-integrity.com/blog/2010/03/28/the-mysteries-of-c/comment-page-1/#comment-716</link>
		<dc:creator>Peter Bushell</dc:creator>
		<pubDate>Fri, 20 May 2011 15:13:47 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=607#comment-716</guid>
		<description><![CDATA[&lt;a href=&quot;#comment-714&quot; rel=&quot;nofollow&quot;&gt;@Gsidhu &lt;/a&gt; 
I was trying to allocate a static array to provide the pool space. The array-size calculation involved the size of the user&#039;s object (derived from Pooled). Unfortunately, the viability of such a calculation depends upon the order in which the compiler processes things in constructing the various objects. Some compilers handle it; some don&#039;t. None is required, by the C++ standard, to handle such esoteric stuff!

I got around the problem by allocating the initial pool space dynamically instead of declaring an array. (Static allocation, as originally attempted, would have been better, but I couldn&#039;t figure out a reliable way to automate it.) The pool memory can be taken from the standard heap (if you must); the actual pool is never given back, so there is no fragmentation issue. The preferred method, though, is to use my super-simple allocate-only code for obtaining pools. This is a configuration option and it works completely transparently - the user doesn&#039;t have to manage the initial allocation of pool space, except to ensure that sufficient total space is made available.

If you haven&#039;t already downloaded the code, I suggest that you do so and have a look through it. I expect to be updating it again soon, and will post another message when I have done so.]]></description>
		<content:encoded><![CDATA[<p><a href="#comment-714" rel="nofollow">@Gsidhu </a><br />
I was trying to allocate a static array to provide the pool space. The array-size calculation involved the size of the user&#8217;s object (derived from Pooled). Unfortunately, the viability of such a calculation depends upon the order in which the compiler processes things in constructing the various objects. Some compilers handle it; some don&#8217;t. None is required, by the C++ standard, to handle such esoteric stuff!</p>
<p>I got around the problem by allocating the initial pool space dynamically instead of declaring an array. (Static allocation, as originally attempted, would have been better, but I couldn&#8217;t figure out a reliable way to automate it.) The pool memory can be taken from the standard heap (if you must); the actual pool is never given back, so there is no fragmentation issue. The preferred method, though, is to use my super-simple allocate-only code for obtaining pools. This is a configuration option and it works completely transparently &#8211; the user doesn&#8217;t have to manage the initial allocation of pool space, except to ensure that sufficient total space is made available.</p>
<p>If you haven&#8217;t already downloaded the code, I suggest that you do so and have a look through it. I expect to be updating it again soon, and will post another message when I have done so.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on The Mysteries of C++ by Gsidhu</title>
		<link>http://software-integrity.com/blog/2010/03/28/the-mysteries-of-c/comment-page-1/#comment-714</link>
		<dc:creator>Gsidhu</dc:creator>
		<pubDate>Thu, 19 May 2011 23:25:54 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?p=607#comment-714</guid>
		<description><![CDATA[Hi Peter,
I am interested to know what the work around was, as i noticed something similar in the code written by my one of colleague.
Thanks in advance]]></description>
		<content:encoded><![CDATA[<p>Hi Peter,<br />
I am interested to know what the work around was, as i noticed something similar in the code written by my one of colleague.<br />
Thanks in advance</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Subscribers by Peter Bushell</title>
		<link>http://software-integrity.com/blog/members/comment-page-1/#comment-529</link>
		<dc:creator>Peter Bushell</dc:creator>
		<pubDate>Fri, 19 Nov 2010 08:45:53 +0000</pubDate>
		<guid isPermaLink="false">http://software-integrity.com/blog/?page_id=480#comment-529</guid>
		<description><![CDATA[You are now a subscriber, Prabhu!]]></description>
		<content:encoded><![CDATA[<p>You are now a subscriber, Prabhu!</p>
]]></content:encoded>
	</item>
</channel>
</rss>
