|
Ошибка IAR или чтото еще? |
|
|
|
 |
Ответов
|
Dec 18 2006, 13:15
|
Местный
  
Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526

|
Цитата(aesok @ Dec 18 2006, 13:06)  Показывайте код. Вот такой код: unsigned long int temp = INJ_time * data_temp_struct.FREQ * PRODUCTIVITY / 20000; тип INJ_time - unsigned long int. Эта переменная локальная. PRODUCTIVITY - константа Так вот, переменная temp размещалась компилятором в регистрах и все было плохо Теперь я переменную temp сделал членом локальной структуры data_temp_struct Т.о. она стала размещаться в памяти а не в регистрах. Вот с этого все и заработало. data_temp_struct.temp = INJ_time * data_temp_struct.FREQ * PRODUCTIVITY / 20000;
|
|
|
|
|
Dec 18 2006, 14:48
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(Sergio66 @ Dec 18 2006, 13:15)  Вот такой код: unsigned long int temp = INJ_time * data_temp_struct.FREQ * PRODUCTIVITY / 20000; тип INJ_time - unsigned long int. Эта переменная локальная. PRODUCTIVITY - константа Так вот, переменная temp размещалась компилятором в регистрах и все было плохо
Теперь я переменную temp сделал членом локальной структуры data_temp_struct Т.о. она стала размещаться в памяти а не в регистрах. Вот с этого все и заработало. data_temp_struct.temp = INJ_time * data_temp_struct.FREQ * PRODUCTIVITY / 20000; Ну, так все правильно. Компилятор перед генерацией производит свертку констант, т.е. вычисляет значение PRODUCTIVITY / 20000. Естественно, оно будет вычисленно неточно. Поставьте в выражении скобки в нужных местах. Еще советую объявить константы как long, тогда погрешность в вычислении уменьшится.
|
|
|
|
|
Dec 18 2006, 15:01
|
Местный
  
Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526

