Цитата(NewMaestro @ Jan 22 2009, 11:09)

Верно. Так работает.
Так работает или не работает ? Вы пожалуйста определитесь !
Цитата
На самом деле моя константа определяется не числом а выражением также состоящим из констант.
Насколько я вижу из вашего кода, выражение о котором Вы упоминаете
Код
w = (unsigned short)((unsigned long)CONST1 * x / CONST2 + 1);
никак не может быть константным, поскольку в нем присутвует переменная unsigned short x.
Дело в том что нужно понимать, что если выраженние состоит из констант тоесть по сути является константным для программы, то его результат получает препроцессор перед компиляцией, а когда выражение не является константным, то его результат вычисляется уже в процессе выполнения самой программы. В таких случаях, возможно даже придется подключать библиотеку математических функций. Или Вы думаете ATmega168 имеет в наборе команд ассемблера операции деления ?
В любом случае - определитесь для начала c выражением в котором Вы выполняеете вычисления, потом в размере и знаке каждого значения выражения.