|
из флєш - в уарт, как организовать вывод в уарт строки находящейся во флэш |
|
|
|
Feb 3 2006, 11:21
|
Участник

Группа: Участник
Сообщений: 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++);//функция вывода байта } }
компилятор не ругается но и программа не работает. подскажите,в чем дело.
спасибо
|
|
|
|
|
Feb 3 2006, 11:30
|
Участник

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

|
Что именно не работает? и при чем здесь экран? программ передачи байта живая?
|
|
|
|
|
Feb 3 2006, 11:47
|
Участник

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

|
да,живая.не виводится ничего в терминал(bray). сейчас нашел в аппнотах драйвер к терминалу.там есть что то похожее.пробую
|
|
|
|
|
Feb 10 2006, 07:56
|
Участник

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

|
А USART_transmit функция или макрос? Если макром, то инструкции вида *ptr++ использовать нельзя!
А USART_transmit функция или макрос? Если макром, то инструкции вида *ptr++ использовать нельзя!
|
|
|
|
|
Feb 10 2006, 11:29
|
Местный
  
Группа: Участник
Сообщений: 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 так делается
|
|
|
|
|
Feb 10 2006, 13:49
|
Профессионал
    
Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387

|
Неинтересно мучаться с модификаторам в зависимости от источника данных - проще через __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]);
--------------------
aka Vit
|
|
|
|
|
Feb 10 2006, 14:39
|

Шаман
     
Группа: Модераторы
Сообщений: 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(); за исключением, разве что, EEPROM, как говорили раньше в других постах. Тем не менее, это по-моему будет непереносимо на GCC.
|
|
|
|
|
Feb 14 2006, 12:40
|
Местный
  
Группа: Свой
Сообщений: 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 *"
--------------------
Обычно последним смеется тот, кто хуже соображает!
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|