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

 
 
> Подскажите как правильно передать строку в функцию?, Хочу писать putstring("Hello Word\r\n") а не вывходит
mempfis_
сообщение Sep 9 2009, 15:08
Сообщение #1


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

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Добрый день.
Сижу ламаю голову вот над каким вопросом - есть самописная функция putstring(unsigned char __flash *pData) которая по указателю считывает строку и передаёт её по уарту в терминал.

Если объявить строку и передать указатель на неё в функцию то всё работает правильно:
Код
__flash unsigned char txt[] = "Start Programm\r\n";
putstring(txt)


Хочу сделать запись проще - при использовании функции сразу писать в ней строку:
Код
putstring("Start Programm\r\n")


Компилятор выдаёт ошибку
Код
Error[Pe167]: argument of type "char const *" is incompatible with parameter of type "unsigned char __flash *"


Привожу к типу unsigned char __flash * в надежде что компилятор поймёт что строку надо разместить во флеш а в функцию передать указатель:
Код
putstring( (unsigned char __flash *) "Start Programm\r\n")


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

Собственно вопрос как можно сделать чтобы второй вариант записи работал?
Для наглядности программы хочется чтобы строки писались в самой функции.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение Sep 9 2009, 18:25
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Все там решается.

Ключик "-y" надо вставить, если мне память не изменяет. Завтра точно гляну.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 10 2009, 10:45
Сообщение #3


Гуру
******

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



Цитата(Rst7 @ Sep 9 2009, 20:25) *
Ключик "-y" надо вставить, если мне память не изменяет. Завтра точно гляну.

Ну это где-то с точностью до наоборот.
Цитата(Artem_Petrik @ Sep 10 2009, 12:35) *
ключ --string_initializers_in_flash (кажись так, сейчас IAR-а под рукой нет, чтоб проверить) нужен для С компилятора.

Это по идее может помочь, только ведь, если компилятору подсунуть, то он-же их все подряд и если вдруг нужно со строчкой поработать, то проблемы вылезут. Правда можно через прагму в исходнике этим порулить, то тогда уж лучше сразу руками прописать строки отдельно.

Цитата(SSerge @ Sep 9 2009, 20:06) *
#define PutString(x) do{static char __flash str[]=x; putstring(str);}while(0)

Для данного случая наиболее нормальный выход


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post



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

 


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


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