Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
6 years ago.
¿¿¿ how to calculate rms value of an array using mbed nxp lpc1768 ????
Hello everyone, i have mbed nxp lpc1768 board, am using Keil uVision as IDE. I'm trying to do a simple program that calculate the rms value of an array. am using Statistics Math Function from the DSP pack ( arm_cortexM3I_math.lib ) :
- void arm_rms_f32 (float32_t *pSrc, uint32_t blockSize, float32_t *pResult) (https://docs.mbed.com/docs/vignesh/en/latest/api/group__RMS.html)
i have no error problem when i compile the code , but when i start debugging i see error message at the Command window : "Cannot access Memory (@ 0x10008000, Write, Acc Size: 4 Byte)" ,
the code is :
- include "mbed.h"
- include "arm_math.h"
q31_t data [5]= {1,2,3,4,5}; q31_t *d = data; q31_t *pRes ;
int main (void) {
arm_rms_q31(d, 5, pRes);
}
Could anyone help me cuz i couldnt resolve this problem/errorany ???
Thanks!!
1 Answer
6 years ago.
When posting code please use
<<code>> your code <</code>>
This will keep the formatting correctly.
The problem is that you are creating a pointer pRes but never setting it to point to a memory location. This means that it is pointing to a random location in memory (normally it will end up being 0 but it could be anywhere). In this case it's pointing to a read only address and so when the RMS function tries to write the result to that memory address you get a crash.
Remember pointers can't store values, if you need to store a value you must also create a variable to store it in.
e.g.
#include "mbed.h" #include "arm_math.h" q31_t data [5]= {1,2,3,4,5}; q31_t *d = data; q31_t pRes; // variable to hold the result q31_t *pResPointer = &pRes; // pointer to that variable. int main (void) { arm_rms_q31(d, 5, pResPointer); // result is now in pRes }
You could simplify this a little, the two pointer variables aren't really needed:
#include "mbed.h" #include "arm_math.h" q31_t data [5]= {1,2,3,4,5}; q31_t pRes; int main (void) { arm_rms_q31(data, 5, &pRes); }