That is a really strange phenomenon. You can see by a search in the repo (and by grep
-ing through all the binary files) that the Arduino mbed core only provides the header for the arm_math.h
functions, but not the implementation.
They are expected to be in the toolchain, in a file called libarm_cortexM4l_math.a
, that then must be linked in the project. So if it works in some version of the Arduino IDE board package, then the version that works in has just the right toolchain that has this file.
But, as already discussed and solved in the topic Project using arm_math.h on nRF52 results in Linker Error - #6 by maxgerhardt, the same fix can be applied – we download the file, put it in our project and link against it.

[env:nano33ble]
platform = nordicnrf52
board = nano33ble
framework = arduino
build_flags = -L. -larm_cortexM4l_math
with a bit of test code in src\main.cpp
#include <Arduino.h>
#include <arm_math.h>
void setup() {
Serial.begin(115200);
float numbers_float[3] = {
1.0f, 2.0f, 3.0f
};
q15_t numbers_q15[3];
arm_float_to_q15(numbers_float, numbers_q15, 3);
q15_t rms_result_q15 = 0;
arm_rms_q15(numbers_q15, 3, &rms_result_q15);
float rms_result_float = 0.0f;
arm_q15_to_float(&rms_result_q15, &rms_result_float, 1);
Serial.println("RMS result: " + String(rms_result_float, 5));
}
void loop() {
}
and build …
Linking .pio\build\nano33ble\firmware.elf
Checking size .pio\build\nano33ble\firmware.elf
Building .pio\build\nano33ble\firmware.bin
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM: [== ] 16.6% (used 43496 bytes from 262144 bytes)
Flash: [= ] 8.1% (used 80084 bytes from 983040 bytes)
=================== [SUCCESS] Took 6.87 seconds ===================
For a systematic fix one would have to look if it compiles in the very latest Arduino IDE version (and board support package version), and if yes, what toolchain they are using exactly, and add the missing files. But this works as a workaround and gets the very-lasted version of the ARM library straight from the ARM CMSIS source 