Перейти к содержанию
    

IAR и SPRINTF

Доброе время суток :)

У меня возникла проблема. Среда IAR 5.30.

 

Код:

sprintf( CRC, "%i", _CRC);

 

_CRC = 135

 

а в CRC кладется -12851

сам unsigned char CRC[4];

 

В чем проблема, могет в настройках проекта, но во вкладке library option все перепробовал :(

 

Плиз подскажите в чем дело .....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость MALLOY2
а в CRC кладется -12851

 

Странный результат :)

 

CRC это должен быть указатель на буфер, причем размер его должен быть такой чтобы результирующая строка в него поместилась !

 

 

sprintf( CRC, "%i", 135);

 

CRC будет содержать строку "135", функция вернет число 3.

 

Это функция такая же как и printf, только форматирует в заданный буфер.

 

В IAR работает без проблем, если есть какие топроблемы смотрите хватает ли вам стека.

 

 

P.S. %i работает во всех вариациях библиотеки форматера (General->Library option), также посмотрите на закладке General->Library не стоит там None или Custom, но тогда ошибки были-бы при компиляции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какой тип у переменной _CRC? По правилам должен быть int.

 

Тип переменной _CRC - int :), и стэк - 0x80.

Не знаю почему, не работает :(.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тип переменной _CRC - int :),

символы с подчеркиванием считаются компилятором особыми (в зависимости от реализации). Попробуйте назвать переменную по-другому и замените в формате

i

на

d

. По стандарту все равно, но ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

символы с подчеркиванием считаются компилятором особыми (в зависимости от реализации). Попробуйте назвать переменную по-другому и замените в формате
i

на

d

. По стандарту все равно, но ...

 

Ок, попробую.

Спасибо всем, реализовал что хотел по другому.

Но буду пробывать, просто уже интересно стало .....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В чем проблема, могет в настройках проекта, но во вкладке library option все перепробовал :(

Вообще-то, функции форматного вывода требуют много стека, называли величину порядка 400 байт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

символы с подчеркиванием считаются компилятором особыми (в зависимости от реализации). Попробуйте назвать переменную по-другому

А нельзя ли подробнее - какие грабли имеются в данном конкретном случае?

 

Насколько я понимаю, вариантов может быть два:

- такого символа в библиотеках нет, и использовать его - просто некрасиво

- такой символ есть, и вылезет предупреждение "переопределение".

 

 

А вообще, в случае неадекватного поведения программы увеличить стек и посмотреть, что будет ;) совсем недолго...

Разве что не забыть ПОТОМ разобраться...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насколько я понимаю, вариантов может быть два:

- такого символа в библиотеках нет, и использовать его - просто некрасиво

- такой символ есть, и вылезет предупреждение "переопределение".

Не только в библиотеках, но и символы самого компилятора. Я не знаю, все ли предупреждения автор включил. А может выключил, чтобы не мешали?

А нельзя ли подробнее - какие грабли имеются в данном конкретном случае?

В данном случае это мое предположение, основанное на личном опыте.

Давно имел неосторожность названия переменных и функций начинать с подчеркивания (еще хуже с двух). Проблемы с именами получил мгновенно. Компилятор свои внутренние названия с подчеркиваний начинает, подробности в документации по gcc, для IAR точно не уверен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...