Миландр
http://forum.milandr.ru/

Ошибка фитоновского линкера?
http://forum.milandr.ru/viewtopic.php?f=27&t=2615
Страница 1 из 1

Автор:  stranderer [ 2015-июл-02 17:42 ]
Заголовок сообщения:  Ошибка фитоновского линкера?

Несколько раз замечал, что какие-то функции в проектах для 1986ВЕ91Т работают со странными ошибками (например в отладчике видно, что прошла команда формирования сигнала на выходе порта МК, но на осциллографе этот сигнал не наблюдается).
С помощью отладчика среды CodeMaster-ARM выяснил, что к таким ошибкам приводит загрузка в регистры Ri кусков кода вместо адресов переменных.
Из файлов .lst и .src видно, что после кода почти каждой C-функции размещены несколько констант с именами вида ?lrNNNN ("широкие" данные и адреса, которые "не лезут" в тело THUMB-инструкций), но когда я просматриваю загруженную в МК программу с помощью дизассемблера, то вижу, что иногда последняя константа в такой группе отсутствует -- после предпоследней сразу начинается код следующей функции, причём начинается именно по тому адресу, который указан в .map-файле, т.е. скорее всего это ошибка линковщика.
В некоторых случаях такую ошибку удавалось обойти, например меняя местами функции или используя вместо константы глобальную переменную, но это способ ненадёжный и "неправильный".
В приложенном проекте обнаружено отсутствие в модуле ACTNN6770101 по адресу 0x080003D4 константы ?lr0006, содержащий адрес массива CosXY, вместо неё по этому адресу начинается код функции WritePhases. В результате неверно работает функция CalcPhases. Для наглядности в архиве имеется xls-таблица с результатами исследования данного модуля проекта.
Как (кроме "метода тыка") можно бороться с такими ошибками? Может быть кто-нибудь уже сталкивался с этим?

Вложения:
Project-01.zip [276.02 КБ]
Скачиваний: 81

Автор:  I.Stepanov [ 2015-июл-09 15:27 ]
Заголовок сообщения:  Re: Ошибка фитоновского линкера?

Здравствуйте,

Мне не удаётся воспроизвести описанный Вами эффект. Все ?lr000x стоят на своих местах. Возможно наблюдаемый Вами эффект как-то связан с расположением файлов проекта и используемой библиотекой драйверов периферии. не могли бы Вы выложить каталоги "sb_Common" и "D:\USERS\CM3.prj\SysInc\MDR32F9x", которые Вы используете в проекте. Кроме того, если у Вас есть загружаемый файл (*mce или *.elf) с отладочной информацией, на котором воспроизводится описанное поведение, то, пожалуйста, выложите его тоже.

Автор:  stranderer [ 2015-июл-10 14:53 ]
Заголовок сообщения:  Re: Ошибка фитоновского линкера?

Архив с папкой Миландровской библиотеки (D:\USERS\CM3.prj\SysInc\MDR32F9x) прилагаю.
В папке "D:\USERS\CM3.prj\sb_Common" лежат модули, одинаковые для всех пяти проектов: startup_device_m3.mca; DeclMCU.h; DeclMCU.c; Main.h; Main.c - я их скопировал в подпапку "\Project-01" просто для удобства архивации.
Остальные файлы исходно лежали в папке "D:\USERS\CM3.prj\sb_N6_77_01_01", я их скопировал в подпапку "\Project-01" для фиксации версии, так как в рабочем проекте я уже поменял порядок функций в проблемном модуле, что позволило обойти указанную ошибку -- теперь все константы лежат на месте.
Файлы sbN6770101.HEX и sbN6770101.mce я вроде положил в архив вместе со всем проектом. Разве нет?
Ещё (на всякий случай) прикладываю последнюю версию файла *.ide, в нём я ничего не менял...

Вложения:
sbN6770101ide.zip [5.68 КБ]
Скачиваний: 67
MDR32F9x.zip [86.93 КБ]
Скачиваний: 97

Автор:  I.Stepanov [ 2015-июл-13 16:54 ]
Заголовок сообщения:  Re: Ошибка фитоновского линкера?

Здравствуйте.

Спасибо за выложенные файлы.
Это ошибка компилятора, которая будет исправлена в ближайшем релизе CodeMaster-ARM.

Автор:  stranderer [ 2015-июл-14 17:01 ]
Заголовок сообщения:  Re: Ошибка фитоновского линкера?

Спасибо! Будем ждать...

Автор:  stranderer [ 2017-мар-16 22:43 ]
Заголовок сообщения:  Re: Ошибка фитоновского линкера?

Говорят, что обещанного 3 года ждут. Последняя версия CodeMaster-ARM вышла 30.09.2013, с тех пор прошло уже больше 3 лет. Хотелось бы знать, каков прогноз? Когда ожидается следующая версия, в которой найденные ошибки уже исправлены?

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/