|
Иногда выскакивает ошибка 117 |
|
|
|
Mar 31 2011, 10:18
|
Частый гость
 
Группа: Участник
Сообщений: 136
Регистрация: 2-01-06
Пользователь №: 12 772

|
При работе с программой иногда выскакивает ошибка 117 в режиме "Make" на этапе линковки: Error[e117]: Incompatible runtime models. Module adc_8535 specifies that '__has_elpm' must be 'false', but module delay has the value 'true' После "Rebuild All" все компилируется нормально. Но хочется понять, что происходит. В некоторых случаях после модификации программы вновь работает "Make". В даном случае модуль "delay" не модифицировался, а только модуль "adc_8535". P.S. Такое впечатление, что ни у кого эта ошибка не выскакивает. А у меня за пару дней то появляется, то пропадает
|
|
|
|
|
 |
Ответов
|
Apr 5 2011, 03:01
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Эта ошибка возникает из-за несовместимости т.н. рантаймных моделей объектных файлов проекта и подключенной библиотеки, о чём недвусмысленно сообщает текст ошибки. В частности, у вас там есть объектный модуль adc_8535, который скомпилирован с опцией, не включающей фичу has_elpm, а подключенная (указанная для сборки) библиотека эту фичу содержит, что видно по её модулю delay.
Смотрите внимательно опции компилятора (при make и rebuild) и опции подключенной библиотеки. Чтобы не было конфликтов, рантаймные модели (т.е. модель памяти, опции процессора и т.п.) должны быть одинаковыми.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Apr 5 2011, 15:40
|
Частый гость
 
Группа: Участник
Сообщений: 136
Регистрация: 2-01-06
Пользователь №: 12 772

|
Цитата(dxp @ Apr 5 2011, 06:01)  Эта ошибка возникает из-за несовместимости т.н. рантаймных моделей объектных файлов проекта и подключенной библиотеки, о чём недвусмысленно сообщает текст ошибки. В частности, у вас там есть объектный модуль adc_8535, который скомпилирован с опцией, не включающей фичу has_elpm, а подключенная (указанная для сборки) библиотека эту фичу содержит, что видно по её модулю delay.
Смотрите внимательно опции компилятора (при make и rebuild) и опции подключенной библиотеки. Чтобы не было конфликтов, рантаймные модели (т.е. модель памяти, опции процессора и т.п.) должны быть одинаковыми. Я, конечно, не большой знаток IAR. Мог что-нибудь пропустить. Так и думал вначале. Просто тупо жал Rebuild All. Но я не меняю никаких свойств, не подключаю и не отключаю модули, библиотеки, а ошибка то появится, то исчезнет. Правлю только исходный текст. Идет отладка некоторых кусков программы. Я попробую тут выложить полностью проекты IAR с ошибкой и без. Может кто и заметит что-нибудь. Вот сейчас есть проект с ошибкой. Выкладываю. Когда ошибка в этом проекте исчезнет, снова выложу. Логику работы просьба не искать. Это просто куски для проверки отдельных узлов IAR 4.30A P.S. А вот и проект без ошибки. В чем разница?
Сообщение отредактировал IF_P - Apr 5 2011, 18:09
Эскизы прикрепленных изображений
Прикрепленные файлы
ERR.RAR ( 49.66 килобайт )
Кол-во скачиваний: 15
NORM.RAR ( 47.09 килобайт )
Кол-во скачиваний: 10
|
|
|
|
|
Apr 6 2011, 05:52
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(IF_P @ Apr 5 2011, 22:40)  Я попробую тут выложить полностью проекты IAR с ошибкой и без. Может кто и заметит что-нибудь. Вот сейчас есть проект с ошибкой. Выкладываю. Когда ошибка в этом проекте исчезнет, снова выложу. Логику работы просьба не искать. Это просто куски для проверки отдельных узлов
IAR 4.30A Скачал проект с ошибкой. Что-то странный он какой-то. В настройках криминала не увидел, но почему-то в продуктах компиляции какая-то ерунда. Например, в проекте добавлены файлы adc_8535.c и delay.c, а в папке Obj объектные файлы: adc_8535.r90, delay.r90, i2c.r90. Откуда взялся i2c.r90, если его исходника нет в проекте? Далее, в папке List лежат: delay.lst, i2c.lst, где adc_8535.lst? И почему есть i2c.lst? Видимо, это результат каких-то экспериментов, когда то файлы добавляются в проект (и удаляются из него), то опции генерации листингов включатся/выключаются. Возможно, поэтому и атрибуте объектных файлов как-то "разбежались". Посмотрел потроха объектных файлов - действительно, у них разные атрибуты рантаймной модели. У adc_8535.r90: __has_elpm ♣falseЙ (прямо из бинарника взял), у delay.r90: __has_elpm ♦trueЙ. Как это получилось, не знаю, но не очень удивляюсь на общем фоне. Что-то у вас барабашки какие-то там живут. Возможно, компилировали проект с разными наборами файлов и для разных процов в разное время. Вот продукты компиляции и интерферируют. Если не это, то тогда не знаю, мне не удалось повторить ваш эффект. Сам проект я перекомпилировал, всё собралось без ошибок. Правил файлы, компилировал, никаких проблем не выявилось - все файлы правильно генерируются. Никаких ошибок не возникает. IAR 5.30.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Apr 6 2011, 12:14
|
Частый гость
 
Группа: Участник
Сообщений: 136
Регистрация: 2-01-06
Пользователь №: 12 772

|
Цитата(dxp @ Apr 6 2011, 08:52)  Сам проект я перекомпилировал, всё собралось без ошибок. Правил файлы, компилировал, никаких проблем не выявилось - все файлы правильно генерируются. Никаких ошибок не возникает. IAR 5.30. Спасибо за помощь. Да, действительно, я компилировал в одной папке разные проекты с разными CPU: ATMega128, ATMega8, ATMega8535. И модуль I2C использовался с ATMega128. Я удалил из проекта все остальные модули, а этот по ошибке оставил. А листинга не было потому, что именно для ATMega8535 забыл поставить "галочку" в настройках. Для других CPU она стоит. Но до листинга я не добирался, поэтому и не заметил. Видимо, надо чистить папки "EXE", "LIST", "OBJ" при каждых изменениях. Буду так пробовать. Если снова возникнет ошибка, напишу. P.S. Сейчас попробовал в проекте с ошибкой очистить вышеуказанные папки и все скомпилировалось без ошибки.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|