Click here to Skip to main content
15,883,127 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
I am trying to write a program to calculate the exponential of a number using ARM-C inter-working. I am using LPC1769(cortex m3) for debuuging. The following is the code:
 /*here is the main.c file*/
/*function prototypes*/
#include <<stdio.h>>
#include <<stdlib.h>>
extern int Start (void);
extern int* Exponentiatecore(int *m,int *n);
void print(int i);
int Exponentiate(int *m,int *n);
int main()
return 0;

int Exponentiate(int *m,int *n)
    if (*n==0)
        return 1;
        int *result=NULL;
        result=(int *)malloc(sizeof(int));
        return (result);


void print(int i)

/*end of C file */

this is the assembly code which complements the above C code

.syntax unified
		 	.cpu cortex-m3

		 	.global	Start
		 	.global Exponentiatecore

		mov r10,lr
	        ldr r0,=label1
		ldr r1,=label2
		bl Exponentiate
		ldr r0,[r0]
		bl print
		mov lr,r10
		mov pc,lr

Exponentiatecore:          // r0-&m, r1-&n
ldr r0,[r0]
mov r2,r0
ldr r1,[r1]

mul r2,r0
subs r1,#1
bne loop
mov r0,r2
bx lr

.word 0x02

.word 0x03

however during the debug session, I encounter a Hardfault error for the execution of "Exponentiatecore(m,n)". During the first branch from assembly to C i.e. BL Exponentiate-- LR is saved. Again during second branch to assembly routine Exponentiatecore(m,n) LR is over written. This is the line I am facing the hardfault error. Any suggestions are appreciated.

as seen in debug window.

Name : HardFault_Handler
Details:{void (void)} 0x21c <<HardFault_Handler>>
Default:{void (void)} 0x21c <<HardFault_Handler>>
Decimal:<<error reading variable>>
Hex:<<error reading variable>>
Binary:<<error reading variable>>
Octal:<<error reading variable>>

Am I making some stack corruption during alignment or is there a mistake in my interpretation? please kindly help. thankyou in advance
Updated 22-Mar-13 8:46am

1 solution

This is not my area of expertise, so if I am being misled by a syntax that I don't really understand, please ignore me.

With that in mind, my question is: Where does this line take you ?
bl Exponentiate
Share this answer
Venkatesh Kuppan 23-Mar-13 2:11am    
bl exponentiate will take you to the C function Exponentiate(int *m,int *n); Registers r0 and r1 will have the contain the paramenters

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900