CMSIS DSP Library and RMS
Using Fixed Point is a good Idea. other than providing a huge numberspace, floating point has only drawbacks: slower to process, sideeffects, less precision.
Fixpoint is in most cases the better choice. In fact a DSP manufacturer with a floting and a fixpoint line told me once, fixpoint is driven by simulation tools like matlab to transfer their code 1:1 to the embedded world. But the fixpoint devices are better in almost all application.

To your DC Bias problem:
if your input signal has stable amplitudes (on average) you not even need to sample it. Then you can derive it from the input data
so, to process it, try if a simple median filter gets the job done. a median filter is easy to implement. create an array with a odd number of elements and feed in your dc-offset value with dropping the oldest value. so if your Array has 9 Elements just index it with index is idx=(idx++)%9;
Then create a second array of same size and sort the values of the first array into the second. (less than 25 Elements: use insertion sort or shellsort)
The Median is always the middle element, like in case of 9 elements its at Index 4 (9&gt;&gt;1=4)
While a simple moving average has the characteristic of a fir filter, the median filter is much like a IIR filter, but much simpler to compute and it is stable!