While writing C codes, many times you will need to write an array of input-output like pairs table. One of the most common example is to have a table containing state/command – function pointer pairs, which basically is a look up table of the function pointers to be executed based on the given input state/command. In this case, you would probably want to use X-macros to avoid/reduce mistakes in your code. Here is great tutorial on how to use x-macros for this purpose which I found on embedded.com:
It is really worth to spend 30 minutes reading it!
While writing codes, a lot of times I need to do some math calculation which I did on paper/calculator only to get some constant values (e.g. hardware register settings, etc.). Either you realize it or not, these kind of calculation tasks can be really simply done using the C preprocessor to get the job done.
Referring to the MSP430 microcontroller device datasheet, the current consumption in active mode (CPU on) is usually specified around 10-40% lower if the code is executed from SRAM than from flash memory. For example:
- The MSP430F22x4 datasheet specifies the current consumption in active mode (CPU = 1MHz, Vcc = 3.3V) to be 340 uA when running code from SRAM and 390 uA when running from Flash.
- The MSP430F543xA datasheet specifies current consumption in active mode (CPU= 1MHz, PMMCOREVx=0, Vcc = 3.0V) to be 0.17 mA when running code from SRAM and 0.29 mA when running from flash.
Therefore in an application which has very limited power source and has small routines which are executed quite often, it is useful to execute the routine from SRAM instead of flash memory to reduce the current consumption. Onwards let’s call such function executed from RAM/SRAM during run-time as “RAM function”. The basic principle is quite simple: the code needs of course to be first stored in a non-volatile memory (e.g. flash memory), however these code will then be copied into RAM during initialization to enable executing it from RAM during run-time.
The following guide shows the implementation of code example for implementing RAM function in C programming language for MSP430 microcontroller device on the IAR Embedded Workbench (IAR EWB) compiler and Code Composer Studio (CCSTUDIO), inspired by the flash write code example of MSP430F543x. The example uses the MSP430G2553 on MSP-EXP430G2 Launchpad development board as target device. The MSP430G2553 microcontroller basically has 16 KB Flash (address range 0xC000 – 0xFFFF) and 512 bytes SRAM (address range 0x200 – 0x3FF) on-chip. Although practically it is not really suitable to use the MSP430G2553 for implementing RAM functions due the small SRAM memory size, the example codes basically tries to give a proof of concept on how RAM functions which can even implement ISR (In terrupt Service Routine).