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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> из флєш - в уарт, как организовать вывод в уарт строки находящейся во флэш
MichaZ
сообщение Feb 3 2006, 11:21
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 20-10-05
Пользователь №: 9 886



Подскажите,как в IAR сделать следующее

есть строка в флэш

обьявляю строку:
__flash unsigned char on[] = "\nON command received!\0";

указатель не нее
unsigned char __flash *on_ptr=&on[0];

хочу вывести на екран.пишу функцию:
void USART_transmit_string_from_flash(unsigned char __flash *ptr)
{
while(*ptr)
{
USART_transmit(*ptr++);//функция вывода байта
}
}

компилятор не ругается но и программа не работает.
подскажите,в чем дело.

спасибо
Go to the top of the page
 
+Quote Post
BlackJack
сообщение Feb 3 2006, 11:30
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 6-10-05
Пользователь №: 9 276



Что именно не работает? и при чем здесь экран?
программ передачи байта живая?
Go to the top of the page
 
+Quote Post
BVU
сообщение Feb 3 2006, 11:47
Сообщение #3


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

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



Может попробовать так: USART_transmit(*(ptr++));


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
MichaZ
сообщение Feb 3 2006, 11:47
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 20-10-05
Пользователь №: 9 886



да,живая.не виводится ничего в терминал(bray).
сейчас нашел в аппнотах драйвер к терминалу.там есть что то похожее.пробую
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 3 2006, 19:00
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(MichaZ @ Feb 3 2006, 13:47) *
да,живая.не виводится ничего в терминал(bray).
сейчас нашел в аппнотах драйвер к терминалу.там есть что то похожее.пробую


Проверил - работает:

Код
void USART_transmit_string_from_flash(unsigned char __flash *ptr)
{
    unsigned char c;
    while(*ptr)
    {
        c = *ptr++;
        USART_transmit( c );
     }
}
Go to the top of the page
 
+Quote Post
Silent Bob
сообщение Feb 10 2006, 07:56
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 19-10-05
Пользователь №: 9 821



А USART_transmit функция или макрос? Если макром, то инструкции вида *ptr++ использовать нельзя!

А USART_transmit функция или макрос? Если макром, то инструкции вида *ptr++ использовать нельзя!
Go to the top of the page
 
+Quote Post
kay
сообщение Feb 10 2006, 08:26
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 58
Регистрация: 6-06-05
Пользователь №: 5 781



приведи листинг функции USART_transmit
Go to the top of the page
 
+Quote Post
Rst7
сообщение Feb 10 2006, 08:26
Сообщение #8


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

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



Цитата(Silent Bob @ Feb 10 2006, 09:56) *
А USART_transmit функция или макрос? Если макром, то инструкции вида *ptr++ использовать нельзя!

А USART_transmit функция или макрос? Если макром, то инструкции вида *ptr++ использовать нельзя!


Обоснуй!

Обоснуй! wink.gif


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


Местный
***

Группа: Участник
Сообщений: 290
Регистрация: 9-12-05
Из: г. Пермь
Пользователь №: 12 002



Цитата(defunct @ Feb 4 2006, 00:00) *
Проверил - работает:

Код
void USART_transmit_string_from_flash(unsigned char __flash *ptr)
{
    unsigned char c;
    while(*ptr)
    {
        c = *ptr++;
        USART_transmit( c );
     }
}


Если и работает то строка лежит в озу, при инициализации памяти туда помещается. а нада чтоб из флеша читалась

void write_str_from_prg(PGM_P str)
{
while(pgm_read_byte(str)) put_uart(pgm_read_byte(str++));
}

в GCC так делается
Go to the top of the page
 
+Quote Post
Rst7
сообщение Feb 10 2006, 11:35
Сообщение #10


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

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



Цитата(viakon @ Feb 10 2006, 13:29) *
...
в GCC так делается


А у человека - IAR wink.gif


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


Местный
***

Группа: Участник
Сообщений: 290
Регистрация: 9-12-05
Из: г. Пермь
Пользователь №: 12 002



Цитата(Rst7 @ Feb 10 2006, 16:35) *
А у человека - IAR wink.gif


Думаешь он не догадается как переделать под IAR? smile.gif
Go to the top of the page
 
+Quote Post
Rst7
сообщение Feb 10 2006, 12:15
Сообщение #12


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

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



Цитата(viakon @ Feb 10 2006, 13:46) *
Цитата(Rst7 @ Feb 10 2006, 16:35) *

А у человека - IAR wink.gif


Думаешь он не догадается как переделать под IAR? smile.gif


Ты не понял, то что он сделал - в IAR работает так как хочется - берет из flash, т.к. указатель с модификатором __flash


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


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

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



Неинтересно мучаться с модификаторам в зависимости от источника данных - проще через __generic
Ну и насчет макроса - или показывайте какой он крутой, или не юзайте в таком контексте - "подводные грабли" могут бытьwink.gif)

__flash unsigned char on[] = "\nON command received!\0";

void USART_transmit_string_from_flash(unsigned char __generic *ptr)
{
unsigned char c;
while(*ptr)
{
c=ptr++;
USART_transmit©;//функция вывода байта
}

}

Вызов
USART_transmit_string_from_flash(&on[0]);


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Feb 10 2006, 14:39
Сообщение #14


Шаман
******

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



Цитата(sensor_ua @ Feb 10 2006, 15:49) *
USART_transmit_string_from_flash(&on[0]);

Ну тогда бы я её назвал
Код
USART_transmit_string_from_anywhere();
wink.gif
за исключением, разве что, EEPROM, как говорили раньше в других постах.
Тем не менее, это по-моему будет непереносимо на GCC.
Go to the top of the page
 
+Quote Post
Георгий
сообщение Feb 14 2006, 12:40
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 269
Регистрация: 17-11-05
Из: Киров-Москва
Пользователь №: 10 957



У меня с Уартом в порядке, а вот при сравнении компилятор выдает ошибку
Код
char HexCom[9];
__flash char Status[]   = "STATUS\0";

if (strcmp(HexCom, Status) == 0) response_sms(1);


Код
Error[Pe167]: argument of type "char __flash *" is incompatible with parameter of type "char const *"


--------------------
Обычно последним смеется тот, кто хуже соображает!
Go to the top of the page
 
+Quote Post

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

 


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


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