{"id":7022,"date":"2014-08-11T11:08:13","date_gmt":"2014-08-11T10:08:13","guid":{"rendered":"https:\/\/blogs.mentor.com\/colinwalls\/?p=7022"},"modified":"2026-03-26T16:44:00","modified_gmt":"2026-03-26T20:44:00","slug":"embedded-software-articles-from-assembly-language-to-software-ip","status":"publish","type":"post","link":"https:\/\/blogs.sw.siemens.com\/embedded-software\/2014\/08\/11\/embedded-software-articles-from-assembly-language-to-software-ip\/","title":{"rendered":"Embedded software articles \u2013 from assembly language to software IP"},"content":{"rendered":"<p>I have always liked writing. From an early age, I had an ambition to write a book. My first attempt, in my mid-teens, was a science fiction novel. It was not a success. I wrote about 100 pages and I may even still have the typescript. I remember being embarrassed last time I looked at it. One of the best days of my life was back in 1986, when a jiffy bag arrived in the mail containing a book with my name on the cover.<\/p>\n<p>Since then, I have never really stopped writing &#8230;<!--more--><\/p>\n<p>With a few exceptions, just about everything I have written has been about electronics and\/or software. Until the last few years, much of my output has been in print &#8211; lots of collateral materials, countless magazine articles and another book. Nowadays, the vast majority of what I do is online. This blog is a prime example. I post frequently on a wide range of topics, but, to some extent, I feel rather constrained &#8211; both by time and space. It takes time to write a few thousand words and a blog post is necessarily quite brief. So, I welcome opportunities to get into more detail and explore a topic in more depth.<\/p>\n<p>I publish articles &#8211; many of which pick up on themes of blog posts &#8211; in a number of places. I have a &#8220;column&#8221; on <a href=\"http:\/\/www.embedded.com\" target=\"_blank\" rel=\"noopener noreferrer\">embedded.com<\/a> &#8211; that means that they publish my pieces on a fairly regular basis. I realized that I do not do a very good job of publicizing those articles, so I figured that it might be useful to provide a guide to some of my recent work on that site:<\/p>\n<h3><a href=\"http:\/\/www.embedded.com\/design\/programming-languages-and-tools\/4402539\/Binary--anyone-\" target=\"_blank\" rel=\"noopener noreferrer\">Binary Anyone?<\/a><\/h3>\n<p>Embedded software developers quite commonly need to think about individual bits. This is most commonly the case when working with CPU or peripheral device control registers. High level languages, like C, do not accommodate developers&#8217; needs very well in this respect. This article outlines an approach whereby developers can code low level routines using binary in a natural, intuitive way.<\/p>\n<h3><a href=\"http:\/\/www.embedded.com\/design\/programming-languages-and-tools\/4402690\/Is-assembly-language-best-\" target=\"_blank\" rel=\"noopener noreferrer\">Is Assembly Language Best?<\/a><\/h3>\n<p>It is generally believed that hand-written assembly language code, though time consuming and requiring significant skill, will always yield the best result. This article questions that belief and illustrates common coding situations where using a high level language, like C, with a modern compiler can consistently do better. It is partly a matter of understanding compiler optimization and code generation and partly a question of appreciating human nature.<\/p>\n<div>\n<div><\/div>\n<\/p>\n<div><a href=\"http:\/\/www.gettyimages.com\/detail\/497011737\" target=\"_blank\" style=\"color:#a7a7a7;text-decoration:none;font-weight:normal !important;border:none\" rel=\"noopener noreferrer\">#497011737<\/a> \/ <a href=\"http:\/\/www.gettyimages.com\" target=\"_blank\" style=\"color:#a7a7a7;text-decoration:none;font-weight:normal !important;border:none\" rel=\"noopener noreferrer\">gettyimages.com<\/a><\/div>\n<\/div>\n<p><\/p>\n<h3><a href=\"http:\/\/www.embedded.com\/design\/connectivity\/4403933\/USB-3-0--What-embedded-software-developers-need-to-know\" target=\"_blank\" rel=\"noopener noreferrer\">USB 3 &#8211; An Introduction for Embedded Software Developers<\/a><\/h3>\n<p>USB is widely deployed in embedded devices of all kinds, resulting in simple interconnectivity and interoperability. This simplicity comes at a cost: the internal functions of USB are quite complex. This is of no consequence to the user of a USB-enabled device, but the embedded software developer does need some understanding of USB internals. Even if a commercial USB stack is employed, an appreciation of how it works enables it to be used optimally.<br \/>\nIn this article, the history and internal operation of USB will be reprised. Then, the changes and enhancements that come along with USB 3 are reviewed.<\/p>\n<h3><a href=\"http:\/\/www.embedded.com\/design\/debug-and-optimization\/4405964\/The-Millennium-Bug-Revisited\" target=\"_blank\" rel=\"noopener noreferrer\">The Millennium Bug Revisited<\/a><\/h3>\n<p>A decade and a half ago, the software industry in general, and the embedded software industry in particular, was in a state of near panic. The concern was that much software, that controlled critical systems, may have been designed some years previously and not be able to cope with the date roll-over from 1999 to 2000 &#8211; the &#8220;millennium bug&#8221;. This problem is now just a distant memory, if recalled at all. This article looks at the significance of that problem and whether similar problems may arise before 2099.<\/p>\n<h3><a href=\"http:\/\/www.embedded.com\/design\/programming-languages-and-tools\/4406895\/Using-software-IP--best-practices-for-embedded-systems-design\" target=\"_blank\" rel=\"noopener noreferrer\">Using Software IP<\/a><\/h3>\n<p>When developing embedded software, a key decision, that needs to be addressed, is &#8220;Make or buy?&#8221; It is common practice to utilize proven software IP, such as real time operating systems, in modern designs and the scope for licensing software components is expanding as time to market pressures make their use more attractive. The main concern of developers is the usability and quality of such IP. This article looks at the precautions that may be taken, the best practices for selecting IP, the role of standard validation suites and where open source fits in.<\/p>\n<p>In future posts I will highlight more of these articles until I get fully up to date. Then I will post a &#8220;heads up&#8221; message in a more timely fashion. I am always interested in ideas for topics for articles [and blog posts]. If you have a suggestion, please comment or <a href=\"mailto:colin_walls@mentor.com\">email<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I have always liked writing. From an early age, I had an ambition to write a book. My first attempt,&#8230;<\/p>\n","protected":false},"author":71677,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spanish_translation":"","french_translation":"","german_translation":"","italian_translation":"","polish_translation":"","japanese_translation":"","chinese_translation":"","footnotes":""},"categories":[1],"tags":[312,300,326],"industry":[],"product":[],"coauthors":[],"class_list":["post-7022","post","type-post","status-publish","format-standard","hentry","category-news","tag-assembly","tag-embedded-software","tag-usb"],"_links":{"self":[{"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/posts\/7022","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/users\/71677"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/comments?post=7022"}],"version-history":[{"count":1,"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/posts\/7022\/revisions"}],"predecessor-version":[{"id":10294,"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/posts\/7022\/revisions\/10294"}],"wp:attachment":[{"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/media?parent=7022"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/categories?post=7022"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/tags?post=7022"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/industry?post=7022"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/product?post=7022"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/coauthors?post=7022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}