|
Настройка GNU toolchain from ARM для STM32, типы данных |
|
|
|
Jan 21 2014, 07:35
|

Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978

|
Какие опции задать компилятору, что бы тип uint32_t соответствовал типу unsigned int, а не unsigned long ? В данный момент тип uint32_t приводит по ссылке в Код #if __have_long32 typedef signed long int32_t; typedef unsigned long uint32_t; #define __int32_t_defined 1
|
|
|
|
|
 |
Ответов
|
Jan 21 2014, 18:26
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
варнинг от функции printf, она пытается данный ей лонг конвертнуть в int, она же библиотечная и старинная, так получилось что в арме int == long, а в avr int == 16, потому int32 для avr - это лонг, да и вообще int это 16 бит, а 32 бита это long. напишите Код long i; printf("%i", i); и получите варнинг кстати а есть вариант в этой библиотеке Код printf("%l",i) ? скорее всего он не будет давать варнинга а вообще когда народ устал от путаницы с тем сколько бит int long и прочее, и появились int32_t типы, и коль вы встали на этот путь, то вам надо использовать тот же однозначно определенный вариант печати Код printf("%" PRIu32 "\n",i);
|
|
|
|
|
Jan 22 2014, 03:45
|

Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978

|
Цитата(Golikov A. @ Jan 21 2014, 22:26)  напишите Код long i; printf("%i", i); и получите варнинг да, есть варнинг Цитата(Golikov A. @ Jan 21 2014, 22:26)  кстати а есть вариант в этой библиотеке Код printf("%l",i) ? скорее всего он не будет давать варнинга в таком варианте сразу два предупреждения Код warning: conversion lacks type at end of format [-Wformat=] warning: too many arguments for format [-Wformat-extra-args] повторюсь, почему я создал тему: раньше пользовался кейлом, и там Код typedef unsigned int uint32_t; и никаких возражений на счет printf("%i\n",i); у компилятора не возникало сейчас перешел на бесплатный компилятор, в котором Код typedef unsigned long uint32_t; + варнинг. это то меня и смутило. причем в кейле определение uint32_t статично, а в бесплатном компиляторе определение зависит от дифайна #if __have_long32 который в свою очередь зависит от #elif __STDINT_EXP(LONG_MAX) == 0x7fffffff && !defined(__SPU__) и тд я подумал, может компилятору ключей каких то нехватает, что бы uint32_t определился как в кейле, для этого должно выполниться условия препроцессора Код #elif __STDINT_EXP(INT_MAX) == 0x7fffffffL typedef signed int int32_t; typedef unsigned int uint32_t; Цитата(scifi @ Jan 21 2014, 23:26)  Вы будете смеяться, но warning таки от компилятора :-) спасибо кэп  на запись printf("%" PRIu32 "\n",i); Код ../Sources/main.c:45:14: error: expected ')' before 'PRIu32' printf("%" PRIu32 "\n",i); ^ ../Sources/main.c:45:14: warning: spurious trailing '%' in format [-Wformat=]
Сообщение отредактировал k000858 - Jan 22 2014, 03:28
|
|
|
|
|
Jan 22 2014, 06:44
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(k000858 @ Jan 22 2014, 05:45)  Код ../Sources/main.c:45:14: error: expected ')' before 'PRIu32' printf("%" PRIu32 "\n",i); ^ ../Sources/main.c:45:14: warning: spurious trailing '%' in format [-Wformat=] Вы читайте все ответы Эти спецификаторы определены в файле inttypes.h Код #include <inttypes.h> Если пишете на C++, то надо еще предопределить символ __STDC_FORMAT_MACROS, например через CPPFLAGS += -D__STDC_FORMAT_MACROS в makefile.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 22 2014, 07:08
|

Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978

