Цитата(Marser @ Dec 9 2010, 09:24)

Симулировал он действительно прекрасно, но при прошивке программы в контроллер умножение не работало.
hex в контроллер заливался тот же самый или с поддержкой ICD?
Цитата
Умножение не работало с разными числами. Проверял сгенерированный ассемблерный код, там был код умножения, а не сдвига.
Я говорил про описанный Вами случай x*2. Здесь компилятор оставит умножение только при отключённой оптимизации.
Цитата
Ассемблерный код, сгенерированный компилятором, я могу только посмотреть, но не менять. Вы знаете способ изменить этот ассемблерный код перед созданием hex файла? (кроме использования ассемблерной вставки в С - коде)
Если очень хочется, то можно скомпилить в ассемблерные листинги, поковыряться, а потом из них собрать hex.
Касательно умножений (и остальной арифметики) - они живут в библиотеках, отлажены и вылизаны, сорцы функций доступны. Если есть подозрение, ничто не мешает включить эти сорцы в проект и убедиться, что они работают как задумано.
Цитата(dimka76 @ Dec 9 2010, 09:33)

Так вот, может стека как раз и не хватало?
Вряд ли. Линкер использование стека отслеживает и при возможности переполнения ругается. Я бы в мап-файл заглянул, не накосячил ли линкер с расположением секций.
ТС не показал содержимое indicate(), но сомневаюсь, что там можно выбрать хотя бы хардварный стек. Если таки удалось, то это повод задуматься о замене контроллера на более разумный без таких ограничений - 31-уровневый стек - просто издевательство над полётом фантазии.