[uquote="Zhuk72",url="/forum/viewtopic.php?p=3883872#p3883872"][uquote="Asmodey",url="/forum/viewtopic.php?p=3883858#p3883858"][uquote="Zhuk72",url="/forum/viewtopic.php?p=3883844#p3883844"]Гораздо проще было в исходниках сменить все uint... на unsigned[/uquote]
Каких-то нехороших последствий не последует? Просто заменить и все?[/uquote]
uint8_t = unsigned char
uint16_t = unsigned int
uint32_t = unsigned long
Левые без u будут signed.
Во всяком случае в Keil и Мплаб 8, 16 и 32-битные данным соответствуют именно char, int и long. IAR не использую, но скорее всего там так же будет.[/uquote]
Спасибо, работает. И после MPLAB мне так удобнее Лишний библиотечный файл не нужно подключать.
[uquote="Zhuk72",url="/forum/viewtopic.php?p=3883844#p3883844"]Были бы они такие прямо стандартные, не приходилось бы подключать отдельным хедером.[/uquote]Эти типы введены в стандарт C99, то есть, больше 20 лет назад! Вылезаем из танка!
[uquote="Zhuk72",url="/forum/viewtopic.php?p=3883844#p3883844"]А так был вопрос про вариант - ну, вот он вариант. Правильный или нет - другое дело.[/uquote]Переопределять стандартные типы данных - худшее из того что можно было посоветовать.
[uquote="Zhuk72",url="/forum/viewtopic.php?p=3883844#p3883844"]Гораздо проще было в исходниках сменить все uint... на unsigned... - минутное дело - чем выискивать вариант с подключением дополнительных заголовков.[/uquote]Это убивает на корню основной смысл для чего эти типы были введены в стандарт и применяются всеми разумными разработчиками.
[uquote="Asmodey",url="/forum/viewtopic.php?p=3883951#p3883951"]И после MPLAB мне так удобнее Лишний библиотечный файл не нужно подключать.[/uquote]Делать надо как правильно. Неправильно оно само получится.
[uquote="VladislavS",url="/forum/viewtopic.php?p=3883956#p3883956"][uquote="Asmodey",url="/forum/viewtopic.php?p=3883951#p3883951"]И после MPLAB мне так удобнее Лишний библиотечный файл не нужно подключать.[/uquote]Делать надо как правильно. Неправильно оно само получится.[/uquote]
То есть определение типов через файл stdint.h правильно, а все остальное нет? Ну что же, тогда буду привыкать цеплять к проектам stdint.h...
[uquote="Asmodey",url="/forum/viewtopic.php?p=3883977#p3883977"]То есть определение типов через файл stdint.h правильно,[/uquote]Правильно использование стандартных типов по назначению. Применение типов uintX_t сильно повышает переносимость кода.
[uquote="Asmodey",url="/forum/viewtopic.php?p=3883977#p3883977"]Ну что же, тогда буду привыкать цеплять к проектам stdint.h...[/uquote]Его не надо "цеплять к проектам". Он есть в системных заголовочных файлах любого компилятора. Он, кстати, в CMSIS подключается. Если в проекте подключен заголовочный файл микроконтроллера, то stdint.h автоматом подключен.
[uquote="VladislavS",url="/forum/viewtopic.php?p=3883956#p3883956"][uquote="Zhuk72",url="/forum/viewtopic.php?p=3883844#p3883844"]Гораздо проще было в исходниках сменить все uint... на unsigned... - минутное дело - чем выискивать вариант с подключением дополнительных заголовков.[/uquote]Это убивает на корню основной смысл для чего эти типы были введены в стандарт и применяются всеми разумными разработчиками.[/uquote]
Если предыдущие не были выведены из употребления и поддерживаются компиляторами, использование их не возбраняется.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Ну если вам осознанно хочется на вопрос "какой разрядности int на компиляторе X для микроконтроллера Y" чесать репу и делать непереносимый код, то запретить это не в моих силах.
[uquote="VladislavS",url="/forum/viewtopic.php?p=3883980#p3883980"]Если в проекте подключен заголовочный файл микроконтроллера, то stdint.h автоматом подключен.[/uquote]
А шут его знает, через какую опу тут заголовочный файл подключается, и который из них заголовочный для STM32F303CB. stm32f3xx.h, stm32f303xc.h и system_stm32f3xx.h из CMSIS добавил, #include "stm32f3xx.h" в main.c прописал, #define STM32F303xC в этом файле раскомментировал. И вот ХЗ, подключил я заголовочный файл в этой куче хрен знает чего или нет. Хрен знает чего навертели, да еще в самом IAR нихрена нет нужного, все приходится откуда-то скачивать да устанавливать, подключать-переподключать, да с непонятным результатом. Пойди, разбери чего и откуда еще нужно скачать и чего куда добавить. Теперь я понимаю, почему STM32 такие дешевые... Телушка - полушка, да рубль перевоз.
Избаловали народ кортексами. Раньше берёшь ARM, даташит на него и первым делом flashloader на внешнюю флэшку пишешь. Сейчас большинство и не знает что это такое. Заголовочный файл им трудно подключить
[uquote="VladislavS",url="/forum/viewtopic.php?p=3883980#p3883980"]Его не надо "цеплять к проектам". Он есть в системных заголовочных файлах любого компилятора. Он, кстати, в CMSIS подключается. Если в проекте подключен заголовочный файл микроконтроллера, то stdint.h автоматом подключен.[/uquote]
Я всегда полагал, что стандартные типы в Си не требуют ПЕРЕОПРЕДЕЛЕНИЯ. То есть отыскать на них typedef невозможно ни в каких хедерах, даже в тех, которые СРЕДА (а не компилятор) вставляет в проект автоматически.
А все (u)intx_t примитивно ПЕРЕОПРЕДЕЛЕНЫ (о чем кагбэ намекаэ буква t после подчеркивания) с целью ликвидации зависимости стандартных типов от разрядности платформы и произвола писателей компиляторов.
Поневоле позавидуешь тем, кто писал в шестнадцатеричных кодах в тетрадях в клеточку... У них хотя бы головы не болели за кучи мусора, которые нужно найти, скачать, подключить только для того, чтобы тактовый генератор настроить...
[uquote="КРАМ",url="/forum/viewtopic.php?p=3884137#p3884137"]А все (u)intx_t примитивно ПЕРЕОПРЕДЕЛЕНЫ (о чем кагбэ намекаэ буква t после подчеркивания)[/uquote]
Буква t после подчеркивания может вводить в заблуждение т.к., например, в C++ есть char8_t который ничем не отличается от unsigned char кроме того, что это отдельный тип
90% стандартных "плюшек" C/C++ требуют подключения какого-либо заголовочного файла. Так язык устроен. От этого они не перестают быть частью стандарта. Повторюсь, intX_t типы являются стандартными уже больше 20 лет со времён С99.
А все (u)intx_t примитивно ПЕРЕОПРЕДЕЛЕНЫ (о чем кагбэ намекаэ буква t после подчеркивания) с целью ликвидации зависимости стандартных типов от разрядности платформы и произвола писателей компиляторов.
Вы описание языка Си читали, а? Судя по словоблудию, которое тут развели, нет.
Типы потому и называются стандартными, что их размеры стандартизованы на всех платформах и компиляторах:
short - всегда 16 бит;
long - всегда 32 бита;
char - всегда 8 бит.
Размер int выбирается из соображений эффективности и удобства. Меньше 16 бит не встречал ни разу.
Для char не регламентирована его "знаковость", поэтому все (известные мне) компиляторы имеют опцию, указывающую как трактовать char.
VladislavS не сказал, что помимо XintY_t определяются их fast_ разновидности. И тогда наличие XintY_t становится логичным. Думаю, что XintY_t были сделаны для бОльшей мобильности программ, ведь существуют (существовали?) процессоры с разрядностью 18, 24 и 36 бит.
tonyk писал(а):short - всегда 16 бит;
long - всегда 32 бита;
char - всегда 8 бит.
имхо, не всегда.
Минимальный размер для char — 8 бит, для short и int — 16 бит, для long — 32 бита, для long long — 64 бита.
Желательно, чтобы тип int был таким целочисленным типом, с которым наиболее эффективно работает процессор. Это позволяет достигать высокой гибкости, например, все типы могут занимать 64 бита. Однако, есть популярные схемы, описывающие размеры целочисленных типов.[7]
На практике это означает, что char занимает 8 бит, а short 16 бит (также, как и их беззнаковые аналоги). int на большинстве современных платформ занимает 32 бита, а long long 64 бита. Длина long варьируется: для Windows это 32 бита, для UNIX-подобных систем — 64 бита.
чтобы вот эту мешанину систематизировать, все эти самые xxxx_t и были введены.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
вы сначала его тут выложите, а то ищешь стандарт, а находишь всегда его толкования.
по поводу стандартов тут баталии были ого-го какие! и про long я тоже думал, что он 32 бита всегда...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
вы сначала его тут выложите, а то ищешь стандарт, а находишь всегда его толкования.
по поводу стандартов тут баталии были ого-го какие! и про long я тоже думал, что он 32 бита всегда...[/uquote]
А в чём проблема скачать? Или кого-то в Гугле забанили?