ImageCraft InfoBytes Blog

News, Notices and stuff we're talking about.

Smart.IO Status

The draft version of the GUI User Guide can be downloaded from here (PDF file). Status:


  • The Smart.IO chip module has been redesigned using the latest ST BlueNRG1 BLE chipset for high performance and low cost.
  • The Smart.IO chip module should go into manufacturing by end of March / beginning of April with a production time of 4-6 weeks.
  • We expect to have the Smart.IO programmable app for iOS available at the same time the Smart.IO chip modules are ready for delivery.
  • The Android version of the programmable app is in development as well. It's approximately 6 weeks behind the iOS version in schedule.


This is a mock-up of a sample UI for a "Smart Wall Plug" - see the GUI User Guide for details. With Smart.IO, it takes just a dozen+ lines of code to create this UI, with no wireless or app coding.


Continue reading
179 Hits

Smart.IO is now Patent Pending

More detail and user documentation coming soon!

Continue reading
128 Hits

Smart.IO funding success on KickStarter!

Smart.IO was funded successfully on KickStarter (project link here). We will add more information to this page shortly. A few quick notes:

  • We will be setting up a forum at for Smart.IO users.
  • As we reached our stretch goal for the KickStarter, we will start work on the Android version of the programmable app soon.
  • Pre-production purchases will be available shortly.

Thank you for your support!

Continue reading
178 Hits

Smart.IO Demo Project coming soon.

KickStarter link here.

To make it easier to get started with Smart.IO, we will be releasing the complete design to make a smart wall plug. Remember this "old-school" programmable timer?

old style programmable wall plug
old style programmable wall plug

With Smart.IO, the wall plug would be physically much smaller and the programmability is only limited by your imagination. 

For the demo project, we will show you how to write firmware and the UI to use it as a vacation timer or as a timer with daily schedules. The firmware source code and the PCB design will be made freely available. We will even stock some of the parts (such as the plastic housing) to make it easy for you to get started.

Join the Smart.IO revolution today!

Continue reading
153 Hits

Smart.IO KickStarter is LIVE!!

Sorry for the earlier post - the blog software was messing up the formatting, so I deleted it, forgetting that the software sends out notifications to some people already.

The Smart.IO project is now live on KickStarter. Please check out the write up and watch the video. I hope you will join and become one of the backers. Thank you.

Continue reading
263 Hits

Smart.IO.. coming soon

All embedded product designers want to provide a great user interface for their products. In 2016, the obvious state-of-the-art solution is to write an app to more easily use Widget X. The only problem is that it takes quite a bit of time and $$$ to incorporate the wireless technology needed, and of course even more time for writing the app.

Until Now! - or until Real Soon, that is! Only $16, a few lines of API calls, NO wireless programming, NO app writing... details coming soon on KickStarter!!... Stay Tuned!!


Continue reading
326 Hits

Coming Soon... Smart.IO

A teaser pic:

The IO Solution For Smart Products


Coming Real Soon Now....


Continue reading
318 Hits


A screenshot of the prototype, details forthcoming...

Continue reading
328 Hits

Spiffy New Animation On Our Homepage

Check out our home page if you have not done so in the past couple days. The "Hero Slides" concept is good but I thought we can do better. Our superhuman web designer met the challenge and did exactly what I envision. It describes our focus perfectly.


Continue reading
315 Hits

ST BlueNRG support and ImageCraft BLE Products

So many product ideas, so little time ;-) We now have ST's BlueNRG working using JumpStart C for Cortex-M:


We will have the modified source uploaded to Github later. If you are interested in a beta release of the ST's stack, feel free to email me.

This is just the beginning though. Having support for the BlueNRG is nice, but we are working on some great integrated products that will enhance your embedded systems. Stay tuned.

Continue reading
532 Hits

Advantages of a Message-Passing OS

ImageCraft's upcoming RTOS (Real Time Operating System) product is based on a message-passing kernel. The working code name for the product is eMOS, short for Embedded Message-Passing OS, the eventual product name may differ. In this post, we will examine some of the advantages of using a message-passing kernel (we will explain WHY we are writing our own RTOS - and describe its architecture - in a later post.)  

While most traditional RTOS and desktop/server OSes are "monolithic" in design (i.e. the kernel includes a large number of kernel functions), a message-passing kernel includes only a small set of functions, as most functions of a monolithic kernel may instead be written to run in non-kernel space as normal tasks.  While not as widely used as monolithic kernels, there are significant design, peformance, and robustness advantages to a message-passing kernel. As an example, QNX, the kernel behind BlackBerry smartphone's BB OS, is one of the most well known message-passing kernels.

Let's look at how message passing can replace the requirement for certain functions in kernel space; for example: memory allocation using something similar to C's malloc and free library calls. In a monolithic kernel, if the low level memory management routines are outside of the kernel space, then certain code regions must be protected so that the internal data structures will not be corrupted by multiple tasks modifying the same data due to task switching.

Hence, monolithic kernels usually include low-level memory management routines as kernel functions. By running them in kernel space, the kernel provides automatic protection for the memory management data structure. However, this increases the size of the kernel, and limits the ability to replace memory management routines with others best suited for a given situation. For example, one may wish to use best-fit or first-fit or other algorithms to manage memory allocation. Having these fixed in the kernel code delivered by the RTOS vendor limits replacibility.

A message-passing kernel provides a better alternative. By using message-passing mechanisms, memory management routines run as normal tasks:

// message buffer
typedef struct {
    unsigned cmd;
    unsigned args[4];

void MemManager(void)
    SYSCALL op;
    int pid;

    while (1)
        if (eMOS_MsgReceive(&pid, &op, sizeof (op), 0) >= 0)
            if (op.cmd == 0)
                void *rp = ...; // code to allocate memory

     eMOS_ResourceTrackingAdd(pid, rp);
                eMOS_MsgReply(pid, &rp, sizeof (rp));
            else if (op.cmd == 1)
                ...(void *)op.args[0]... // code to deallocate memory
     eMOS_ResourceTrackingRemove(pid, op.args[0]);
                eMOS_MsgReply(pid, 0, 0);
            ... // other requests such as realloc

void *malloc(unsigned size)
    void *rval;
    op.cmd = 0;
    op.args[0] = size;
    if (eMOS_MsgSend(mem_manager_pid, &op, sizeof (unsigned) * 2, &rval, sizeof (void *)) >= 0)
        return rval;
    return 0;

void free(void *vp)
    unsigned rval;

    op.cmd = 1;
    op.args[0] = (unsigned)vp;
    eMOS_MsgSend(mem_manager_pid, &op, sizeof (unsigned) * 2, &rval, sizeof (unsigned ));

In eMOS, a message is an arbitrary-length buffer. The sender uses eMOS_MsgSend to send a message, and the receiver uses eMOS_MsgReceive to receive a message. A task sending a message using eMOS_MsgSend waits until the receiver both receives the message and sends a reply using eMOS_MsgReply. The message passing calls are synchronous, and the calls do not return until the the functions are done. Internally, the kernel schedules tasks as needed, and tasks waiting for message processing are blocked and will not use up CPU time.

In the above example, MemManager is a normal eMOS task acting as a memory management server. It loops forever while waiting for messages to come in. Each message is a memory management request. The command code 0 is used to denote an allocation request, and 1 is for deallocation (the codes can be anything, as long as the sender and receiver agree on their meanings).
malloc and free send messages to MemManager to perform the actual memory allocation. If all memory requests go to this task, the internal data structures are automatically protected, because the server only processes one request at a time, and additional requests through eMOS_MsgSend are queued up by the kernel until the server task is able to process those requests.

Moreover, since it is not part of the kernel, MemManager can be replaced with other memory allocation algorithms, even if the source code for the kernel is not provided. This allows tailoring the most useful memory allocation scheme to a given scenario.

Using message passing has some overhead, but the tradeoffs are more robustness and better scalability. As more and more embedded systems are used in mission-critical situations, safety concerns must be high in the design goals of a system. For example, two potential nasty source of errors in an RTOS are race conditions and priority inversion (for example: priority inversion caused the Mars Pathfinder Rover to crash repeatedly, until an software patch was sent from Earth) and their chances of occurring are greatly reduced in a message-passing OS. (We will look at these issues, and more, in a future post.)

Continue reading
574 Hits

New io2go Module Prototype Board

wifi2go is just the first of the many Internet of Things module that we have planned. This is the prototype of one of the next products. The MCU will be the STM32F746 216Mhz M7 MCU with DRAM, QuadSPI connected external flash etc.

*crack whips and start working*...

Continue reading
464 Hits Reviews Our Book "C 4 Everyone"

Check it out!

Continue reading
615 Hits

Customer Review of JumpStart Tools

Unedited from a new customer Wesley R:


I used arduino for quite a few years tinkering and building projects. Recently, I decided to take an idea out of the world of arduino and into the world of true embedded systems. I started my search for a simple way to create an embedded system that i could put into a commercial product. I found the answer and then some by using Jumpstart microbox from Imagecraft. I found Imagecraft originally by searching for a compiler to use with avr MCUs but after a month and a half of reading and looking at code. I was no closer to my goal of creating a commercial MCU. Then Richard at Imagecraft suggested i try their Jumpstart Microbox with the Jumpstart API.

After looking at a few examples, I knew this was going to be a much easier and faster way for me to get my code onto a micro controller. I ordered a Jumpstart Microbox kit, and it was at my door a few days later. The compiler I used was Imagecrafts Jumpstart C for Cortex M series micro controllers. I have very little experience with other Cortex-M C compilers, but I had their example programs running within 30 minutes. A 32 bit 84 MHz micro controller was under my control (a mechanical engineer with little c programming experience). The example code and documentation from Imagecraft was very easy to follow and understand.

I was able to use a 32 bit micro controller just like i would an arduino. I couldn't be more impressed with this product. If you are interested in making a commercial product or learning more about micro controllers, and you want or need to use a powerful micro controller. Jumpstart microbox is the answer period.  The last thing and probably the best thing about this product is the customer service. The guys at Imagecraft would answer any question i had within minutes no kidding. They even answered questions i didn't know i would need to ask. Excellent job Imagecraft.

Continue reading
482 Hits

216 MHz MCU

Well, how times have changed. I remember Digital Equipment Corp. had a major celebration when we released the DEC Alpha "EV4" running at 200MHz. This sounds kind of slow when PC processors are now running at a few GIGA-Hertz, but at that time, the competitors' CPUs were chugging along at ... 60MHz or so. The DEC teams used all the tricks they had to achieve that. The price of that processor were in the multi-thousands.

And now we have the STM32F746 MCU, with so many GPIOs, Timers, and plethora of peripherals, all for about $10:


p.s. this is from porting the JumpStart API to the F7xx series. The demo is done with just a few lines of JumpStart API code, vs. pages of code using ST's HAL library.


Continue reading
469 Hits

Another Promotional for wifi2go

New promotional coming in June...

Continue reading
468 Hits

Looks What Came In The Mail!

Here's the galley proof of the "C 4 Everyone" book, printed version. It weighs in at 390+ pages and of course will have a cover. We should have it for sale very soon. The ebook version will be replaced by the PDF version generated from this revision, and any current ebook owners can get the latest PDF free of charge.

Also on the picture is the first batch of wifi2go modules ready to be shipped!

Continue reading
561 Hits

A guest article at Embedded Computing site

The wifi2go Internet of Things module combines a STM32F411 M4 MCU with the industry leading TI CC3100 Wi-Fi device. This Design Article I wrote for Embedded Computing describes some of the design decisions.

"Designing IoT products just got a lot easier" indeed!


Continue reading
492 Hits

Nuts & Volts magazine drawing for JumpStart MicroBox

In conjunction with Nuts & Volts magazine, we are giving out three JumpStart MicroBoxes to Nuts & Volts readers who emailed us following the instructions in the article on JumpStart API published in March 2016. This video announces the lucky recipients:

And don't forget, we are also running a current promotion including 10% off any order from ImageCraft, a free wifi2go-Carrier every other week to an ImageCraft blog subscriber, etc.; more details here. :)

Continue reading
1007 Hits

Subscribe to Our Blog For a Chance to Win a wifi2go-Carrier!

... and get the 10% off coupon code! See here for details.

Continue reading
485 Hits