Profi2005 0 12 февраля, 2016 Опубликовано 12 февраля, 2016 (изменено) · Жалоба Добрый день, Использую 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 С уважением, К. startup_stm32f407xx.zip Изменено 12 февраля, 2016 пользователем Profi2005 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 13 февраля, 2016 Опубликовано 13 февраля, 2016 · Жалоба Но! После подключения к проекту tird-party .cpp, все компилится без ошибок, но при запуске (Download & Debug) появляется надпись Program Exit Reached, а симулятор даже не встает на первую строчку программы кода Си. 2 вопроса: 1. Этот волшебный файл "tird-party .cpp" увидеть можно? 2. Симулятор не работает, а реальный процессор? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Profi2005 0 15 февраля, 2016 Опубликовано 15 февраля, 2016 · Жалоба 2 вопроса: 1. Этот волшебный файл "tird-party .cpp" увидеть можно? 2. Симулятор не работает, а реальный процессор? Спасибо за отклик. 1. Прикрепить .cpp к сожалению не могу. Вроде как проблема локализовалась около динамического распределения памяти больших массивов. Оператор new и иже с ним. Собственно, проблема возникает уже просто при добавлении файла в проект, никакие функции из .cpp не вызываются. 2. Реальный процессор - он как и симулятор. Управление на основную программу не передается. 3. Как интересно, формируется код по метке __iar_data_init3? С уважением, К. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Profi2005 0 15 февраля, 2016 Опубликовано 15 февраля, 2016 (изменено) · Жалоба Собственно, в .cpp инициализируются несколько массивов вида: float* ааа = new float[512]; если увеличить heap -> 0x2000 то все начинает работать... если оставить в комментах структуру: int* Param = new int[5]; float* Buff = new float[Param[1]*Param[2]]; Для нее увеличение heap -> 0xE000 не помогает, далее heap -> 0xF000 начинает ругаться линковщик. Изменено 15 февраля, 2016 пользователем Profi2005 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 17 февраля, 2016 Опубликовано 17 февраля, 2016 (изменено) · Жалоба . . . . int* Param = new int[5]; float* Buff = new float[Param[1]*Param[2]]; . . . . Это берется 2 неинициализированных значения, перемножаются, и этот фонарь используется для new ? float* Buff = new float[фонарь]; Если код CPP, то при запуске программы в инит-коде запускается цепочка конструкторов. (проверьте, что-как объявляется в Вашем коде ). Т.е. может быть завес из-за некорректного конструктора. Отследить дебагером это достаточно сложно. ps . . . . 1. Прикрепить .cpp к сожалению не могу. . . . . Собственно, проблема возникает уже просто при добавлении файла в проект, никакие функции из .cpp не вызываются. . . . . . кроме вышеупомянутых конструкторов. Изменено 17 февраля, 2016 пользователем k155la3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Profi2005 0 19 февраля, 2016 Опубликовано 19 февраля, 2016 · Жалоба Я небольшой спец в .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 признал, что это их косяки Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться