Ecco il resoconto della splendida giornata trascorsa in quel di Napoli a parlare di sistemi embedded:
Un grazie a Paolo, Michele, Antonio e a tutti i ragazzi di .NET Campania che hanno saputo organizzare perfettamente l’evento e far ricordare a un “nordico” come il sottoscritto che al Sud l’ospite è sempre trattato come un re.
This is a good question when it comes from people with no experience on embedded devices and a very bad one when you hear it coming from people that work on embedded devices.
“I’m using a PC inside my embedded device, so I can use Windows as I use it on my PC” this is usually a statement made by people who actually design bad embedded devices. And those devices are not bad because they use a PC-based hardware (using a PC may be a good solution for some kind of devices where developing a custom board is too expensive and does not provide any real advantage in terms of cost), not because they use Windows.
It’s because they use a Windows version designed for PCs, and so they behave like a PC and not like an embedded device!
A PC has always a user taking care of it (or calling for help when something goes wrong beyond his recovery capabilities!), an embedded device must run unattended. Users don’t want or even can’t interact with it. It must be able to solve its own issues and, at least, report errors by itself.
Usually airport are a good place to spot some PCs “hidden” inside embedded devices. And those PCs sometimes show their nature giving unnecessary information or asking for help to people that just want to receive some information from them (or that are the target for advertising campaigns running on those devices).
Let’s see some samples.
1. Malpensa Airport (Milano, Italy)
Installing updates is a good idea if your device is connected to a network, maybe doing that overnight is smart, so no-one will see the device restarting. But telling to everyone that your “embedded” PC installed its updates overnight doesn’t look like such a smart idea…
The message is in Italian, but I guess that any Windows 7 user can recognize it. “New updates have been installed”. This message will stay on top of the content (information about the security controls) until someone finds a mouse and a way to connect it to a terminal that is suspended 2.5 meters from the ground.
Sorry for the bad quality of the images but the mix of phone camera and horribly early morning hour impacted my photographic capabilities quite hard
2. Paderborn Airport (Paderborn, Germany)
Here we have a nicely designed information totem that is supposed to show interesting contents or, maybe, just advertising.
Instead is showing a wizard from a set-up application (or something like that, my knowledge of German is close to zero…) that I suspect is not very interesting for most of the people passing in front of it and that can’t interact with the device because no mouse or keyboard is available.
You can also notice that the display is mounted in portrait mode but is configured in landscape. I don’t envy the developer that had to debug his application keeping is head turned 90° to the right to read the output
3. Cadorna railway Station – Milan – Italy
Many thanks to Giorgio and Frangino for this great sample.
Do you recognize those icons? It’s a Windows 98 desktop! Running on a monochrome display with very low resolution.
This picture has been taken a few days ago, not in year 2K!
The good news is that this Windows 9X powered PC is still up and running. At least 15 years after its OS release and 7 years after the end of MS support for Windows 98/ME. But let’s see the bad news…
The application has crashed and the display is no longer showing useful information.
Just letting some people know that Windows 9X is still alive and kicking. 13 years after the release of Windows ME! (but Windows ME “my computer” icon was different, so we are looking at Windows 98 or even at Windows 95 here).
How could this device be restored?
Powering on and off the device isn’t a very good way to restore its operations. Do you remember what could happen to a FAT filesystem after an unexpected power outage? Someone will have to shut it down. It may be possible to do this remotely, but the service was interrupted for some time.
Consider also that this is a display that is used to show train timetables, so information must be updated in real time and I suppose that this device is connected to some form of corporate network. It hope it’s a dedicated network because putting a Windows 9X machine with an OS that is no longer patched and supported on an open corporate network is like hiring a wolf to take care of your sheep!
Embedded devices don’t need to follow technology trends and move to the last OS release a few week after it’s available. Devices must be stable and reliable and any change must be tested carefully. But, on the other side, using a 15yrs old unsupported desktop OS to power a connected embedded device may be a bit too conservative.
4. Pisa Airport – Italy
My friend Marco Dal Pino sent me this image via Twitter, another airport, another useless display. The text is too small to read it, but it seems an error due to a broken or no longer bootable hard drive. In this case the OS can’t do nothing to fix the issue, but hopefully a monitoring system should be in place, detecting that a device is no longer operating.
5. Trash can
This came from a tweet by Kharim Yaghmour and it’s one of the funniest samples I’ve ever seen. The device is still operating, you can put trash inside it… but the system (Linux in this case) has crashed. Maybe emptying the trash will free some disk space and allow it to run? The text is not readable, it seems to be a kernel panic at startup. This may be due to an hardware failure, but showing this on the screen doesn’t help. Maybe showing a company logo during boot may have made it less noticeable.
6. Train – Naples – Italy
Thank to my friend Paolo Patierno (see his blogs here and here) sent me this picture taken on the subway in Naples.
It’s the well known “Unable to connect” error message from Firefox (can’t see what OS, but it doesn’t matter).
Using a web browser to show advertising or other information in this context may be a good idea, you already have good browsers for many operating systems, you can realize good animations and graphics in HTML5+JS, and you can have a browser reloading the information from the server without the need of building an infrastructure to distribute that content.
You can even change the contents on the server on the fly, and all the terminals will be updated immediately.
This solution worked great. On the developer’s desk.
In the field (and more likely if you are running on a train moving underground…) you can lose network connectivity. Even if the serve is on the train. And, again, there is no way to see this device recovering automatically when the connection is restored.
Browsers can be embedded inside applications on many different operating systems, allowing the “host” application to check network connectivity, show an error message when it’s not available, try to use a backup connection etc.
You may even handle this kind of failures inside your HTML/JS code.
Those samples proof that showing this kind of error messages to end-user will make device unusable, lead to a waste of resource and even a waste of money (if someone was expecting to have their advertising shown on those nice big screens…).
And those issues are deadly easy to fix. Use the right version of Windows! With Windows Embedded Standard you can easily remove any notification message, message box and other OS output that is not related to the main task performed by your device. It’s easy to do that or to find someone that can configure the OS for you and avoid this kind of issues that could lead to unsatisfied customers (those that pay for the advertising) or to inconveniences to passengers that will not find the information they expect from those monitors or find it partly covered by error message that they already hate on their PCs.
During the next months I’ll try to document other “supposedly-embedded” devices behaving like PCs just because someone thought that learning how to use the right version of the OS (we are not talking about a completely different OS here!) was not worth the effort.
Il 26 Gennaio a Napoli si svolgerà la prima conferenza italiana completamente dedicata alle tematiche Embedded.
Gli organizzatori di .NET Campania e in particolare il mitico Paolo Patierno stanno facendo un lavoro eccellente e hanno messo in cantiere una giornata interessantissima. Potete consultare l’agenda e iscrivervi sul sito: http://www.microsoftembeddedconference.it/
Come potete vedere dal programma, anche il sottoscritto terrà una sessione. Appuntamento a Napoli quindi!
Using Windows Embedded Standard 7 you can quickly build an Operating System configuration that support your hardware and include only the components required to run your application.
Being able to customize the set of packages that are included in your image has multiple advantages:
- reduced footprint (you’ll save storage and memory giving more resources to your application)
- improved security (some services may have bugs that allows remote exploits and can become a security issue, removing them if they are not needed on your device will improve security)
- improved reliability (less code, less bugs ).
In Windows Embedded Standard 7 you can generate a set-up DVD or thumbdrive that can be used to install the operating system and your application on a target machine. Doing a full setup on each device could be a suitable solution, but it has some drawbacks. Setup may take a long time and may require some user interaction, some components may need to be installed or configured after the main OS setup etc. For those scenarios cloning is a more suitable alternative.
But you can’t clone a WES7 hard-drive and just use it to boot another machine. Every device has some local-ids that need to be unique and may prevent your cloned machines to operate when they are connected to a network. You need to remove those IDs from your machine before you clone its OS image. At the first boot the system will re-configure itself and generate new IDs.
To perform the “ID-cleanup” operation you can use the sysprep tool that is installed on every WES7 device inside the Windows\System32\Sysprep folder.
sysprep /generalize /oobe /shutdown
This command will remove machine-specific IDs and prepare your system for cloning. It will also shutdown the device, preventing any further configuration operation that may change its “clean” state.
If you restart the device you’ll discover that the system will ask for some of the same information (computer name, user account, time zone etc.) that you may have already configured using the Image Configuration Editor. This may be an issue if you want that all your devices have the same settings.
To prevent this you can take the answer file you used to create the Windows Embedded Standard 7 image currently running and open it inside a text editor. It’s an XML text file that you can edit.
You’ll have to remove the <servicing> node and all the settings nodes that are not involved in the syspref phase (leaving only <settings pass="oobeSystem"> and <settings pass="Specialize">). Then you can use this reduced version of your answer file to automate the post-sysprep phase.
sysprep /generalize /oobe /shutdown /unattend:<path to your XML file>
you’ll have a clonable image that will re-configure the device at first startup automatically, with no need of user interaction.
On of the most interesting new features of Windows Embedded Compact 7 is support for the ARMv5, ARMv6 and ARMv7 instruction sets instead of the ARMv4 “generic” support provided by the previous releases. This means that code build for Windows Embedded Compact 7 can leverage features (like the FPU unit for ARMv6 and v7) and instructions of the recent ARM cores and improve their performances. Those improvements are noticeable in graphics, floating point calculation and data processing. The ARMv7 instruction set is supported by the latest Cortex-A8, A9 and A15 processor families. Those processor are currently used in tablets, smartphones, in-car navigation systems and provide a great amount of processing power and a low amount of electric power making them very interesting for portable device but also for any kind of device that requires a rich user interface, processing power, connectivity and has to keep its power consumption low.
The bad news is that the compiler provided with Visual Studio 2008 does not provide support for ARMv7, building native applications using just the ARMv4 instruction set.
Porting a Visual Studio “Smart Device” native C/C++ project to Platform Builder is not easy and you’ll lack many of the features that the VS2008 application development environment provides. You’ll also need access to the BSP and OSDesign configuration for your device to be able to build and debug your application inside Platform Builder and this may prevent independent software vendors from using the new compiler to improve their applications performances.
Adeneo Embedded now provides a whitepaper and a Visual Studio plug-in that allows usage of the new ARMv7 enabled compiler to build applications inside Visual Studio 2008. I worked on the whitepaper and the tools, with the help of my colleagues and now the results can be downloaded from Adeneo Embedded’s website:
(Click on the “WEC7 ARMv7 Whitepaper tab to access the download links, free registration required)
A very basic benchmark showed a very good performance improvement in integer and floating-point operations. Obviously your mileage may vary and we can’t promise the same amount of improvement on any application, but with a small effort on your side (even smaller if you use the plug-in) you can try on your own application.
ARMv7 support is provided using Platform Builder’s compiler and VS2008 application debugger is not able to debut ARMv7 code, so you may need to put in place some workaround like keeping ARMv4 code for debugging etc.
Il 24 e 25 Settembre 2012 a Firenze si svolgerà la conferenza “Better Embedded 2012”.
Lo scopo della conferenza è quello di parlare di sistemi embedded a 360°, abbracciando sia lo sviluppo firmware, che i sistemi operativi e i toolkit dedicati alla realizzazione di sistemi dedicati.
E’ un’ottima occasione per confrontarsi e, in soli due giorni, avere una panoramica ampia dall’hardware a Linux, da Android a Windows CE, dal .NET microframework a QT, senza troppi messaggi commerciali e con un’ottima apertura sia alle tecnologie commerciali che a quelle free e open source.
Io parteciperò come speaker, parlando di Windows CE, ma anche come spettatore interessato a molte delle track di un programma che si va popolando e diventa mano a mano più interessante.
Se volete cogliere l’occasione per visitare Firenze (che già sarebbe un motivo più che sufficiente!) e parlare di embedded, contattatemi perchè come speaker posso fornire un codice sconto che vi farà risparmiare un 20% sul prezzo della conferenza (che già è vantaggiosissimo, vista la quantità di contenuti dedicati all’embedded).
Arrivederci a Firenze!
Advice: read the title carefully, I’m talking about “feelings” and not about advanced technical points proved in a scientific and objective way I still haven’t had a chance to play with a MS Surface tablet (I would love to, of course) and so my ideas just came from reading different articles on the net and MS official statements.
Remember also that the MVP motto begins with “Independent” (“Independent Experts. Real World Answers.”) and this is just my humble opinion about a product and a technology. I know that, being an MS MVP you can be called an “MS-fanboy”, I don’t care, I hope that people can appreciate my opinion, even if it doesn’t match theirs.
The “Surface” brand can be confusing for techies that knew the “original” surface concept but I think that will be a fresh new brand name for most of the people out there. But marketing department are here to confuse people… so I can understand this “recycle” of an existing name.
So Microsoft is entering the hardware arena… for me this is good news.
Microsoft developed some nice hardware in the past: the xbox, zune (even if the commercial success was quite limited) and, last but not least, the two arc mices (old and new model) that I use and appreciate.
In the past Microsoft worked with OEMs and that model lead to good and bad things. Good thing (for microsoft, at least) is market domination by windows-based PCs that only in the last years has been reduced by the return of the Mac and tablets. Google is also moving in the hardware business with its acquisition of Motorola, and Apple leveraged his control of both the hardware and software sides to develop innovative products. Microsoft can scare OEMs and make them fly away from windows (but where?) or just lead the pack, showing how devices should be designed to compete in the market and bring back some of the innovation that disappeared from recent PC products (look at the shelves of your favorite electronics store and try to distinguish a laptop between the huge mass of anonymous PCs on displays… only Macs shine out there…).
Having to compete with MS “official” hardware will force OEMs to develop better product and bring back some real competition in a market that was ruled only by prices (the lower the better even when that means low quality) and no innovative features at all (when it was the last time that a new PC surprised you?).
Moving into a new market is a big and risky move, but with Windows 8 Microsoft is playing a crucial move for its future, trying to be back in the innovation run against apple and google. MS can’t afford to fail this time.
I saw the new devices (the WinRT and Pro) and the specifications are scarce, misleading and confusing. The first impression is that the device looks like an iPad with a nice keyboard cover…
Using “HD” and “full HD” to define display resolution instead of using the real figures and reviving the “ClearType” brand (now dead on Win8 as reported here and missed by people who hate to read text on displays, like myself) without providing clear figures (couldn’t you count those damned pixels?) seems to imply that MS was caught by surprise by apple recent “retina” displays that brought very high definition screens on tablets.Also there are no specifications about the processors used (even if some sources report NVidia Tegra for the ARM tablet and i5 for the x86 one) and expected battery life (a critical point for tablets and the point that killed Windows7 x86 based tablets). Also nothing about the price, and this will be another critical point because other platform out there already provide lots of applications and have a good user base, if MS want to enter this market tablets pricing must be competitive.
There are some expansion ports (SD and USB), so no fixed storage model (even if the specs talks about 32-64GB for RT and 128-256GB for pro). I like this and don’t like the apple model where flash memory (that it’s dirt cheap used in thumdrives or SD cards) is as expensive as gold (or cocaine to have a more accurate per gram measurement) when mounted inside a tablet/phone. For big files you’ll be able to use external media and an SD card could be used to store files that don’t require super-fast SSD-like access times, I hope.
To be honest I really don’t like the marketplace model and the limitation of Windows RT APIs (no local database? from a company that based a good share of its success on VB6+Access!) and lack of desktop support on the ARM (even if the support is here and has been used to port office). It’s a step toward the consumer market (where competitors are making big money), but may impact enterprise (and embedded) users that may not appreciate Windows 8 new UI or the limitations of the new app model (if you aren’t connected you are dead ). Not having compatibility with the desktop will require brand new applications and honestly made all the CPU cycles spent to convert .NET IL into real machine code in the past like a huge waste of time… as soon as a new processor architecture is supported by Windows you still have to rewrite part of your application (and MS is pushing HTML5+JS and native code more than .NET in my perception).
On the other side I believe that the development experience provided by Visual Studio is still miles (or kilometres) ahead of the competition and even the all-uppercase menu of VS2012 hasn’t changed this situation.
The new metro UI got mixed reviews. On my side I should say that is very pleasant to use on a touch screen, I like the minimalist design (even if sometimes is too minimal and hides stuff that, in my opinion, should be visible) but I should also say that using it with mouse and keyboard is like trying to pick your nose with boxing gloves…
Metro is also very interesting for embedded devices where touch screen usage is quite common and where having an application taking all the screen is the norm. For devices like kiosks, vending machines etc. this kind of UI can be a great selling point.
I don’t need a new tablet (to be honest I’m pretty happy with my wife’s iPad and with my PC), but I may change my opinion after having a chance to play a little bit with those new devices and understand what’s hidden under all this mysterious and generic announcements and specifications!
If you are an application developer and you’re tempted by “the dark side” (Embedded devices), don’t miss this series of webcasts organized by Arrow and Adeneo Embedded:
In a series of four webcasts I’ll try to explain why using an embedded OS (Windows Embedded Standard 7) can be a good way to improve the reliability of your system and reduce maintenance costs and issues.
If you currently develop applications that run on dedicated (or almost dedicated) PCs you are already developing embedded devices! But not using the right OS may generate configuration issues, security problems, maintenance nightmares. Windows Embedded Standard 7 allows you to leverage Windows 7 features you need and leave out the rest, making your system more secure, standardized and less resource hungry.
Yesterday I received my copy of “Pro Windows Embedded Compact 7” by Avi Kcholi.
It’s a great book for people that have some experience and knowledge Windows Embedded Compact 7 and want to learn the “black magic” behind device driver development on this operating system.
The book guides the reader trough different aspects of drivers (and BSP) development, starting from the foundation and reaching some advanced topics that are not covered in the on-line reference.
Here’s a list of the different chapters to give you an idea of the book contents:
Chapter 1: The Foundation of Device Driver Development for Windows Embedded Compact
Chapter 2: The Tools of The Trade
Chapter 3: Design your Device Driver First!
Chapter 4: Mastering the Hardware Environment
Chapter 5: Device Driver Registry Settings
Chapter 6: Understanding Device Driver Types
Chapter 7: The Essence of Stream Device Drivers
Chapter 8: Device Driver I/O and Interrupts
Chapter 9: Device I/O Control Handling
Chapter 10: Network Driver Interface Specification and Network Device Drivers
Chapter 11: Debugging Device Drivers
Chapter 12: Using CTK to Develop Test Code
It’s more than 250 pages of rich technical contents that will help people that want to approach the “dark side” of development, working in close contact to the hardware
I had the honor of reviewing it as Technical Reviewer and I hope that readers will appreciate the amount of technical knowledge provided by this book.
Per tutti gli appassionati di sistemi embedded e per chi voglia approcciare il mondo embedded nel modo più semplice e divertente è ora disponibile un'ottima risorsa in italiano: tinyclr.it.
Qui potrete scoprire come è facile controllare device semplici e complessi usando .NET e gli stessi linguaggi che si utilizzano per la programmazione di sistemi PC o webserver.