Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: нужно передать строку с замешанными данными
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Метценгерштейн
под линукс надо из кода выполнить
Цитата
system("i2cget -f -y 0 0x3a");


но значение 0x3a я хочу сделать переменной.

Первое, что приходит- это массив символов.
Цитата
char i2cset_str[] = {'i', '2', 'c', 's', 'e', 't', ' ', '-', 'f', ' ', '-', 'y', '0', 0x3a, 0x40, 0x27, '\0'};


Но не работает, и похоже, что не верно.

Как правильно делать?
smalcom
попробуйте sprintf
Метценгерштейн
пробую, спасибо. Может и получится.
andrew_b
Цитата(smalcom @ Feb 12 2016, 19:05) *
попробуйте sprintf
Не пробуйте. Никогда не используйте функции, в которых нет контроля выхода за границу буфера. Используйте snprintf.
jcxz
Цитата(andrew_b @ Feb 12 2016, 21:45) *
Не пробуйте. Никогда не используйте функции, в которых нет контроля выхода за границу буфера. Используйте snprintf.

Никогда не используйте snprintf, используйте _Printf() wink.gif
Метценгерштейн
подскажите компилятор наподобии Visual Studio, чтобы можно было на бряке встать и просмотреть значения переменных- мышку подводишь и видно. Тот же массив просмотреть. Можно онлайн.
jcxz
Цитата(Метценгерштейн @ Feb 13 2016, 01:44) *
подскажите компилятор наподобии Visual Studio, чтобы можно было на бряке встать и просмотреть значения переменных- мышку подводишь и видно. Тот же массив просмотреть. Можно онлайн.

IAR
smalcom
Цитата
подскажите компилятор наподобии Visual Studio

компилятор - это транслятор кода. VS - это IDE(интегррированная среда разработки). Если нужна IDE под линукс для C/C++, то из распространённых это KDevelop, Eclipse, Netbeans, QtCreator, Code::Blocks.
Метценгерштейн
я под виндой отлаживаюсь. Нужна IDE, кот. удобная в отладке, как VS. На платке под линуксом я тоже могу собрать gcc, но жутко неудобно там в блокноте писать и отлаживать код.
Хотелось бы под VS Си99 запустить. Но вроде как нельзя.
Огурцов
кокос может
студия сейчас тоже много может, по-моему даже гцц запускать, там и менюху с хоткеями уже под кокос переиначили
Метценгерштейн
Пока все тут- вопрос по теме-
не очень получается этот spintf заюзать

мне надо как-то так- это в отладке я вижу в вотче
Цитата
char str[40];
sprintf_s(str, "%s %s", "i2cset -f -y 0", "0x3a");


только вот вместо последнего 0x3a надо переменную подсунуть, которая имеет это значение. Как раз такой вывод меня устроит- как строку. Мне в команде system (... ) надо написать 0x3a.

решил
Цитата
sprintf_s(str, "%s 0x%x", "i2cset -f -y 0", 0x3a);
andrew_b
Цитата(jcxz @ Feb 12 2016, 23:37) *
Никогда не используйте snprintf, используйте _Printf() wink.gif

Код
[andrew@myhost ~]$ man _Printf
No manual entry for _Printf
SlavaV
почему не использовать конкатенацию (сложение) строк
Метценгерштейн
Цитата(SlavaV @ Feb 13 2016, 08:27) *
почему не использовать конкатенацию (сложение) строк

через sprintf все работает. Конкатенацию надо через malloc делать.
проблема была значение 0х3а перевести в строку "0x3a"
smalcom
Цитата
я под виндой отлаживаюсь.

Eclipse, Netbeans, QtCreator, Code::Blocks ))

jcxz
Цитата(andrew_b @ Feb 13 2016, 10:10) *
Код
[andrew@myhost ~]$ man _Printf
No manual entry for _Printf

Для IAR:
Код
extern "C" int _Printf(void *(*)(void *, int), void *, const char *, va_list *);
uint GrAPI::Print(int x, int y, char const *s, ...)
{
  va_list v;
  va_start(v, s);
  GrPrintData data;
  data.x = x;
  data.y = y;
  data.width_gap = 0;
  _Printf(PrintPutc, (void *)&data, s, &v);
  va_end(v);
  return data.width;
}

Для CCS подобная функция:
Код
#if !defined(NOFLOAT) && !defined(MINIMAL)
extern "C" int _printfi(char **_format, va_list _ap, void *_op,
  int (*_outc)(char, void *), int (*_outs)(char *, void *, int));
#elif defined(NOFLOAT)
extern "C" int _printfi_nofloat(char **_format, va_list _ap, void *_op,
  int (*_outc)(char, void *), int (*_outs)(char *, void *, int));
#elif defined(MINIMAL)
extern "C" int _printfi_minimal(char **_format, va_list _ap, void *_op,
  int (*_outc)(char, void *), int (*_outs)(char *, void *, int));
#endif

Возможности - намного больше чем у sprintf или snprintf. В run-time библиотеке IAR все функции семейства printf работают через _Printf()
Метценгерштейн
Пробую кодеблокс. Какой компилятор установить надо, чтобы из-под чтобы компилить код для железки арм Линукс? Само ядро я собирал линаро -gcc. Но вроде на сайте кодеблокс пишут,что нельзя для линукса линаро поставить.


Цитата(jcxz @ Feb 14 2016, 19:21) *
Для IAR:
Код
extern "C" int _Printf(void *(*)(void *, int), void *, const char *, va_list *);
uint GrAPI::Print(int x, int y, char const *s, ...)
{
  va_list v;
  va_start(v, s);
  GrPrintData data;
  data.x = x;
  data.y = y;
  data.width_gap = 0;
  _Printf(PrintPutc, (void *)&data, s, &v);
  va_end(v);
  return data.width;
}

Для CCS подобная функция:
Код
#if !defined(NOFLOAT) && !defined(MINIMAL)
extern "C" int _printfi(char **_format, va_list _ap, void *_op,
  int (*_outc)(char, void *), int (*_outs)(char *, void *, int));
#elif defined(NOFLOAT)
extern "C" int _printfi_nofloat(char **_format, va_list _ap, void *_op,
  int (*_outc)(char, void *), int (*_outs)(char *, void *, int));
#elif defined(MINIMAL)
extern "C" int _printfi_minimal(char **_format, va_list _ap, void *_op,
  int (*_outc)(char, void *), int (*_outs)(char *, void *, int));
#endif

Возможности - намного больше чем у sprintf или snprintf. В run-time библиотеке IAR все функции семейства printf работают через _Printf()

Так это на плюсах должен быть проект тогда.
zltigo
QUOTE (jcxz @ Feb 14 2016, 18:21) *
Возможности - намного больше чем у sprintf или snprintf. В run-time библиотеке IAR все функции семейства printf работают через _Printf()

Какая разница есть обертка или нет. _Printf() от этого менее монстральным не становится. С другой стороны его универсальности для 99% встроенных систем не требуется. Посему пользовать действительно заточенные под минимально необходимые возможности самописные "printf".
smalcom
Цитата
Но вроде на сайте кодеблокс пишут,что нельзя для линукса линаро поставить.

ставьте как удобно. потом в настройках среды выбираете какой компилятор хотите настроить и показываете ему где и как брать linaro.
MrYuran
Цитата(Метценгерштейн @ Feb 13 2016, 09:33) *
проблема была значение 0х3а перевести в строку "0x3a"

"0x%02X",value
Jenya7
а я делаю так
Код
ItoA(rtc.rtcHour, strbuf_hour);
ItoA(rtc.rtcMin, strbuf_min);
char strbuf_time[8] = "";
strcat(strbuf_time," ");
strcat(strbuf_time,strbuf_hour);
strcat(strbuf_time,":");
strcat(strbuf_time,strbuf_min);
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.