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

 
 
 
Reply to this topicStart new topic
> EWARM 7.50.2 Некорректная линковка?, Programm exit reached после добавления .cpp
Profi2005
сообщение Feb 12 2016, 11:20
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 17-12-04
Пользователь №: 1 530



Добрый день,

Использую EWARM 7.50.2 с ограничением кода 32к
Микроконтроллер STM32F407VG.
Проект стартует нормально (см. картинку).


Но! После подключения к проекту tird-party .cpp, все компилится без ошибок,
но при запуске (Download & Debug) появляется надпись Program Exit Reached,
а симулятор даже не встает на первую строчку программы кода Си.

Startup приложен.

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

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

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


С уважением,
К.

Сообщение отредактировал Profi2005 - Feb 12 2016, 13:10
Прикрепленные файлы
Прикрепленный файл  startup_stm32f407xx.zip ( 4 килобайт ) Кол-во скачиваний: 10
 
Go to the top of the page
 
+Quote Post
hd44780
сообщение Feb 13 2016, 15:15
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Цитата(Profi2005 @ Feb 12 2016, 14:20) *
Но! После подключения к проекту tird-party .cpp, все компилится без ошибок,
но при запуске (Download & Debug) появляется надпись Program Exit Reached,
а симулятор даже не встает на первую строчку программы кода Си.


2 вопроса:
1. Этот волшебный файл "tird-party .cpp" увидеть можно?
2. Симулятор не работает, а реальный процессор?


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Profi2005
сообщение Feb 15 2016, 07:26
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 17-12-04
Пользователь №: 1 530



Цитата(hd44780 @ Feb 13 2016, 18:15) *
2 вопроса:
1. Этот волшебный файл "tird-party .cpp" увидеть можно?
2. Симулятор не работает, а реальный процессор?


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

1. Прикрепить .cpp к сожалению не могу.
Вроде как проблема локализовалась около динамического распределения памяти
больших массивов. Оператор new и иже с ним.
Собственно, проблема возникает уже просто при добавлении файла
в проект, никакие функции из .cpp не вызываются.
2. Реальный процессор - он как и симулятор.
Управление на основную программу не передается.
3. Как интересно, формируется код по метке __iar_data_init3?

С уважением,
К.



Go to the top of the page
 
+Quote Post
Profi2005
сообщение Feb 15 2016, 13:03
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 17-12-04
Пользователь №: 1 530



Собственно, в .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 - Feb 15 2016, 17:00
Go to the top of the page
 
+Quote Post
k155la3
сообщение Feb 17 2016, 10:37
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Profi2005 @ Feb 15 2016, 17:03) *
. . . .
int* Param = new int[5];
float* Buff = new float[Param[1]*Param[2]];
. . . .


Это берется 2 неинициализированных значения, перемножаются, и этот фонарь
используется для new ?
float* Buff = new float[фонарь];

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

ps
Цитата(Profi2005 @ Feb 15 2016, 11:26) *
. . . .
1. Прикрепить .cpp к сожалению не могу.
. . . .
Собственно, проблема возникает уже просто при добавлении файла
в проект, никакие функции из .cpp не вызываются.
. . . . .

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

Сообщение отредактировал k155la3 - Feb 17 2016, 13:12
Go to the top of the page
 
+Quote Post
Profi2005
сообщение Feb 19 2016, 07:38
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 17-12-04
Пользователь №: 1 530



Я небольшой спец в .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.gif


Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th June 2025 - 10:04
Рейтинг@Mail.ru


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