[an error occurred while processing this directive]
Найдите ошибку в моем ДНК
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено groovy 25 октября 2006 г. 00:54

#include
#include
#include

int putchar(int c) {
while(!(UCSR0A & (1 << UDRE0)));
UDR0 = c;
return c;
}

int main( void )
{
UCSR0B = (1 << RXCIE0)|(1 << TXCIE0)|(1 << RXEN0)|(1 << TXEN0);
UCSR0C = (1 << UCSZ01)|(1 << UCSZ00);
UBRR0L = 51;

static const __farflash char sl[] = "2";
for (;;) {
printf("1");
printf_P(sl);
}
}

Выводит 0x31 0x31 0x00 x00 и так дальше ноли в цикле
Я так понимаю первый раз на printf_P все просто перегружается, потом входит в какой то цикл.

Использую стандартный проект IAR 4.20, только проц поменял на мегу128.

Без printf_P в цикле нормально выводится единица.

Переменная sl лежит в FAR_F

Вот MAP файл

SEGMENT SPACE START ADDRESS END ADDRESS SIZE TYPE ALIGN
======= ===== ============= =========== ==== ==== =====
INTVEC CODE 00000000 - 00000003 4 com 1
?FILL1 CODE 00000004 - 0000008B 88 rel 0
NEAR_F CODE 0000008C - 000000C0 35 rel 0
SWITCH CODE 000000C2 - 000000F5 34 rel 1
CODE CODE 000000F6 - 00001279 1184 rel 1
FAR_F CODE 0000127A - 0000127B 2 rel 0
INITTAB CODE 0000127C - 00001282 7 rel 0
NEAR_ID CODE 00001283 - 00001284 2 rel 0
ABSOLUTE DATA 0000001C rel 0
DATA 0000001D
DATA 0000001E
DATA 0000001F
DATA 00000029 - 0000002C 4
DATA 00000095 - 00000095 1
CSTACK DATA 00000100 - 0000011F 20 dse 0
RSTACK DATA 00000120 - 0000013F 20 dse 0
NEAR_I DATA 00000140 - 00000141 2 rel 0

Вот ассемблерный листинг

17 static const __farflash char sl[] = "2";
18 for (;;) {
19 printf("1");
\ ??main_0:
\ 0000000E .... LDI R16, LOW(`?`)
\ 00000010 .... LDI R17, (`?`) >> 8
\ 00000012 ........ CALL printf
20 printf_P(sl);
\ 00000016 .... LDI R16, LOW(??sl)
\ 00000018 .... LDI R17, HIGH(??sl)
\ 0000001A .... LDI R18, (??sl) >> 16
\ 0000001C ........ CALL printf_P
\ 00000020 CFF6 RJMP ??main_0
21 }
22 }

\ In segment FAR_F, align 1, keep-with-next
\ ??sl:
\ 00000000 0032 DB "2"

\ In segment NEAR_ID, align 1, keep-with-next
\ `?>`:
\ 00000000 0031 DB "1"

\ In segment NEAR_I, align 1, keep-with-next
\ 00000000 REQUIRE `?`
\ `?`:
\ 00000000 DS 2
\ 00000002 REQUIRE `?>`


ЧТО НЕ ТАК КТО-НИБУДЬ ВИДИТ?

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 
URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание