$$HEADER$$

What is eLua?

eLua stands for Embedded Lua and the project aims to offer the full implementation of the Lua Programming Language to the embedded world.

eLua is not a stripped down set of Lua to fit in the embedded environment. Much on the contrary, it strives to offer the same features as the desktop version of Lua, complementing them with specific features for embedded use and discarting the need of an operating system running on the microcontrollers. Besides offering different flavors of the full Lua implementation (like the possibility of choosing between an integer-only and a floating point numbers implementation), a lot of work was and will be done in the direction of making Lua more "embedded-friendly" by augmenting the core language with features that allow lower memory requirements and faster embedded performance.

Why Lua? Extremely well crafted, Lua is the perfect example of a minimal, yet fully functional language. Although generally advertised as a "scripting language" (and used accordingly especially in the game industry), it is also fully capable of running stand-alone programs and web services (ex: Adobe Lightroom, World of Warcraft, ...). Its limited resource requirements make it suitable to a lot of microcontroller families. The intrinsic high portability of the original Lua code (which is ANSI C and runs virtually on every platform), combined with the highly portable software architecture of eLua, allow for easy porting of the project to a large variety of architectures. The peripheral access libraries/modules exported by eLua are also portable by design, so one could run a Lua program (without or with very few modifications) on every eLua supported platform. This brings an unprecedent level of portability to the embedded aplications world. eLua inherits the minimalistic and functional design of Lua, staying in line with the well known KISS, Keep It Small and Simple philosophy.

The aim of the project is to have a fully functional Lua development environment on the microcontroller itself, without the need to install a specific development environment on the PC side, other than a serial or ehternet console/terminal emulator.

We can't end this short presentation without presenting our project motto: No matter what you do with eLua, always remember to have Fun with it :)



General Features

As already stated, eLua allows you to run Lua completely on the target microcontroller. A fast-growing set of complementary modules is also provided, for programming eLua microcontroller's peripherals.

The following important features are ready or being implemented:

For more information about the functionality (implemented and planned) in eLua check our status page.

Porting eLua to another compatible platform should be as easy and painless as possible. Currently this is restricted to platforms for which the gcc+newlib combo is available. This restriction will disappear in the near future, as eLua will have its own libc and thus it will be available on a much broader range of MCUs.

The Lua implementation is the full desktop Lua version and comes in two flavors: "regular Lua" (using floating point as the number type) and "integer Lua" (using integers). "Regular Lua" will be able to perform floating point operations (slower because the floating point operations will be emulated in software on the MCU), while "integer Lua" will only be able to perform operations with integer numbers (but support for fixed and even floating point can be added with separate modules) and thus will be faster.



Audience

eLua has a wide and varied audience, starting from newcomers to the embedded world who want an easy and powerful environment for prototyping, rapid application development and quick production, and ranging towards highly skilled developers that want to extend their programs with the Lua library facilities and portable features.

eLua allows embedded-oriented programmers to use the simplicity and power of the Lua programming language and to hide the low-level complexities and platform/architecture-dependent features. With eLua, the programmer can focus on the actual implementation of his program, without having to worry about accessing the low-level peripheral configuration and data registers, as the platform libraries already take care of this. This increases productivity and eliminates the often frustrating task of dealing with platform-specific drivers.

The list below summarizes eLua's target audience:



Authors

eLua is a joint project of Bogdan Marinescu, a software developer from Bucharest, Romania and Dado Sutter, head of the Led Lab at PUC-Rio University, in Rio de Janeiro, Brazil.

Its origins come from the ReVaLuaTe project, also developed by Bogdan Marinescu (as a contest entry for the 2005 Renesas M16C Design Contest), and the Volta Project, managed by Dado Sutter at PUC-Rio from 2005 to 2007.

eLua is developed in an fully open, distributed and colaborative model. An always growing list of collaborators, from all over the planet, can be found in our Credits Page


ReVaLuaTe Project Volta Project
ReVaLuaTe project picture Volta project picture



Contacts

eLua authors can be contacted at:

Bogdan Marinescu: bogdan.marinescu -at- gmail.com

Dado Sutter: dadosutter -at- gmail.com

You are also welcomed to share your questions and suggestions on our Mail Discussion List



License

eLua is Open Source and is freely distributed under the MIT license.

The Lua code (with all the eLua specific changes) is included in the source tree and is, of course, licensed under the same MIT license that Lua uses.

Other (few) components have different licenses. Please see the file LICENSE in the source distribution for details.

The Lua part of eLua is licensed under the Lua licensing terms, which you can find at http://www.lua.org/license.html.

The XMODEM code is adapted from the FreeBSD at91 library, which was written by M. Warner Losh and is released under the BSD license.

The "pack" module is adapted from the "lpack" module by Luiz Henrique de Figueiredo and it's placed in the public domain.

The "bit" module is adapted from the "bitlib" library by Reuben Thomas, distributed under a MIT license.

The "integer only lua" is based on the "Go Long Lua!" patch by John D. Ramsdell (from the Lua Power Patches page) and is placed in the public domain.

The multiple memory allocator (dlmalloc) is written by Doug Lea and is placed on the public domain.

The TCP/IP stack is adapted from uIP, written by Adam Dunkels and released under a BSD license.

The FAT file sistem is based on FatFs, written by Elm Chan. A copy of the FatFs license can be found in the LICENSE.fatfs file.

The RPC implementation is based on Russell Smith's Lua-RPC A copy of the Lua-RPC license can be found in the LICENSE.luarpc file.

Manufacturer provided CPU support libraries are licensed under their own terms. Check src/platform/*platform-name* for details of each license.

The rest of the eLua code is licensed under MIT.

$$FOOTER$$