chipKIT® Development Platform

Inspired by Arduino™

The MPIDE Compiler for PIC32

Posted 2016-06-27 13:28:20 by Majenko

Note: Information in this post applies to MPIDE, which has been deprecated. The recommended IDE for chipKIT core is now Arduino IDE or UECIDE. MPIDE still offers support for legacy code. For more information about MPIDE, please visit the legacy Install Page.

This is a fork of the compiler from about October 2010. So it's ahead of the Microchip MPLAB C32 v1.12 release, but behind the upcoming C32 v2.00 release. Basically it's similar to C32 v1.12, but updated to GCC 4.5.1. Also, the default linker scripts are modified to work with the chipKIT bootloader. There are no optimization restrictions in this build, but it will likely be updated less often than the official MPLAB C32 compiler.

Source code: https://github.com/chipKIT32/chipKIT-cxx

MPIDE Compiler optimisation

Currently, MPIDE is configured to call the compiler with the -O2 optimization option. The -O2 set of optimization usually results in a nice balance between code size and speed. However, there are some instances where you want to sacrifice code size (use more FLASH memory) in order to get more speed. Luckily, Rick has introduced features in MPIDE that makes changing the default compiler options easy to change.

To change the optimization level:

  1. Open the /hardware/pic32/platforms.txt file in your favorite text editor.
  2. Find the lines beginning with pic32.compiler.c.flags and pic32.compiler.cpp.flags. In those lines, you should see a compiler optimization option, -O0, -O1, -O2, -Os, or -O3.
  3. Change the optimization level option to the desired level, as listed below.
  4. Save platforms.txt
  5. Restart MPIDE.

Optimization levels

  • -O0 - Disable optimizations
  • -O1 - Reduce code size and execution time, without performing any optimizations that take a great deal of compilation time.
  • -O2 - Optimize even more. GCC performs nearly all supported optimizations that do not involve a space-speed trade-off. As compared to -O1, this option increases both compilation time and the performance of the generated code. (This is currently the default.)
  • -O3 - Optimize yet more. GCC optimizes for maximum performance at the expense of code size.
  • -Os - Optimize for size. -Os enables all -O2 optimizations that do not typically increase code size.

It also performs further optimizations designed to reduce code size.

For example:

    pic32.compiler.c.flags=-O3::-c::-mno-smart-io::-ffunction-sections::-fdata-sections
    pic32.compiler.cpp.flags=-O3::-c::-mno-smart-io::-ffunction-sections::-fdata-sections

If you really want aggressive performance for your sketch, you could also add the -funroll-loops option. Note that this option almost always increases code size but it may or may not increase performance.

For example:

    pic32.compiler.c.flags=-O3::-funroll-loops::-c::-mno-smart-io::-ffunction-sections::-fdata-sections
    pic32.compiler.cpp.flags=-O3::-funroll-loops::-c::-mno-smart-io::-ffunction-sections::-fdata-sections