|
Кросскомпиляторный код, BCC и GCC |
|
|
|
Apr 30 2009, 07:41
|

Частый гость
 
Группа: Участник
Сообщений: 149
Регистрация: 29-04-08
Из: Петербург
Пользователь №: 37 142

|
Вот такой вот код, Код inline uint32_t crc32_add( uint32_t crc, uint8_t byte ) { crc ^= byte; for (uint8_t i=0; i<8; i++) { if (crc & 1) { crc = (crc>>1) ^ CRC32_POLYNOME; } else { crc >>= 1; } } return crc; } скомпилирован для двух платформ: BorlandCC для ПК и GCC для AVR.... На разных платформах разные результаты выполнения. Какими словами уточнить код, чтобы компиляторы наконец договорились? Ещё два момента: я пока не знаю, кто из них на данный момент правильно работает. В борланде подключен \\avr\\include\\inttypes.h из WinAVR. Спасибо
Сообщение отредактировал Злодей - Apr 30 2009, 07:47
|
|
|
|
|
 |
Ответов
|
May 6 2009, 10:46
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(Злодей @ Apr 30 2009, 12:41)  На разных платформах разные результаты выполнения. Чем все закончилось? Так и не удалось найти причину? Очень любопытно...
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
May 7 2009, 16:03
|

Частый гость
 
Группа: Участник
Сообщений: 149
Регистрация: 29-04-08
Из: Петербург
Пользователь №: 37 142

|
Цитата(alx2 @ May 6 2009, 14:46)  Чем все закончилось? Так и не удалось найти причину? Очень любопытно... Ой как не хочется об этом вспоминать....  Проблема была в том, что когда пишешь вот так, это неправильно: Код uint32_t a; uint32_t b; /* ... */ a = b | ( 1 << 24 ); А когда единичке приписываешь UL всё становится хорошо и одинаково. Код uint32_t a; uint32_t b; /* ... */ a = b | ( 1UL << 24 ); Извините, растолковать что к чему не могу
|
|
|
|
|
May 8 2009, 10:28
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(Злодей @ May 7 2009, 21:03)  Проблема была в том, что когда пишешь вот так, это неправильно: Код uint32_t a; uint32_t b; /* ... */ a = b | ( 1 << 24 ); А когда единичке приписываешь UL всё становится хорошо и одинаково. Вы не поняли. Я говорю не об этом, а о коде функции, приведенном в первом сообщении этой темы. Здесь-то как раз все понятно - результат выражения в скобках зависит от размера типа int. Но в исходном сообщении нет ничего подобного, там все операции производятся над типами фиксированного размера! Да и вообще никакого оператора << там нет, из операций сдвига там только (crc>>1) и (crc >>= 1), что, по-моему, совершенно переносимо, и должно давать одинаковый результат...
Сообщение отредактировал alx2 - May 8 2009, 10:29
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
Сообщений в этой теме
Злодей Кросскомпиляторный код Apr 30 2009, 07:41 FormatCft Цитата(Злодей @ Apr 30 2009, 13:41) Вот т... Apr 30 2009, 07:44 MrYuran А результат всегда одинаковый в обоих случаях?
Код... Apr 30 2009, 08:03 Злодей Цитата(MrYuran @ Apr 30 2009, 12:03) А ре... Apr 30 2009, 08:09  MrYuran Цитата(Злодей @ Apr 30 2009, 12:09) Здесь... Apr 30 2009, 08:16 Злодей Вчера пытался компилировать в GCC без оптимизации ... Apr 30 2009, 08:47 MrYuran Цитата(Злодей @ Apr 30 2009, 12:47) Вчера... Apr 30 2009, 09:19 _Pasha Цитата(Злодей @ Apr 30 2009, 11:47) Вот э... Apr 30 2009, 09:40 Злодей Помогите, пожалуйста исправить ошибку "left s... Apr 30 2009, 09:46 _Pasha Цитата(Злодей @ Apr 30 2009, 12:41) Вот т... Apr 30 2009, 09:46 Злодей Цитата(Злодей @ Apr 30 2009, 13:46) Помог... Apr 30 2009, 10:04  _Pasha Цитата(Злодей @ Apr 30 2009, 13:04) Спаси... Apr 30 2009, 10:20 alx2 Цитата(Злодей @ Apr 30 2009, 12:41) Вот т... Apr 30 2009, 12:19 mdmitry Часто необходимо приведение типа внутри кода (это ... Apr 30 2009, 13:05 forever failure Цитата(mdmitry @ Apr 30 2009, 19:05) Част... Apr 30 2009, 14:49 mdmitry Цитата(forever failure @ Apr 30 2009, 18... Apr 30 2009, 20:47  Сергей Борщ Цитата(Злодей @ May 7 2009, 19:03) Извини... May 7 2009, 18:03 Злодей Дело в том, что код у меня - индийский
Эти сдви... May 8 2009, 10:59
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|