I discovered this problem yesterday as well. There are a couple other solutions that may be easier than recompiling the library. The biggest problem with recompiling it is that you must then maintain it. When a new version comes out you can't just use it. You must recompile it as well, unless the bug gets fixed in the next release.
1. You can fix the error in arm_bitreversal2.S as described in your post and include that file as part of your project. As long as it gets linked in prior to the library, the version inside the library gets ignored.
2. An even less intrusive method is to add the section text to the linker script. My addition is highlighted in red below.
... /* The program code and other data goes into FLASH */ .text : { . = ALIGN(4); *(.text) /* .text sections (code) */ *(.text*) /* .text* sections (code) */ *(text) /* workaround for CMSIS library bug */ *(.rodata) /* .rodata sections (constants, strings, etc.) */ *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ ...
...
/* The program code and other data goes into FLASH */
.text :
{
. = ALIGN(4);
*(.text) /* .text sections (code) */
*(.text*) /* .text* sections (code) */
*(text) /* workaround for CMSIS library bug */
*(.rodata) /* .rodata sections (constants, strings, etc.) */
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
I believe this is the best workaround until the bug is fixed in the CMSIS distribution. Is ARM aware of the problem?
- Greg
I just downloaded the CMSIS libraries from the ST website for using them on a STM32 controller.
The bug described above is still in there. It took me quite some time to find and finally fix it with the help of this thread.
Maybe someone knows how and where to file a bug report?
Hi frsc,
I think ST just needs to offer the more up-to-date versions of CMSIS. This should be fixed in the version offered by ARM. I forget which version specifically that this got patched, but it has been fixed.
CMSIS - Cortex Microcontroller Software Interface Standard - ARM
Hi, I'm in trouble with the CMSIS DSP library (on STM32F429) regarding bitreversal function and solved it the workaround described here. Hope this helps.
Regards
Ibrahim
Hello Ibrahim,
Can you tell me the version # at the top of the arm_bitreversal.c file you are using?
Thanks,
Dan
Hi Daniel,
It is "$Revision: V1.4.1" supplied by ST.
Regards,
I have passed on your information to the appropriate people at ARM. In the mean time, you are using a bit older version of CMSIS. (3 versions old).
You can download the newest one here:
http://www.arm.com/products/processors/cortex-m/cortex-microcontroller-software-interface-standard.php
Also, when I looked at your website, you mention you're using the Cortex M4 with fpu, but the library file you're including is “libarm_cortexM4l_math.a”, there should be a version “libarm_cortexM4lf_math.a” available to you that is for Cortex M4's with an FPU. You should notice dramatic performance increases if you're using floating-point functions.
Hopefully the newest version of CMSIS doesn't have the same missing function issue. Likely it was just a mistake when compiling it. Please do let us know if you run into the same problem on the newer version though.
Cheers,
Hi Dan,
Thanks for your interest. Yes, the CMSIS version I'm using is a bit older, because this is the DSP library for SM32F4 supplied by ST. It can be downloaded from ST website. I'll try the new version of CMSIS DSP library and let you know the results.
Regarding floating point library “libarm_cortexM4lf_math.a”, I've already used for FFT functions, and it is obvious that the performance increases.
Best regards,
I've tried the latest CMSIS DSP library "libarm_cortexM4lf_math.a" (Date 12. March 2014, Revision V1.4.4), and everything works fine.
Thanks.
Regards,Ibrahim
Hi Ibrahim & Dan,
It is already planned to embed the new CMSIS DSP Library V1.4.4 in the next STM32F4 Standard Peripheral Library release.
Please note that the DSP library will be also available in the next release of STM32CubeF4 package.
Best Regards,
Amel
Hello
by defining the following expression in the options for target->Asm->Misc Controls of keil uvision, problem will be solved.
--cpreproc