Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
Про С вопрос.
Отправлено
Artem-1.6E-19
13 октября 2008 г. 17:53
#define LWIP_PLATFORM_DIAG(xyz) {char tmpbuf2[225];sprintf(tmpbuf2,xyz );print_dbg(tmpbuf2);}
#define LWIP_DEBUGF(debug,x) do { \
if ( A>B) \
{ LWIP_PLATFORM_DIAG(x); }
} while(0)
LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | 3, ("asdf= %x\n",1234));
предпроцессор все это разворачивает в
do { if ( ((0x80U | 0x40U | 3) & 0x80U) && ((0x80U | 0x40U | 3) & (0x80U|0x40U|0x20U|0x10U)) && ((s16_t)((0x80U | 0x40U | 3) & 0x03) >= 0x03)) { {char tmpbuf2[225]; sprintf(tmpbuf2,("asdf= %x\n",1234) );print_dbg(tmpbuf2);}; if ((0x80U | 0x40U | 3) & 0x08U) { while(1); } } } while(0);
Самое непонятное в этом, sprintf(tmpbuf2,("asdf= %x\n",1234) ); как оно должно работать?
(это все gcc)
Составить ответ
|
Вернуться на конференцию
Ответы
☞ ☞ Главная дефекационная машина (MBedder) ☞ ☞
-
дристательныйAVR
(21.10.2008 13:11:18
85.21.155.153
,
пустое
,
картинка
)
#define zzz "asdf=%x\n",1234
-
Vit
(13.10.2008 19:27:4
10.0.0.3,83.170.240.226
, 82 байт)
Ещё в голову пришло: можыть, sprintf у них там не вызов функции, а то же где-нить дефайном объявлен?
-
Сидоргек
(13.10.2008 18:56:35
89.209.87.196
,
пустое
)
Нет. sprintf в libc находится, и честно вызывается.
-
Artem-1.6E-19
(13.10.2008 19:01:36
209.160.64.220
, 415 байт)
print_dbg == printf в системе? если да то заменить sprintf(tmpbuf,xyz) на printf x
-
ы
(13.10.2008 19:10:0
80.92.98.211
,
пустое
)
print_dbg просто строку выводи в UART.
-
Artem-1.6E-19
(13.10.2008 19:13:11
209.160.64.220
,
пустое
)
это я понял, а printf у тебя куда выводит?
-
ы
(13.10.2008 19:14:30
80.92.98.211
,
пустое
)
МЫСЛЬ!!!
-
Artem-1.6E-19
(13.10.2008 19:23:49
209.160.64.220
,
пустое
)
может так? #define LWIP_PLATFORM_DIAG(xyz) printf xyz
-
ы
(13.10.2008 19:18:56
80.92.98.211
,
пустое
)
Разобрался. Просто сам себя перехитрил.
-
Артем
(14.10.2008 15:01:41
209.160.64.220
,
пустое
)
т.е. printf xyz
-
ы
(13.10.2008 19:10:28
80.92.98.211
,
пустое
)
vc6 такое даже не компилит
-
ы
(13.10.2008 18:11:2
80.92.98.211
,
пустое
)
НавернОе внешние скобки в ("asdf= %x\n",1234) это для препроцессора, что бы интерпретировал выражение как один параметр. В sprintf передаётся "asdf= %x\n",1234 без скобок
-
Сидоргек
(13.10.2008 18:04:51
89.209.87.196
,
пустое
)
Со скобками передается. Тот вывод, что я приводил, уже после предпроцессора.
-
Artem-1.6E-19
(13.10.2008 18:29:58
209.160.64.220
, 589 байт)
видимо нужно сконфигурить эти дефайны под свой компилер
-
ы
(13.10.2008 18:36:43
80.92.98.211
, 413 байт)
Через __VA_ARGS__ получилось. Но почему-то кажется что должен быть способ безе переколбасивания всего LwIP
-
Artem-1.6E-19
(13.10.2008 19:22:38
209.160.64.220
,
пустое
)
видимо ключ в "Но как у атмеловцев оно работало" на ихнем компилере как то работало, вобщем есть факт не переносимости, либо надо объявлять свой дефайн как я выше написал через printf
-
ы
(13.10.2008 19:24:54
80.92.98.211
,
пустое
)
Элементарно. Оно у них не работало. :)
-
Artem-1.6E-19
(13.10.2008 23:10:8
212.115.235.8
,
пустое
)
а вот в моем GCC __VA_ARGS__ не знает :( (gcc-sh4)
-
ы
(13.10.2008 19:26:32
80.92.98.211
,
пустое
)
Не пашет.
-
Artem-1.6E-19
(13.10.2008 18:48:24
209.160.64.220
, 372 байт)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 63:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru