Код
#include <math.h>
int AngularVelocityFilter1(double * res, const double angle)
{
*res = acos(angle);
return 0;
}
void main(void)
{
double angle;
AngularVelocityFilter1(&angle, 0.1234);
}
int AngularVelocityFilter1(double * res, const double angle)
{
*res = acos(angle);
return 0;
}
void main(void)
{
double angle;
AngularVelocityFilter1(&angle, 0.1234);
}
Все настройки проекта оставили дефолтными. Разрешили только использование stack analysis и генерацию map-файла. В итоге при сборке проекта имеем предупреждение:
Код
Warning[Ls015]: [stack usage analysis] at least one function appears to be uncalled. Example: "__iar_Atan". A complete list of uncalled functions is in the map file.
Содержимое map-файла (только часть):
Код
rogram entry
"__iar_program_start": 0x08000bb9
Maximum call chain 88 bytes
"__iar_program_start" 0
"__cmain" 0
"main" 16
"AngularVelocityFilter1" 8
"acos" 32
"__aeabi_dadd" 16
"__iar_dadd" 16
interrupt
"__default_handler" in vector_table_M.o [5]: 0x08000297
Maximum call chain 0 bytes
"__default_handler" in vector_table_M.o [5] 0
Uncalled function
"__iar_Atan": 0x08000299
Maximum call chain 64 bytes
"__iar_Atan" 32
"__aeabi_dadd" 16
"__iar_dadd" 16
"__iar_program_start": 0x08000bb9
Maximum call chain 88 bytes
"__iar_program_start" 0
"__cmain" 0
"main" 16
"AngularVelocityFilter1" 8
"acos" 32
"__aeabi_dadd" 16
"__iar_dadd" 16
interrupt
"__default_handler" in vector_table_M.o [5]: 0x08000297
Maximum call chain 0 bytes
"__default_handler" in vector_table_M.o [5] 0
Uncalled function
"__iar_Atan": 0x08000299
Maximum call chain 64 bytes
"__iar_Atan" 32
"__aeabi_dadd" 16
"__iar_dadd" 16
Мы посмотрели, как в стандратной библиотеки реализована функция расчета acos. В конечном итоге acos действительно вызывает __iar_Atan. Но вопрос в том, почему стек анализатор не видет вызова __iar_Atan и говорит о том, что __iar_Atan - Uncalled function? При этом в ассемблерном коде мы видем вызов __iar_Atan.
В целом проблема решается исключением из анализа __iar_Atan, но выглядит это ну как-то уж очень странно. Хотелось бы понять в чем косяк.
P.S. На 6.30 такой проблемы у нас нет.