реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> нужно передать строку с замешанными данными
Метценгерштейн
сообщение Feb 12 2016, 14:32
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



под линукс надо из кода выполнить
Цитата
system("i2cget -f -y 0 0x3a");


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

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


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

Как правильно делать?
Go to the top of the page
 
+Quote Post
smalcom
сообщение Feb 12 2016, 15:05
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



попробуйте sprintf
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Feb 12 2016, 15:21
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



пробую, спасибо. Может и получится.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Feb 12 2016, 15:45
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(smalcom @ Feb 12 2016, 19:05) *
попробуйте sprintf
Не пробуйте. Никогда не используйте функции, в которых нет контроля выхода за границу буфера. Используйте snprintf.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 12 2016, 19:37
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(andrew_b @ Feb 12 2016, 21:45) *
Не пробуйте. Никогда не используйте функции, в которых нет контроля выхода за границу буфера. Используйте snprintf.

Никогда не используйте snprintf, используйте _Printf() wink.gif
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Feb 12 2016, 19:44
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



подскажите компилятор наподобии Visual Studio, чтобы можно было на бряке встать и просмотреть значения переменных- мышку подводишь и видно. Тот же массив просмотреть. Можно онлайн.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 12 2016, 20:05
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



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

IAR
Go to the top of the page
 
+Quote Post
smalcom
сообщение Feb 12 2016, 20:21
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



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

компилятор - это транслятор кода. VS - это IDE(интегррированная среда разработки). Если нужна IDE под линукс для C/C++, то из распространённых это KDevelop, Eclipse, Netbeans, QtCreator, Code::Blocks.
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Feb 12 2016, 20:36
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



я под виндой отлаживаюсь. Нужна IDE, кот. удобная в отладке, как VS. На платке под линуксом я тоже могу собрать gcc, но жутко неудобно там в блокноте писать и отлаживать код.
Хотелось бы под VS Си99 запустить. Но вроде как нельзя.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Feb 12 2016, 20:41
Сообщение #10


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



кокос может
студия сейчас тоже много может, по-моему даже гцц запускать, там и менюху с хоткеями уже под кокос переиначили
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Feb 12 2016, 21:13
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Пока все тут- вопрос по теме-
не очень получается этот 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);
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Feb 13 2016, 04:10
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(jcxz @ Feb 12 2016, 23:37) *
Никогда не используйте snprintf, используйте _Printf() wink.gif

Код
[andrew@myhost ~]$ man _Printf
No manual entry for _Printf
Go to the top of the page
 
+Quote Post
SlavaV
сообщение Feb 13 2016, 05:27
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 100
Регистрация: 13-06-06
Из: г.Улан-Удэ
Пользователь №: 18 024



почему не использовать конкатенацию (сложение) строк
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Feb 13 2016, 06:33
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Цитата(SlavaV @ Feb 13 2016, 08:27) *
почему не использовать конкатенацию (сложение) строк

через sprintf все работает. Конкатенацию надо через malloc делать.
проблема была значение 0х3а перевести в строку "0x3a"
Go to the top of the page
 
+Quote Post
smalcom
сообщение Feb 13 2016, 13:34
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



Цитата
я под виндой отлаживаюсь.

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

Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 14 2016, 16:21
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(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()
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Feb 14 2016, 16:53
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Пробую кодеблокс. Какой компилятор установить надо, чтобы из-под чтобы компилить код для железки арм Линукс? Само ядро я собирал линаро -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()

Так это на плюсах должен быть проект тогда.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 14 2016, 17:23
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



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

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
smalcom
сообщение Feb 14 2016, 20:59
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



Цитата
Но вроде на сайте кодеблокс пишут,что нельзя для линукса линаро поставить.

ставьте как удобно. потом в настройках среды выбираете какой компилятор хотите настроить и показываете ему где и как брать linaro.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Feb 15 2016, 08:08
Сообщение #20


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



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

"0x%02X",value


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Feb 18 2016, 16:11
Сообщение #21


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



а я делаю так
Код
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);
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 20:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01536 секунд с 7
ELECTRONIX ©2004-2016