|
Ошибка 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кобки, позвольте? У меня, в данный момент, есть тоже подобный фокус в программе, которой сейчас занимаюсь. Если обсуждаемая сдесь проблема не решится, поделюсь своей...
--------------------
|
|
|
|
Сообщений в этой теме
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        Dog Pawlowa Цитата(prottoss @ Dec 18 2006, 17:08) Цит... Dec 18 2006, 18:48         Oldring Цитата(Dog Pawlowa @ Dec 18 2006, 18:48) ... Dec 18 2006, 19:08          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
|
|
|