|
Цитата(_Bill @ Dec 18 2006, 14:48)  Цитата(Sergio66 @ Dec 18 2006, 13:15)  Вот такой код: unsigned long int temp = INJ_time * data_temp_struct.FREQ * PRODUCTIVITY / 20000; тип INJ_time - unsigned long int. Эта переменная локальная. PRODUCTIVITY - константа Так вот, переменная temp размещалась компилятором в регистрах и все было плохо
Теперь я переменную temp сделал членом локальной структуры data_temp_struct Т.о. она стала размещаться в памяти а не в регистрах. Вот с этого все и заработало. data_temp_struct.temp = INJ_time * data_temp_struct.FREQ * PRODUCTIVITY / 20000;
Ну, так все правильно. Компилятор перед генерацией производит свертку констант, т.е. вычисляет значение PRODUCTIVITY / 20000. Естественно, оно будет вычисленно неточно. Поставьте в выражении скобки в нужных местах. Еще советую объявить константы как long, тогда погрешность в вычислении уменьшится. А что, если переменная размещена не в регистрах, а в памяти, свертка констант не производится? Или это происходит как то иначе? Я ведт ничего не поменял, просто добился иного размещения в памяти переменной!!! И никаких скобок.И без них все заработало. Нет! Дело не в этом!!!
|
|
|
|
|
Dec 18 2006, 15:28
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(Sergio66 @ Dec 18 2006, 15:01)  А что, если переменная размещена не в регистрах, а в памяти, свертка констант не производится? Или это происходит как то иначе? Я ведт ничего не поменял, просто добился иного размещения в памяти переменной!!! И никаких скобок.И без них все заработало. Нет! Дело не в этом!!! Послушайте! :-) Вам предлагают дело - записать формулу ПРАВИЛЬНО. Разбираться в особенностях компилятора в случае неправильной записи - очень неблагодарное дело. А еще можно начать разбираться в особенностях различных компиляторов. Путь в никуда. Меня такие вещи давно не беспокоят - побольше скобок и преобразования типов. И ффсе!
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Dec 18 2006, 15:45
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(Dog Pawlowa @ Dec 18 2006, 19:28)  Послушайте! :-) Вам предлагают дело - записать формулу ПРАВИЛЬНО. Разбираться в особенностях компилятора в случае неправильной записи - очень неблагодарное дело. А еще можно начать разбираться в особенностях различных компиляторов. Путь в никуда. Меня такие вещи давно не беспокоят - побольше скобок и преобразования типов. И ффсе!  Сказанно, если размещать переменную локально, не вычисляется, если глобально - вычислятся - при чем тут скобки???
--------------------
|
|
|
|
|
Dec 18 2006, 16:46
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(prottoss @ Dec 18 2006, 15:45)  Сказанно, если размещать переменную локально, не вычисляется, если глобально - вычислятся - при чем тут скобки??? 1. Было сказано так "побольше скобок И ПРЕОБРАЗОВАНИЯ ТИПОВ". 2. Ообще-тоавтор он мог бы разместить здесь ассемблерный текст и гадание на гуще не состоялось бы. 2. Видел подобный случай - я работал под IAR, клиент стал компилировать под ICC. Результат усреднения значений АЦП считался по разному. Именно из-за особенностей работы компилятора в случае некорректного написания программы. И что? И ничего.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Dec 18 2006, 17:08
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(Dog Pawlowa @ Dec 18 2006, 20:46)  Цитата(prottoss @ Dec 18 2006, 15:45)  Сказанно, если размещать переменную локально, не вычисляется, если глобально - вычислятся - при чем тут скобки???
1. Было сказано так "побольше скобок И ПРЕОБРАЗОВАНИЯ ТИПОВ". Это было сказанно, вернее посоветованна, Вами, и товарищем aesok. Смысл же вопроса автора топика был именно в том, что сказал я - если размещать переменную локально, не вычисляется, если глобально - вычислятся , при чем здесь cкобки, позвольте? У меня, в данный момент, есть тоже подобный фокус в программе, которой сейчас занимаюсь. Если обсуждаемая сдесь проблема не решится, поделюсь своей...
--------------------
|
|
|
|
|
Dec 18 2006, 18:48
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(prottoss @ Dec 18 2006, 17:08)  Цитата(Dog Pawlowa @ Dec 18 2006, 20:46)  Цитата(prottoss @ Dec 18 2006, 15:45)  Сказанно, если размещать переменную локально, не вычисляется, если глобально - вычислятся - при чем тут скобки???
1. Было сказано так "побольше скобок И ПРЕОБРАЗОВАНИЯ ТИПОВ". Это было сказанно, вернее посоветованна, Вами, и товарищем aesok. Смысл же вопроса автора топика был именно в том, что сказал я - если размещать переменную локально, не вычисляется, если глобально - вычислятся , при чем здесь cкобки, позвольте? У меня, в данный момент, есть тоже подобный фокус в программе, которой сейчас занимаюсь. Если обсуждаемая сдесь проблема не решится, поделюсь своей... Видимо, Вы не поняли смысла того, что хотел сказать я.  Если есть малейшая возможность, что компилятор "спровоцирован" некорректным текстом, то лучше эту возможность исключить. Цитата(Oldring @ Dec 18 2006, 17:27)  Цитата(Dog Pawlowa @ Dec 18 2006, 15:28)  Вам предлагают дело - записать формулу ПРАВИЛЬНО.
Все записано правильно. Но нужно бы еще выяснить, какие диапазоны переменных и чему точно равны константы. Тогда мы по разному понимает слово "правильно". Я включал в это понятие учет возможности переполнения и максимальной независимости от констант. А Вы - нет?
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Dec 18 2006, 19:08
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(Dog Pawlowa @ Dec 18 2006, 18:48)  Тогда мы по разному понимает слово "правильно". Я включал в это понятие учет возможности переполнения и максимальной независимости от констант. А Вы - нет?  Дело в том, что Билл написал просто чепуху про "естественную" свертку целочисленных констант перед вычислением выражения, а Вашего предложения я вообще почему-то не вижу в истории переписки. Так как так и не была озвучена информация про диапазоны операндов, хотелось бы все-таки увидеть, что именно Вы считаете "правильной" записью данного выражения, если это понятие "правильности" отличется от формальной правильности. Хотелось бы также узнать Ваше мнение по следующему вопросу: существует ли с точки зрения стандарта языка программирования С какая-либо разница между выражениями Код a * b * c / d и Код ((a * b) * c) / d ? И, кстати, считаете ли Вы что компилятор имеет право выражение Код a = b * 2 / 3; заменить на Код a = 0; ?
--------------------
Пишите в личку.
|
|
|
|
Сообщений в этой теме
Sergio66 Ошибка IAR или чтото еще? Dec 18 2006, 12:47    aesok Опишите проблемму полностью:
Как переменые и стру... Dec 18 2006, 15:18     Sergio66 Цитата(Dog Pawlowa @ Dec 18 2006, 15:28) ... Dec 18 2006, 15:44          singlskv Цитата(Oldring @ Dec 18 2006, 19:08) Дело... Dec 18 2006, 19:31          _Bill Цитата(Oldring @ Dec 18 2006, 19:08) Цита... Dec 20 2006, 15:06           Oldring Цитата(_Bill @ Dec 20 2006, 15:06) Код b ... Dec 20 2006, 16:30   Oldring Цитата(_Bill @ Dec 18 2006, 14:48) Ну, та... Dec 18 2006, 17:27 singlskv Цитата(Sergio66 @ Dec 18 2006, 12:47) Сто... Dec 18 2006, 16:11 Oldring Ответ прост. До тех пор, пока результат вычисления... Dec 18 2006, 19:38 singlskv Цитата(Oldring @ Dec 18 2006, 19:38) Отве... Dec 18 2006, 19:53 Dog Pawlowa Цитата(Oldring @ Dec 18 2006, 19:38) Отве... Dec 18 2006, 20:31  Oldring Цитата(Dog Pawlowa @ Dec 18 2006, 20:23) ... Dec 18 2006, 20:37  prottoss Цитата(Dog Pawlowa @ Dec 19 2006, 00:31) ... Dec 18 2006, 20:43   Oldring Цитата(prottoss @ Dec 18 2006, 20:43) Выр... Dec 18 2006, 21:14   singlskv Цитата(prottoss @ Dec 18 2006, 20:43) Выр... Dec 18 2006, 21:18   Dog Pawlowa Цитата(prottoss @ Dec 18 2006, 20:43) Вы ... Dec 19 2006, 09:49    Sergio66 [/quote]
Дуру? Отчасти
А на конкретный вопрос -... Dec 19 2006, 11:57     Oldring Цитата(Sergio66 @ Dec 19 2006, 11:57) Рез... Dec 19 2006, 14:44      Sergio66 Цитата(Oldring @ Dec 19 2006, 15:44) Цита... Dec 19 2006, 15:15       Dog Pawlowa Цитата(Sergio66 @ Dec 19 2006, 15:15) Да ... Dec 19 2006, 19:10     Dog Pawlowa Цитата(Sergio66 @ Dec 19 2006, 11:57) Был... Dec 19 2006, 19:24 Oldring Не совсем.
1. Включение оптимизации самой по себе... Dec 18 2006, 20:08 GDI Была у меня похожая проблема, правда, у меня порти... Dec 19 2006, 13:32 singlskv автар
продемонстрируйте свое искуство, так сказать... Dec 19 2006, 19:18 Oldring int расширяется до long до умножения. Потом должна... Dec 19 2006, 19:50 Sergio66 Цитата(Oldring @ Dec 19 2006, 19:50) int ... Dec 20 2006, 13:33  Oldring Цитата(Sergio66 @ Dec 20 2006, 13:33) 1. ... Dec 20 2006, 14:13 Serg79 Sergio66 Ты сдесь воду то не баламуть а приведи но... Dec 20 2006, 15:22 prottoss Пока Sergio66 молчит, задам я свой вопрос, потому ... Dec 20 2006, 16:15 prottoss Мда... Умные речи о значимости скобок не помогли..... Dec 20 2006, 17:32 Dog Pawlowa Цитата(prottoss @ Dec 20 2006, 17:32) Мда... Dec 20 2006, 17:54  prottoss Цитата(Dog Pawlowa @ Dec 20 2006, 21:54) ... Dec 20 2006, 18:05   singlskv Цитата(prottoss @ Dec 20 2006, 18:05) Я с... Dec 20 2006, 19:29    prottoss Цитата(singlskv @ Dec 20 2006, 23:29) Pro... Dec 20 2006, 20:04     Oldring Цитата(prottoss @ Dec 20 2006, 20:04) В п... Dec 20 2006, 20:09      prottoss Цитата(Oldring @ Dec 21 2006, 00:09) Ключ... Dec 20 2006, 20:23 Oldring Чтобы не напрягать попусту наши извилины скомпилир... Dec 20 2006, 18:57 prottoss Цитата(Oldring @ Dec 20 2006, 22:57) Чтоб... Dec 20 2006, 19:12 Oldring Замечательно, где еще прописывается значение Pulse... Dec 20 2006, 19:19 prottoss Цитата(Oldring @ Dec 20 2006, 23:19) Заме... Dec 20 2006, 19:26 Oldring Я конечно имел в виду дизассемблер, в котором изме... Dec 20 2006, 19:28 Oldring Да, не забудьте убедиться, что функция после преры... Dec 20 2006, 19:34 Oldring Пожалуйста, приведите два варианта кода отдельно -... Dec 20 2006, 20:28 prottoss Цитата(Oldring @ Dec 21 2006, 00:28) Пожа... Dec 20 2006, 20:43 Oldring Ну так а когда в нерабочем варианте вызывается фун... Dec 20 2006, 20:45 prottoss Цитата(Oldring @ Dec 21 2006, 00:45) Ну т... Dec 20 2006, 20:53 Oldring Только этот вариант все равно не должен компилиров... Dec 20 2006, 21:02 prottoss Цитата(Oldring @ Dec 21 2006, 01:02) Толь... Dec 21 2006, 17:09  Dog Pawlowa Цитата(prottoss @ Dec 21 2006, 17:09) Все... Dec 21 2006, 17:39   prottoss Цитата(Dog Pawlowa @ Dec 21 2006, 21:39) ... Dec 21 2006, 18:04    Dog Pawlowa Цитата(prottoss @ Dec 21 2006, 18:04) А в... Dec 21 2006, 18:44     prottoss Цитата(Dog Pawlowa @ Dec 21 2006, 22:44) ... Dec 21 2006, 19:02      defunct Цитата(prottoss @ Dec 21 2006, 19:02) Да ... Dec 21 2006, 20:33       Serg79 Цитата(defunct @ Dec 21 2006, 20:33) Насч... Dec 22 2006, 13:29       prottoss Цитата(defunct @ Dec 22 2006, 00:33) Цита... Dec 22 2006, 14:57        defunct Цитата(prottoss @ Dec 22 2006, 14:57) Что... Dec 22 2006, 16:20         Wild007 2 defunct
ЦитатаВы ставите в противовес JTAG... Dec 22 2006, 17:02         prottoss Цитата(defunct @ Dec 22 2006, 20:20) Цита... Dec 22 2006, 17:05          defunct Цитата(prottoss @ Dec 22 2006, 17:05) Чит... Dec 22 2006, 17:25  singlskv Цитата(prottoss @ Dec 21 2006, 17:09) Уве... Dec 21 2006, 19:47 WHALE [/quote]
В начале программы забивайте весь отведен... Dec 21 2006, 22:05 singlskv Цитата(WHALE @ Dec 21 2006, 22:05) Цитата... Dec 21 2006, 22:14
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|