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

 
 
> Подскажите как правильно передать строку в функцию?, Хочу писать 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
Ответов
Палыч
сообщение Sep 9 2009, 15:21
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Вы бы транслятор указали что ли... ИАР? Дело, имхо, в галке "Place string literals and constants in initialized RAM"
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Sep 9 2009, 15:50
Сообщение #3


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

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



Цитата(Палыч @ Sep 9 2009, 18:21) *
Вы бы транслятор указали что ли... ИАР? Дело, имхо, в галке "Place string literals and constants in initialized RAM"


Компилятор IAR AVR 5.20.

Убираю галочку - появляется ошибка:
Код
Error[e16]: Segment NEAR_C (size: 0x8a5 align: 0) is too long for segment definition. At least 0x8a5 more bytes needed. The problem occurred while processing the segment  
placement command "-Z(DATA)NEAR_C=_..X_EXT_ROM_BASE:+_..X_EXT_ROM_SIZE", where at the moment of placement the available memory ranges were  
"DATA:10ff--1"
Error while running Linker


Добавил сегмент STR во флеш, указал размещать в нём эти строки - ситуция та же.
В симуляторе вижу что считывание идёт из флеш, а сама строка расположена в internal sram.
Go to the top of the page
 
+Quote Post



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

 


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


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