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

Подскажите,как в 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++);//функция вывода байта

}

}

 

компилятор не ругается но и программа не работает.

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

 

спасибо

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


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

Что именно не работает? и при чем здесь экран?

программ передачи байта живая?

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


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

да,живая.не виводится ничего в терминал(bray).

сейчас нашел в аппнотах драйвер к терминалу.там есть что то похожее.пробую

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


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

да,живая.не виводится ничего в терминал(bray).

сейчас нашел в аппнотах драйвер к терминалу.там есть что то похожее.пробую

 

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

 

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

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


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

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

 

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

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


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

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

 

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

 

Обоснуй!

 

Обоснуй! ;)

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


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

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

 

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 так делается

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


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

А у человека - IAR ;)

 

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

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


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

А у человека - IAR ;)

 

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

 

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

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


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

Неинтересно мучаться с модификаторам в зависимости от источника данных - проще через __generic

Ну и насчет макроса - или показывайте какой он крутой, или не юзайте в таком контексте - "подводные грабли" могут быть;))

 

__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]);

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


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

USART_transmit_string_from_flash(&on[0]);

Ну тогда бы я её назвал

USART_transmit_string_from_anywhere();

;)

за исключением, разве что, EEPROM, как говорили раньше в других постах.

Тем не менее, это по-моему будет непереносимо на GCC.

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


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

У меня с Уартом в порядке, а вот при сравнении компилятор выдает ошибку

 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 *"

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


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

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

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

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

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

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

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

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

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

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