-
- Дык нет же указаний на то, что менял? И вообще, может, с
коэффициентами умножителя тактовой напутал, и от повышенной
скорости всё заглючило. Там много причин придумать можно. - SciFi(23.04.2026 23:13)
- Не-не-не. С тактовой всё ОК - от встроенного RC, там не ошибёшься. Менял - IDE. - Nikolay_Po(23.04.2026 23:42)
- Перенос из одной ИДЕ в другую. Каких-то ключиков не хватило. А
могло и чего дргого. Работает, не трожь, сломаешь. А бегать под
конец прожэкта с горелым задом, такое себе. - mse homjak(23.04.2026 23:19)
- А, ну да. Но на кортексах такие штуки диагностируются довольно
легко. Не знаю, как там в этом риске, но мне было бы интересно
докопаться до корня. - SciFi(23.04.2026 23:22)
- По всей видимости, компилятор генерил неподходящие инструкции из-за
того, что некоторых ключей не было. Падало как раз на выходе из
считалки, где было деление на 10. Но падало не там, где была
неверная инструкция, а чуть позже. Nikolay_Po(703 знак., 23.04.2026 23:51)
- Простите, не проснулся похоже... а все же, если misa убрать, изменится поведение? полезно было бы понять где собаки зарыты - Sergei_sR(24.04.2026 08:14)
- Так неинтересно. В кортексах обычно без труда можно было найти
именно ту инструкцию, на которой он спотыкался. А так лучше вообще
откатиться к проверенным тулзам, как справедливо заметил мсье
хомяк. - SciFi(24.04.2026 07:58)
- Компилятор - GCC15, но собран специально для WCH (из дистрибутыва
MRS2) и учитывает специфические расширения. Если оставить настройки
целевого ЦП в Eclipse по-умолчанию, компилятор вызывается с
ключами: Nikolay_Po(833 знак., 24.04.2026 11:45)
- Ну вот "lw a0,0(a0)", нужно отследить, что там в a0. Перед этим
туда прибавляется t1, а оно берётся из стека "lw t1,0(sp)". Может,
тупо адресная арифметика в исходниках кривая, это же Си, там есть
множество способов выстрелить себе в ногу. Или стек испорчен - тоже
бывает чаще, чем хотелось бы. - SciFi(24.04.2026 12:21)
- Проблема в том, что это место вызывается тысячи раз в секунду. И
лишь при некоторой смене состояния - уходит в исключение. Не
получается поймать. Nikolay_Po(325 знак., 24.04.2026 12:34)
- Насчёт illegal instruction - не знаю, после установки нужных ключей, исключения пропали. Проблема с работой программы нашлась - на какой-то из редакций, код обработчика прерывания ошибки I2C оказался сокращён - я его перенёс в другую функцию, а прерывание использовало прежнюю, которая не сбрасывала ошибку и не отключала прерывание. Nikolay_Po(155 знак., 24.04.2026 13:37)
- Проблема в том, что это место вызывается тысячи раз в секунду. И
лишь при некоторой смене состояния - уходит в исключение. Не
получается поймать. Nikolay_Po(325 знак., 24.04.2026 12:34)
- Ну вот "lw a0,0(a0)", нужно отследить, что там в a0. Перед этим
туда прибавляется t1, а оно берётся из стека "lw t1,0(sp)". Может,
тупо адресная арифметика в исходниках кривая, это же Си, там есть
множество способов выстрелить себе в ногу. Или стек испорчен - тоже
бывает чаще, чем хотелось бы. - SciFi(24.04.2026 12:21)
- Компилятор - GCC15, но собран специально для WCH (из дистрибутыва
MRS2) и учитывает специфические расширения. Если оставить настройки
целевого ЦП в Eclipse по-умолчанию, компилятор вызывается с
ключами: Nikolay_Po(833 знак., 24.04.2026 11:45)
- По всей видимости, компилятор генерил неподходящие инструкции из-за
того, что некоторых ключей не было. Падало как раз на выходе из
считалки, где было деление на 10. Но падало не там, где была
неверная инструкция, а чуть позже. Nikolay_Po(703 знак., 23.04.2026 23:51)
- А, ну да. Но на кортексах такие штуки диагностируются довольно
легко. Не знаю, как там в этом риске, но мне было бы интересно
докопаться до корня. - SciFi(23.04.2026 23:22)
- Дык нет же указаний на то, что менял? И вообще, может, с
коэффициентами умножителя тактовой напутал, и от повышенной
скорости всё заглючило. Там много причин придумать можно. - SciFi(23.04.2026 23:13)