Перейти к содержанию
    

EWARM 7.50.2 Некорректная линковка?

Добрый день,

 

Использую EWARM 7.50.2 с ограничением кода 32к

Микроконтроллер STM32F407VG.

Проект стартует нормально (см. картинку).

Normal_Start.jpg

 

Но! После подключения к проекту tird-party .cpp, все компилится без ошибок,

но при запуске (Download & Debug) появляется надпись Program Exit Reached,

а симулятор даже не встает на первую строчку программы кода Си.

 

Startup приложен.

 

Вылет на __exit достигается из:

 

.text ro code 0x08003bc0 0x28 data_init.o [6]

 

согласно .MAP файлу. В дизассемблере это __iar_data_init3

 

 

С уважением,

К.

startup_stm32f407xx.zip

Изменено пользователем Profi2005

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но! После подключения к проекту tird-party .cpp, все компилится без ошибок,

но при запуске (Download & Debug) появляется надпись Program Exit Reached,

а симулятор даже не встает на первую строчку программы кода Си.

 

2 вопроса:

1. Этот волшебный файл "tird-party .cpp" увидеть можно?

2. Симулятор не работает, а реальный процессор?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 вопроса:

1. Этот волшебный файл "tird-party .cpp" увидеть можно?

2. Симулятор не работает, а реальный процессор?

 

Спасибо за отклик.

 

1. Прикрепить .cpp к сожалению не могу.

Вроде как проблема локализовалась около динамического распределения памяти

больших массивов. Оператор new и иже с ним.

Собственно, проблема возникает уже просто при добавлении файла

в проект, никакие функции из .cpp не вызываются.

2. Реальный процессор - он как и симулятор.

Управление на основную программу не передается.

3. Как интересно, формируется код по метке __iar_data_init3?

 

С уважением,

К.

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Собственно, в .cpp

инициализируются несколько массивов вида:

 

float* ааа = new float[512];

 

если увеличить heap -> 0x2000 то все начинает работать... если оставить

в комментах структуру:

 

int* Param = new int[5];

float* Buff = new float[Param[1]*Param[2]];

 

Для нее увеличение heap -> 0xE000 не помогает,

далее heap -> 0xF000 начинает ругаться линковщик.

 

Изменено пользователем Profi2005

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

. . . .

int* Param = new int[5];

float* Buff = new float[Param[1]*Param[2]];

. . . .

 

Это берется 2 неинициализированных значения, перемножаются, и этот фонарь

используется для new ?

float* Buff = new float[фонарь];

 

Если код CPP, то при запуске программы в инит-коде запускается цепочка конструкторов.

(проверьте, что-как объявляется в Вашем коде ). Т.е. может быть завес из-за некорректного конструктора.

Отследить дебагером это достаточно сложно.

 

ps

. . . .

1. Прикрепить .cpp к сожалению не могу.

. . . .

Собственно, проблема возникает уже просто при добавлении файла

в проект, никакие функции из .cpp не вызываются.

. . . . .

кроме вышеупомянутых конструкторов.

Изменено пользователем k155la3

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я небольшой спец в .cpp посему не указал инициализацию, сорри,

она там есть, иначе была бы ошибка при компиляции.

 

Итак, завес EWARM'a 7.50.2 с Programm exit reached

достигается двумя способами в добавленном файле .cpp :

 

1. int* InParam = new int;

 

float* Buffer = new float[*InParam];

 

2. Использование динамического массива с размером,

больше чем heap

 

(Project->Options->Linker->Config->Edit->Stack/HeapSizes)

 

Вроде как IAR признал, что это их косяки :wacko:

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...