Перейти к содержанию
    

Keil C51 внезапно начал генерить странный код.

Quote

Ну, теоретически - можетбыть. Софт сунулся в сеть, получил инф "стоп-лафа" и все лечение пропало.

Если бы "лечение" пропало - было бы проще. Это видно сразу. Оно бы просто компиляться перестало. А тут именно тихий саботаж, который легко можно и не заметить. Хорошо, что у меня в прошивке есть цикл в котором переменная уменьшается на остаток от деления. И этот цикл стал вечным. Такое не заметить трудно.

Quote

Может быть просто несовместимость с конкретной ОС. Я компилировал на Win7/32. "Исправный-старый" код-листинг на какой ОС компилировался ?

Система та-же самая, что год назад, что сейчас. Не переставлялась. Win7/64.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Короче сейчас буду экспериментировать в виртуалке с русской/английской виндой, с доступом в инет и без доступа, с отматываением даты на год назад, и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я пока вижу завязку на опцию NOAREGS. Ну, еще подкорректировал бы соответствие типов-размерностей переменных.

Странно то, что компилятор не выдает warning на присваивание char = long.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 minutes ago, k155la3 said:

Я пока вижу завязку на опцию NOAREGS. Ну, еще подкорректировал бы соответствие типов-размерностей переменных.

Странно то, что компилятор не выдает warning на присваивание char = long.

 

Полгода назад тот-же самый компилятор, тот-же самый исходник, с теми-же самыми настройками (NOAREGS в частности) компилировал правильно.

Сейчас неправильно.

Т.е. за эти полгода произошло что-то, сделавшее компилятор нерабочим и не имеющее отношения к компилятору или исходникам - к версии компилятора, настройкам(NOAREGS в частности), типам-размерностям переменных, и т.д.

Буду искать. Но боюсь, что в будущем кейл можно будет использовать только в виртуалке, в английской винде, без доступа в инет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я вообще не понямаю какого рожна там происходит. Ну загрузили два 32-битных беззнаковых аргумента, вызвали функцию. От результа надо взять один байт. Что там за хрень вместо этого происходит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

43 minutes ago, VladislavS said:

Я вообще не понямаю какого рожна там происходит. Ну загрузили два 32-битных беззнаковых аргумента, вызвали функцию. От результа надо взять один байт. Что там за хрень вместо этого происходит?

В этом посте  В первом листинге, после вызова ф-ии LCALL  ?C?ULDIV, непонятно, как происходит возврат результата из нее.

ТС утверждает, что опции проекта, версия компилятора и ОС не изменялись.

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, VladislavS said:

Я вообще не понямаю какого рожна там происходит. Ну загрузили два 32-битных беззнаковых аргумента, вызвали функцию. От результа надо взять один байт. Что там за хрень вместо этого происходит?

По спецификации вызовов функция возвращает результат в регистрах R4-R7.

Функция ?C?ULDIV в регистрах R4-R7 возвращает результат деления, а в регистрах R0-R3 - остаток от деления.

Поэтому когда нам нужен остаток - компилятор сначала приводит возврат функции к спецификации, т.е. перекладывает R0-R3 в R4-R7, а дальше действует по накатанной - забирает один байт R7.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...