|
Цитата(Сергей Борщ @ Jan 22 2014, 10:44)  Вы читайте все ответы Эти спецификаторы определены в файле inttypes.h Код #include <inttypes.h> Если пишете на C++, то надо еще предопределить символ __STDC_FORMAT_MACROS, например через CPPFLAGS += -D__STDC_FORMAT_MACROS в makefile. а, точняк. забыл включить inttypes.h Код uint32_t i = 1; printf("%" PRIu32 "\n",i); в этом варианте варнинга нет
|
|
|
|
|
Jan 22 2014, 11:44
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата(k000858 @ Jan 22 2014, 11:08)  а, точняк. забыл включить inttypes.h Код uint32_t i = 1; printf("%" PRIu32 "\n",i); в этом варианте варнинга нет алелуя
|
|
|
|
Сообщений в этой теме
k000858 Настройка GNU toolchain from ARM для STM32 Jan 21 2014, 07:35 scifi Цитата(k000858 @ Jan 21 2014, 11:35) Каки... Jan 21 2014, 07:44 k000858 Цитата(scifi @ Jan 21 2014, 11:44) Зачем?... Jan 21 2014, 07:50  Сергей Борщ Цитата(k000858 @ Jan 21 2014, 09:50) Кодw... Jan 21 2014, 09:42 scifi К примеру, в lwip эта проблема решается так:
CODE/... Jan 21 2014, 07:57 k000858 Цитата(scifi @ Jan 21 2014, 11:57) К прим... Mar 20 2014, 00:47  scifi Цитата(k000858 @ Mar 20 2014, 04:47) Вот ... Mar 24 2014, 03:35   k000858 Цитата(scifi @ Mar 24 2014, 07:35) У вас ... Mar 24 2014, 04:41    scifi Цитата(k000858 @ Mar 24 2014, 08:41) файл... Mar 24 2014, 05:28     k000858 Цитата(scifi @ Mar 24 2014, 09:28) Ну вот... Mar 24 2014, 05:44      scifi Цитата(k000858 @ Mar 24 2014, 09:44) да п... Mar 24 2014, 06:26      Сергей Борщ Цитата(k000858 @ Mar 24 2014, 07:44) в за... Mar 24 2014, 07:50    mdmitry Цитата(k000858 @ Mar 24 2014, 08:41) ...
... Mar 24 2014, 06:19 VAI k000858, Вы предполагаете, что если Вы напишете
Ко... Jan 21 2014, 09:21 k000858 Цитата(VAI @ Jan 21 2014, 13:21) k000858,... Jan 21 2014, 09:42 k000858 и все таки я не понимаю, почему нет варнинга на
К... Jan 21 2014, 12:29 Golikov A. а есть варнинг на
Кодuint32_t i;
printf(... Jan 21 2014, 16:12 k000858 Цитата(Golikov A. @ Jan 21 2014, 20:12) а... Jan 21 2014, 16:49  scifi Цитата(k000858 @ Jan 21 2014, 20:49) хоте... Jan 21 2014, 17:51 k000858 вопрос остается открытым, не важно откуда я его за... Jan 21 2014, 17:53 scifi Цитата(Golikov A. @ Jan 21 2014, 22:26) в... Jan 21 2014, 19:26 Golikov A. ну как же не денется, денется конечно же...
просто... Jan 21 2014, 20:14 k000858 варнинга нет, это хорошо )
вы уж простите за мою д... Jan 22 2014, 13:23 scifi Цитата(k000858 @ Jan 22 2014, 17:23) ну т... Jan 22 2014, 15:06  k000858 Цитата(scifi @ Jan 22 2014, 19:06) И я та... Jan 22 2014, 15:12 Mihey_K Не вздумайте править библиотечные хидеры stdint.h,... Jan 26 2014, 02:29 k000858 Цитата(Mihey_K @ Jan 26 2014, 06:29) Не в... Feb 10 2014, 03:51 k000858 Т.е. компилятор пишет варнинги при использовании u... Mar 24 2014, 03:19 Сергей Борщ Цитата(k000858 @ Mar 24 2014, 05:19) хотя... Mar 24 2014, 03:42 k000858 ясно, значит настройки компилятора тут не причем.
... Mar 24 2014, 07:15
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|