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

 
 
> sprintf();, Не могу заставить работать
andrvisht
сообщение Dec 28 2005, 09:21
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Для перевода числа в строку LCD ранее пользовался делением на 10.
Поскольку в С есть функция sprintf() то логичнее было бы использовать её.
подключил файл <stdio.h>
выбрал в опциях библиотеку Normal DLIB
и для начала решил попробовать функцию printf
прямо из help взял пример
Код
  printf("%hu", 0xffff);
  printf("%s", "hello");
  printf("%d %o %x", 31, 31, 31);

и на все получил ошибку
Error[Pe167]: argument of type "char __farflash *" is incompatible with parameter of type "char const *

Эксперименты с разными библиотеками ничего не дали sad.gif
Что не так ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
BVU
сообщение Dec 28 2005, 09:54
Сообщение #2


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

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(&-rey @ Dec 28 2005, 12:21) *
Для перевода числа в строку LCD ранее пользовался делением на 10.
Поскольку в С есть функция sprintf() то логичнее было бы использовать её.
подключил файл <stdio.h>
выбрал в опциях библиотеку Normal DLIB
и для начала решил попробовать функцию printf
прямо из help взял пример
Код
  printf("%hu", 0xffff);
  printf("%s", "hello");
  printf("%d %o %x", 31, 31, 31);

и на все получил ошибку
Error[Pe167]: argument of type "char __farflash *" is incompatible with parameter of type "char const *

Эксперименты с разными библиотеками ничего не дали sad.gif
Что не так ?

Для этого конечно (Для перевода числа в строку LCD) лучше использовать sprintf(), т.к. непосредственно указывается адрес буфера преобразования. Для printf() это надо переопределять, поэтому и выдается ошибка. Так же есть еще один момент, необходимо выделить большой объем стека что бы функции sprintf()/printf() работали без ошибок. Но из собственного опыта - предпочтительней (пользоваться делением на 10). Так и место во flash экономиться за счет неиспользования библиотек для sprintf и немного быстрее работает программа.


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Dec 28 2005, 10:38
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Цитата(IgorKossak @ Dec 28 2005, 13:52) *
И подключить при этом pgmspace.h

Да, сделал
Код
  printf_P("%hu", 0xffff);
  printf_P("%s", "Hello word");
  printf_P("%d %o %x", 31, 31, 31);


но во первых не понятно почему строк из FLASH, где это видно ?
может в документации и описано но я английским с переводчиком владею, может что и упускаю.

Цитата(BVU @ Dec 28 2005, 13:54) *
Но из собственного опыта - предпочтительней (пользоваться делением на 10). Так и место во flash экономиться за счет неиспользования библиотек для sprintf и немного быстрее работает программа.

Спасибо так и сделаю, но все таки хотелось бы понять с printf до конца. Может когда и пригодиться.
И тогда еще вопрос по делению на 10
мне нужен результат целое + остаток конечно можно одельно ползовать / и % отдельно но может есть все сразу ?


Цитата(beer_warrior @ Dec 28 2005, 14:09) *
Если не надо генерить сложной строки из разнотипных данных
лучше воспользоваться itoa()/atoi() etc.

Ясно попробую, atoi пользовал но код мне показался избыточным, может за счет универсализации...
Go to the top of the page
 
+Quote Post
KRS
сообщение Dec 28 2005, 10:59
Сообщение #4


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(&-rey @ Dec 28 2005, 13:38) *
но во первых не понятно почему строк из FLASH, где это видно ?
может в документации и описано но я английским с переводчиком владею, может что и упускаю.


У вас наверное активна опция --string_literals_in_flash
Puts "string" in the __nearflash or __farflash segment depending on the processor
option.
When this option is selected, library functions taking a string literal as a parameter will
no longer be type-compatible.
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Dec 28 2005, 13:18
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



to KRS:
посмотрел и галочки убрал но результат тот-же sad.gif
to _artem_:
Спасибо, но прблем с алгоритмами у меня нет, просто хотел именно sprintf испробовать,
а тогда уже решить : писать свое или пользовать библиотеки.
to IgorKossak:
Ясно, я искал поначалу именно такую, но не нашел. теперь ясно где. только в 4.11A это уже clib.pdf

И еще вопрос ко всем:
часто русский шрифт в LCD приходиться кодировать Hex кодом. Нет ли в IAR возможности это делать автоматом ?
Мне приходит в голову только табличная перекодировка, но это доп. затраты ресурсов проца, а ведь все можно сделать на этапе компиляции.

Сообщение отредактировал &-rey - Dec 28 2005, 13:19
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Dec 28 2005, 13:40
Сообщение #6


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(&-rey @ Dec 28 2005, 15:18) *
часто русский шрифт в LCD приходиться кодировать Hex кодом. Нет ли в IAR возможности это делать автоматом ?
Мне приходит в голову только табличная перекодировка, но это доп. затраты ресурсов проца, а ведь все можно сделать на этапе компиляции.

IAR здесь не при чём. В самом языке С препроцессор очень слаб.
Go to the top of the page
 
+Quote Post



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

 


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


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