Midnight C
The Midnight C platform, often referred to in the past as the "Makefile", is a cross-platform method of compiling native C code for the VEX Cortex.
Midnight C is for the older VEX Cortex which is no longer supported
Features -
Not VEX-Supported
Native code compilation
32- and 64-bit types
Partial multitasking
Uses Eclipse IDE
Interrupt control
Pointer and register control
Purdue Robotics OS
The Midnight C platform, often referred to in the past as the "Makefile", is a cross-platform method of compiling native C code for the VEX Cortex. It supplanted Robotc during VEX Gateway as the primary language for programming the Cortex. Initial versions used the EasyC runtime library to interface with VEX parts, making it fully EasyC compatible; the development of the Purdue Robotics OS brought a more powerful API compatible with a variety of existing environments.
Installation
Midnight C is compatible with Windows, Mac OS X, and Linux.
Firmware (Mastercode) reflashing for Midnight C is performed using the same procedure as reflashing EasyC firmware.
Features
Uses the GNU GCC compiler for ARM
Can use any standard C syntax, library, data type, or function
Powerful, high-speed library implementation surpasses I/O and interrupt performance of even the EasyC library
Midnight-C IDE (based on the Eclipse IDE) handles routine compilation and upload tasks
Vast improvements in size and speed
Shortcomings
Initial setup still needs work
Not supported by VEX
Object-oriented programming
C++ support is also available; if a file is created with a .cpp extension, it will be compiled using arm-none-eabi-g++. The code used must have entry points from one of the built-in C files through a C++ function exposed via extern 'C' { ... }. Otherwise, any standard C++ construct or syntax can be used; the API header files have the appropriate declarations for use of the standard C functions. Beware of code size - while using C++ itself imposes only a small penalty, any function in the C++ standard library (e.g. new, std::) will often add 50-100 KB to the hex file.
Please note that object-oriented principles tend to encourage practices such as dynamic memory allocation and excessive indirection which may conflict with the embedded system goals of speed and program size. When possible, use C code.
Teams Contributed to this Article:
BLRS (Purdue SIGBots)
Last updated