MichaZ 0 3 февраля, 2006 Опубликовано 3 февраля, 2006 · Жалоба Подскажите,как в 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++);//функция вывода байта } } компилятор не ругается но и программа не работает. подскажите,в чем дело. спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BlackJack 0 3 февраля, 2006 Опубликовано 3 февраля, 2006 · Жалоба Что именно не работает? и при чем здесь экран? программ передачи байта живая? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BVU 0 3 февраля, 2006 Опубликовано 3 февраля, 2006 · Жалоба Может попробовать так: USART_transmit(*(ptr++)); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MichaZ 0 3 февраля, 2006 Опубликовано 3 февраля, 2006 · Жалоба да,живая.не виводится ничего в терминал(bray). сейчас нашел в аппнотах драйвер к терминалу.там есть что то похожее.пробую Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 3 февраля, 2006 Опубликовано 3 февраля, 2006 · Жалоба да,живая.не виводится ничего в терминал(bray). сейчас нашел в аппнотах драйвер к терминалу.там есть что то похожее.пробую Проверил - работает: void USART_transmit_string_from_flash(unsigned char __flash *ptr) { unsigned char c; while(*ptr) { c = *ptr++; USART_transmit( c ); } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Silent Bob 0 10 февраля, 2006 Опубликовано 10 февраля, 2006 · Жалоба А USART_transmit функция или макрос? Если макром, то инструкции вида *ptr++ использовать нельзя! А USART_transmit функция или макрос? Если макром, то инструкции вида *ptr++ использовать нельзя! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kay 0 10 февраля, 2006 Опубликовано 10 февраля, 2006 · Жалоба приведи листинг функции USART_transmit Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 10 февраля, 2006 Опубликовано 10 февраля, 2006 · Жалоба А USART_transmit функция или макрос? Если макром, то инструкции вида *ptr++ использовать нельзя! А USART_transmit функция или макрос? Если макром, то инструкции вида *ptr++ использовать нельзя! Обоснуй! Обоснуй! ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
viakon 0 10 февраля, 2006 Опубликовано 10 февраля, 2006 · Жалоба Проверил - работает: 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 так делается Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 10 февраля, 2006 Опубликовано 10 февраля, 2006 · Жалоба ... в GCC так делается А у человека - IAR ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
viakon 0 10 февраля, 2006 Опубликовано 10 февраля, 2006 · Жалоба А у человека - IAR ;) Думаешь он не догадается как переделать под IAR? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 10 февраля, 2006 Опубликовано 10 февраля, 2006 · Жалоба А у человека - IAR ;) Думаешь он не догадается как переделать под IAR? :) Ты не понял, то что он сделал - в IAR работает так как хочется - берет из flash, т.к. указатель с модификатором __flash Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sensor_ua 0 10 февраля, 2006 Опубликовано 10 февраля, 2006 · Жалоба Неинтересно мучаться с модификаторам в зависимости от источника данных - проще через __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]); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 10 февраля, 2006 Опубликовано 10 февраля, 2006 · Жалоба USART_transmit_string_from_flash(&on[0]); Ну тогда бы я её назвал USART_transmit_string_from_anywhere(); ;) за исключением, разве что, EEPROM, как говорили раньше в других постах. Тем не менее, это по-моему будет непереносимо на GCC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgeV 0 14 февраля, 2006 Опубликовано 14 февраля, 2006 · Жалоба У меня с Уартом в порядке, а вот при сравнении компилятор выдает ошибку 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 *" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться