Charles Qing Cao - Assistant Professor, The University of Tennessee - Knoxville
I got into the field of electronics/engineering in 1998, when I enrolled in computer engineering courses in college. I began my first ventures in this field by taking courses in the computer engineering curriculum. Quickly I was strongly attracted and took it as my major since then.
A lot of my work focuses on networked embedded systems that involve research and development on both hardware and software. A bunch of tools come into my mind for these purposes: sensor node platforms such as MicaZ and IRIS nodes for application development, the JTAG debugger, oscilloscope, etc. I also develop communication protocols, so tools such as packet sniffer have been very useful. My lab recently started to look at smart phone hardware platforms such as Google Nexus S and its associated tool chain. So my favorite tool set has been changing over time.
I have been using a wide range of software tools for my research, such as GloMoSim for simulations, AVR Studio for development, Matlab for mathematical analysis, and various compilers for writing code. I am a fan of Python, but I also use C and Java a lot. I feel that these tools are essential for me to carry out research work on networked embedded systems.
I typically use Powerpoint to make presentations, and recently I started to use Beamer, which I find very helpful because it allows me to focus on the content of material instead of the format.
I use Mendeley a lot to manage literature. It is sometimes unstable, but I like its comprehensive support for tagging and for online backup. These features make it unique compared to other literature management software I know of.
I fixed many tricky bugs when I was developing an embedded operating system for sensor networks. One of the most interesting one has to do with faulty compilers. Basically I was developing a bootloader for recovering from failures. Unfortunately the system keeps rebooting and I could not figure out why. Later I found that if I set the optimization level of the compiler differently, the bug was no longer triggered. Then I figured it could be something wrong with the compiler, and I analyzed the generated assembly code, and it turned out to be the case. I soon found that this bug had been reported to the compiler developers, and what I could do is to modify my design to avoid triggering the same bug again. Weeks of time had passed when I finalized avoided this bug!
My entire collection of books related to computer engineering, including journals, proceedings of conferences, datasheets, textbooks, and technical references.
In my area, we develop software for networked embedded systems that are really resource constrained. For example, the MicaZ sensor node platform that we developed software for has only a few kilo bytes of RAM! Therefore, I have found it imperative when trying a new experiment to take into account these strict resource constraints. Sometimes very compact data structures are used, such as packing multiple flags into one byte to save memory space.
Another trick for developing software for such resource constrained platforms is to take into account system visibility: without it the system becomes a black box that you never know why it fails. Sometimes, even the minimum level of visibility, like flashing the LEDs when something is wrong, is better than nothing!
I’m extremely passionate over my work over the past few years on developing and maintaining an embedded operating system for resource constrained platforms, called LiteOS, whose website is http://www.liteos.net. We have developed this system from scratch, and implemented multiple novel services based on top of it. One of the more recent developments was to build a layer of energy virtualization based on it, which allows users to virtualize shared battery to achieve better allocation and isolation of energy resource. I think I’m very fortunate that this idea has led to multiple decent publications, and it is being supported by the prestigious NSF career award. This has been my favorite project that has resulted in fruitful publications and software packages that I and my team are very proud of.
Hmmm… I remember in another project I got involved in, the VigilNet project, I spent weeks to engineer a realistic PIR detection algorithm that detects human subjects with the existence of background noise using electronic sensors. We chose to do the testing experiments in a parking lot, which was near a large stadium. During the experiment, we had people walk by in a certain pattern again and again that looks funny. Our activities quickly caught attention of those who are vigilant, and police came to question us on what we were up to. We tried out best to explain that to them that we were simply carrying out scientific experiments!
Several projects come to my mind. One of the projects is on building energy virtualization support for sensor networks that allows tasks to share the battery more efficiently. Another project involves deploying smart cameras to detect objects in environments. Finally, the third project in my lab is in collaboration with the Oak Ridge National Lab, which analyzes and makes sense of large-scale location data using novel programming models.
As my research has been closely related to the emerging area of cyber-physical systems, I sincerely believe that the development of networked embedded systems will play a significant role in such systems. Research in this direction will lead to a more instrumented, interconnected and intelligent world. There will be huge amounts of data that not only come from people, but also from sensors of various types deployed everywhere. Some people call this the Internet of Things. I think this is a big change that will have impact on everything, and it will also pose greater challenges to make sense of that huge amount of data. Certainly there is a lot to do!