I have this code which I compiled for MSP430 platform using msp430-gcc.
#include<stdio.h>
#include<stdint.h>
// Preprocessor definitions
#define ROR(x,r) ((x>>r) | (x << (64-r)))
#define ROL(x,r) ((x << r) | (x >> (64-r)))
#define R(x,y,k) (x = ROR(x,8), x+=y, x^=k, y = ROL(y,3), y^=x)
void encrypt(uint64_t* , uint64_t*, uint64_t*);
void main(){
uint64_t key[2] ={0x0706050403020100, 0x0f0e0d0c0b0a0908} ; // key
uint64_t plain_text[2] = {0x7469206564616d20, 0x6c61766975716520};
uint64_t cipher_text[2] = {0,0}; //initializing cipher text to 0s
uint64_t* pt = plain_text;
uint64_t* ct = cipher_text; // Cipher Text
uint64_t* k = key; // 64 b
encrypt(pt, ct, k);
}
/*
* Ecnryption Method
*/
void encrypt(uint64_t* pt, uint64_t* ct, uint64_t* k){
uint64_t i;
uint64_t B = k[1];
uint64_t A = k[0];
// Encryption rounds
for(i=0; i<32; i++){
R(ct[1], ct[0], A);
R(B,A, i);
}
}
I wanted the memory segment usage statistics for this program and I did that by generating the object file and using the $ size
command. The result I got out of that is as below:
text data bss dec hex filename
278 0 0 278 116 encrypt.o
I dont understand why the data
segment, which tells me about my RAM usage is zero. I am assuming that my bss
segment is zero as I don't have any uninitialized variables.
I would be really grateful if somebody can explain me what is happening here. Thank you.
What you are declaring are local variables. They will be stored in the stack. In the general case, the RAM size occupied by the stack cannot be determined at the compile time. However, for simple applications such a yours it's possible to estimate the upper bound of stack usage, either by using objdump
and counting the bytes manually, or using some of existing tools for static analysis.
To store the variables in .data
and .bss
segments, use the static
type qualifier:
void main() {
static uint64_t key[2] ={0x0706050403020100, 0x0f0e0d0c0b0a0908};
This is a better practice; dynamic allocation such as allocation in the stack is not something you want to do in microcontroller applications.