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

Внутренняя ошибка в CMC-ARM от ФИТОН-а
http://forum.milandr.ru/viewtopic.php?f=27&t=1566
Страница 1 из 1

Автор:  stranderer [ 2013-авг-30 13:49 ]
Заголовок сообщения:  Внутренняя ошибка в CMC-ARM от ФИТОН-а

Собираю программу для МК 1986ВЕ91Т в CodeMaster-ARM v 2.32.00.
Транслятор C выдаёт ошибку "Fatal[C0] Main.c(651,0): INTERNAL ERROR. PLEASE CONTACT TECHNICAL SUPPORT"
в строке с последним оператором return в модуле Main. Если закомментировать эту строку, та же ошибка выдаётся в строке с предыдущим оператором return.
Пробовал изменять режим оптимизации - не помогло.
Что ещё можно сделать?

Вложения:
Project.zip [25.65 КБ]
Скачиваний: 154

Автор:  ASavit [ 2013-сен-03 10:22 ]
Заголовок сообщения:  Re: Внутренняя ошибка в CMC-ARM от ФИТОН-а

stranderer писал(а):
Собираю программу для МК 1986ВЕ91Т в CodeMaster-ARM v 2.32.00.
Транслятор C выдаёт ошибку "Fatal[C0] Main.c(651,0): INTERNAL ERROR. PLEASE CONTACT TECHNICAL SUPPORT"
в строке с последним оператором return в модуле Main. Если закомментировать эту строку, та же ошибка выдаётся в строке с предыдущим оператором return.
Пробовал изменять режим оптимизации - не помогло.
Что ещё можно сделать?

Спасибо. Это ошибка компилятора MCC-ARM, она будет исправлена в ближайших релизах. Ошибка проявляется в экзотических случаях размещения статических переменных и непосредственно связана с присваиванием и использованием статической переменной в одном и том же выражении, содержащем арифметический условный оператор ("?:"). В качестве временного обхода, в файле Main.h можно переопределить макрос:
Код:
#define sSet(idx,v) StateFlg = ((int)(v))? StateFlg | (1 << (int)(idx)) : StateFlg & ~(1 << (int)(idx))

следующим образом:
Код:
#define sSet(idx,v)  do {unsigned int tmp = ((int)(v))? StateFlg | (1 << (int)(idx)) : StateFlg & ~(1 << (int)(idx)); StateFlg = tmp; } while(0)

В процессе проверки была обнаружена ошибка в присланном Вами проекте. В файле D5050501.h в строке 100 присутствует директива #endif, которой не соответствует никакой директивы #if или #ifdef.

Автор:  stranderer [ 2013-сен-03 22:16 ]
Заголовок сообщения:  Re: Внутренняя ошибка в CMC-ARM от ФИТОН-а

Спасибо! Эту ошибку я ещё не увидел, поскольку компиляция не доходит до этого места.

Тем временем наткнулся на ещё одну странную ситуацию в другом проекте (прилагаю):
При компиляции модуля CoDecD5010301 С-транслятор зацикливается, на мониторе ресурсов системы видно, как свободная память постепенно сокращается (будь её хоть 1.5 ГБ, хоть все 4), и когда её совсем не остаётся, выдаётся ошибка:

Компиляция Main.c,D5010301.c,CoDecD5010301.c,ActnD5010301.c
Fatal[C0] CoDecD5010301.c(1,0): (CPP) Not enough memory ("Token")

(иногда перед этим сообщением ещё выскакивает окошко "Abnormal programm termination")

При этом файл листинга данного модуля, разумеется, пустой, а файл препроцессора содержит только первую функцию модуля, да и то не до конца.
Я склонен считать, что это всё же ошибка среды, а не моя. Хотя и я, конечно, мог что-то не то наваять, потому что непросто мне переходить с Паскаля на С... :-)

Вложения:
Project-03.zip [36.22 КБ]
Скачиваний: 168

Автор:  ASavit [ 2013-сен-10 07:59 ]
Заголовок сообщения:  Re: Внутренняя ошибка в CMC-ARM от ФИТОН-а

stranderer писал(а):
При компиляции модуля CoDecD5010301 С-транслятор зацикливается, на мониторе ресурсов системы видно, как свободная память постепенно сокращается....

Спасибо. Это тоже ошибка компилятора и, так же, будет исправлена в ближайших релизах. Ошибка вызвана некорректным исходным кодом Вашей программы (см. CoDecD5010301.c, строка 119 - не хватает закрывающей скобки).

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