#51 Сьогодні 20:04:14

jokeR
Учасник
Зареєстрований: 2024-12-12
Повідомлень: 211

Re: Arduino Pro 8 МГц і бібліотека Servo

дофига не дофига, но я, например, окромя gcc пользовался еще codevision и iar. и как то кумарило, что попадались такие макросы, что свойственны конкретному компилятору.

smile
в сторонніх лібах може бути що завгодно.

Неактивний

#52 Сьогодні 20:24:27

Kino
Учасник
Зареєстрований: 2019-02-28
Повідомлень: 139

Re: Arduino Pro 8 МГц і бібліотека Servo

dimich пише:

У ардуіни ще свій макрос bit() . Який, доречі, правильніший за (1 << x) та _BV() з точки зору стандарту.

Посмотрел. Раскладывается в тот же #define bit(b) (1UL << (b)).

Неактивний

#53 Сьогодні 20:30:12

Kino
Учасник
Зареєстрований: 2019-02-28
Повідомлень: 139

Re: Arduino Pro 8 МГц і бібліотека Servo

jokeR пише:

в сторонніх лібах може бути що завгодно.

Не в либах дело. Например, для размещения данных во флеш, у gcc используется PROGMEM, у IAR-а __flash, у CVAVR просто flash. Свои директивы. Это же касается и асм вставок, надо писать именно так, как хочет конкретный компилятор, и пофиг что у другого по другому, они никогда не будут совместимы в этом плане.

Неактивний

#54 Сьогодні 20:30:46

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 873

Re: Arduino Pro 8 МГц і бібліотека Servo

Kino пише:

Посмотрел. Раскладывается в тот же #define bit(b) (1UL << (b)).

1UL. В avr-libc просто 1.

Неактивний

#55 Сьогодні 20:38:18

Kino
Учасник
Зареєстрований: 2019-02-28
Повідомлень: 139

Re: Arduino Pro 8 МГц і бібліотека Servo

dimich пише:
Kino пише:

Посмотрел. Раскладывается в тот же #define bit(b) (1UL << (b)).

1UL. В avr-libc просто 1.

та дурня. UL это просто unsigned long, т.е. захватывает 4 байта. Если я напишу 1ULL это будет восемь байт, то шо, я еще круче?

Неактивний

#56 Сьогодні 20:46:05

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 873

Re: Arduino Pro 8 МГц і бібліотека Servo

Kino пише:

Не в либах дело. Например, для размещения данных во флеш, у gcc используется PROGMEM

В gcc є підтримка named address spaces (ISO/IEC DTR 18037), так що в C __flash працює (для читання генерується lpm). В arduino, яке базується на C++, такого не буде.

Kino пише:

Это же касается и асм вставок, надо писать именно так, как хочет конкретный компилятор, и пофиг что у другого по другому, они никогда не будут совместимы в этом плане.

Бо inline assembler не є частиною стандарту, це розширення конкретного компілятора.

Неактивний

#57 Сьогодні 20:51:52

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 873

Re: Arduino Pro 8 МГц і бібліотека Servo

Kino пише:

та дурня. UL это просто unsigned long, т.е. захватывает 4 байта. Если я напишу 1ULL это будет восемь байт, то шо, я еще круче?

Суть не в long, а в unsigned. Поведінка (1 << 15) при 16-бітному int не визначена стандартом. Те ж саме з (1 << 31) на платформах з 32-бітним int.

Неактивний

#58 Сьогодні 20:55:30

Kino
Учасник
Зареєстрований: 2019-02-28
Повідомлень: 139

Re: Arduino Pro 8 МГц і бібліотека Servo

dimich пише:

В gcc є підтримка named address spaces (ISO/IEC DTR 18037), так що в C __flash працює (для читання генерується lpm). В arduino, яке базується на C++, такого не буде.

Та блин, эти стандарты уже так разрослись и отличаются, что уже не уследишь. )) Например, под тот же esp32, если написал достаточно объемный проект на родном фреймворке esp-idf, то адаптировать, чтобы он собрался на фрейме arduino тот еще гемор, проще переписать заново.

Неактивний

#59 Сьогодні 20:58:21

Kino
Учасник
Зареєстрований: 2019-02-28
Повідомлень: 139

Re: Arduino Pro 8 МГц і бібліотека Servo

dimich пише:

Поведінка (1 << 15) при 16-бітному int не визначена стандартом.

За стандарт не скажу, честно не знаю. Но помню книжка писала, что если не указано явно unsigned, то по умолчанию переменная всегда signed.

Неактивний

#60 Сьогодні 21:04:50

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 873

Re: Arduino Pro 8 МГц і бібліотека Servo

Kino пише:

Та блин, эти стандарты уже так разрослись и отличаются, что уже не уследишь. ))

Стандартів для мов програмування не так уже й багато. Але так, вендори заліза клепають свої фреймворки з велосипедами на костилях. Тут нічого не поробиш, се ля ві.

Неактивний

#61 Сьогодні 21:10:38

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 873

Re: Arduino Pro 8 МГц і бібліотека Servo

Kino пише:

За стандарт не скажу, честно не знаю. Но помню книжка писала, что если не указано явно unsigned, то по умолчанию переменная всегда signed.

Саме так. А при зсуві signed:

The result of E1 << E2 is E1 left-shifted E2 bit positions; ... If E1 has a signed type and nonnegative value, and E1 × 2^E2 is representable in the result type, then that is the resulting value; otherwise, the behavior is undefined.

6.5.7 Bitwise shift operators

Остання редакція dimich (Сьогодні 21:11:31)

Неактивний

#62 Сьогодні 21:23:07

Kino
Учасник
Зареєстрований: 2019-02-28
Повідомлень: 139

Re: Arduino Pro 8 МГц і бібліотека Servo

dimich пише:

Саме так. А при зсуві signed:

Хм. Надо почитать, никогда не задавался этим вопросом. Всегда казалось, что сдвиг это команда LSL (LSR) с установкой флага переноса и этому флагу ваще побоку знаковое число или нет, просто ячейка, что выпадает переносится во флаг и по нему уже идет анализ установлен был бит или нет. Понятно что по этому же флагу (carry) определяется знак, но в случае "обычного" сдвига как бы зачем?

Остання редакція Kino (Сьогодні 21:30:43)

Неактивний

#63 Сьогодні 21:35:38

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 873

Re: Arduino Pro 8 МГц і бібліотека Servo

Kino пише:

Всегда казалось, что сдвиг это команда LSL (LSR) с установкой флага переноса

Це вже деталі імплементації для конкретної архітектури. Я маю на увазі з точки зору стандарту мови програмування в загальному. Він нічого "не знає" про біти, флаги та інструкції.

Остання редакція dimich (Сьогодні 21:37:15)

Неактивний

#64 Сьогодні 21:44:40

Kino
Учасник
Зареєстрований: 2019-02-28
Повідомлень: 139

Re: Arduino Pro 8 МГц і бібліотека Servo

dimich пише:

Я маю на увазі з точки зору стандарту мови програмування в загальному. Він нічого "не знає" про біти, флаги та інструкції.

Ну в целом логично, если число знаковое, то он не понимает как можно сдвинуть знак без самого, собственно, числа.

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму