реклама на сайте
подробности

 
 
> IAR for ARM 7.40 странная работа stack analysis
Grigorij
сообщение Apr 28 2015, 13:46
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 10-03-07
Пользователь №: 26 038



Решили мы на работе переползти на свежу версию IAR (с 6.30 сразу на 7.40) и, в процессе переползания, выявили странное поведение stack analysis. Для того, чтобы локализовать проблему сделали новый Си-шный проект с чистого листа, в который добавили один единственный файл:
Код
#include <math.h>

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

Мы посмотрели, как в стандратной библиотеки реализована функция расчета acos. В конечном итоге acos действительно вызывает __iar_Atan. Но вопрос в том, почему стек анализатор не видет вызова __iar_Atan и говорит о том, что __iar_Atan - Uncalled function? При этом в ассемблерном коде мы видем вызов __iar_Atan.

В целом проблема решается исключением из анализа __iar_Atan, но выглядит это ну как-то уж очень странно. Хотелось бы понять в чем косяк.

P.S. На 6.30 такой проблемы у нас нет.

Сообщение отредактировал Grigorij - Apr 28 2015, 13:48
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 16:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01351 секунд с 7
ELECTRONIX ©2004-2016