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

 
 
> Проблемы перевода программы из IAR в WinAVR.
Oleg_IT
сообщение Nov 19 2007, 09:03
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Проблема размещения массивов.
Есть такой текст в IAR, работает:

typedef struct FONT_DEF
{
unsigned char *au8FontTable; /* Font table start address in memory */
} FONT_DEF;

__flash unsigned char Font_1[] = {
7, 8, 0, 255
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
……………………………………………..
0x98,0x64,0x24,0x24,0xFC,0x00,0x00
};

__flash unsigned char Font_2[] = {
5, 6, 32, 59
0x00,0x00,0x00,0x00,0x00,
………………………………………
0x24,0x1A,0x0A,0x3E,0x00
};

struct const FONT_DEF Font_TAB[] =
{
{
Font_1
},
{
Font_2
}
};

Перевожу его в WinAVR, получается так:

typedef struct FONT_DEF
{
unsigned char *au8FontTable; /* Font table start address in memory */
} FONT_DEF;

unsigned char Font_1[] __attribute__((__progmem__)) = {
7, 8, 0, 255
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
……………………………………………..
0x98,0x64,0x24,0x24,0xFC,0x00,0x00
};

unsigned char Font_2[] __attribute__((__progmem__)) = {
5, 6, 32, 59
0x00,0x00,0x00,0x00,0x00,
………………………………………
0x24,0x1A,0x0A,0x3E,0x00
};

struct FONT_DEF Font_TAB[] =
{
{
Font_1
},
{
Font_2
}
};

Компилится, но не работает. В отладчики видно, что адреса рассчитываются не правильно. Реальный адрес массива Font_1 в progmem 0x2A, а в структуре Font_TAB он 0x54. Откуда такое смещение? Может я не правильно атрибуты задаю? Помогите разобраться.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KRS
сообщение Nov 19 2007, 09:55
Сообщение #2


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(Oleg_IT @ Nov 19 2007, 12:03) *
Компилится, но не работает. В отладчики видно, что адреса рассчитываются не правильно. Реальный адрес массива Font_1 в progmem 0x2A, а в структуре Font_TAB он 0x54. Откуда такое смещение? Может я не правильно атрибуты задаю? Помогите разобраться.

Так у атмела адресация флеша по словам, но если читать данные через Z то по байтам поэтому реальный адрес 0x2a (в словах) а для указателя на данные 0x2a*2 = 0x54
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Nov 19 2007, 11:34
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Цитата(KRS @ Nov 19 2007, 12:55) *
Так у атмела адресация флеша по словам, но если читать данные через Z то по байтам поэтому реальный адрес 0x2a (в словах) а для указателя на данные 0x2a*2 = 0x54

А что нужно сделать, что бы правильно было? Я же на процесс присвоения адресов при компиляции повлиять не могу.
Go to the top of the page
 
+Quote Post



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

 


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


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