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

 
 
> PIC24F реальный размер const во флеше.
YAM
сообщение Feb 14 2008, 17:21
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 7-07-04
Из: Ukraine
Пользователь №: 291



Имеем PIC24F, MPLAB + C30
Я правильно понял, что
массив из const char mass[10]; реально займет 15 байт флэша,
массив из const int mass[10]; реально займет 30 байт флэша,
массив из const long mass[10]; реально займет 60 байт флэша?
Т.е. реально теряем один из трёх байт при упаковке констант?


--------------------
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Diz
сообщение Feb 14 2008, 21:34
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 1-08-06
Пользователь №: 19 250



Плюс есть некоторые тонкости с упаковкой структур (аттрибут packed).

Например, если идет байтовый массив, то каждые два байта упаковываются в слово и
занимают 2 байта команды(третий - пустой). При обращении к такому массиву через
указатель иногда получается чтение по нечетному адресу - и выпадение в Address_Error.
Go to the top of the page
 
+Quote Post
Alex B._
сообщение Feb 15 2008, 08:20
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 943
Регистрация: 6-07-04
Из: Санкт-Петербург
Пользователь №: 274



Цитата(Diz @ Feb 15 2008, 00:34) *
Плюс есть некоторые тонкости с упаковкой структур (аттрибут packed).
Например, если идет байтовый массив, то каждые два байта упаковываются в слово и
занимают 2 байта команды(третий - пустой). При обращении к такому массиву через
указатель иногда получается чтение по нечетному адресу - и выпадение в Address_Error.

На самоме деле packed для байтовых массивов не нужен, элементы массива и без модификатора размещаются по два в слове. packed нужен для размешения элементов структуры размером больше байта по невыровненному адресу. Тем не менее, компилятор все нормально отрабатывает, не знаю, какие у вас проблемы:

Код
1:                
2:                 typedef struct __foo
3:                 {
4:                     char a;
5:                     int  x[2] __attribute__ ((packed));
6:                 } foo;
7:                
8:                 volatile foo doo;
9:                
10:                int main(void)
11:                {
12:                    volatile int *p;
13:                    
14:                    p = &doo.x[0];
15:                    
16:                    *p = 0x1245;
00280  BFC801     mov.b 0x0801,0x0000
00282  B3C450     mov.b #0x45,0x0000
00284  B7E801     mov.b 0x0000,0x0801
00286  BFC802     mov.b 0x0802,0x0000
00288  B3C120     mov.b #0x12,0x0000
0028A  B7E802     mov.b 0x0000,0x0802
0028C  37FFFF     bra 0x00028c

Код
External Symbols in Data Memory (by address):

                    0x0800                  _doo

понятное дело, что оверхеда будет немеряно, потому как байтовые инструкции используются (mov.b, ze.cool.gif, но проблем с кодом не будет

Цитата(YAM @ Feb 15 2008, 11:06) *
Понятно, спасибо...
Судя по всему IAR вообще не заморачивается с упаковкой...

IAR dsPIC последний (1.30) структуры паковать не умеет...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- YAM   PIC24F реальный размер const во флеше.   Feb 14 2008, 17:21
- - Alex B._   Цитата(YAM @ Feb 14 2008, 20:21) Т.е. реа...   Feb 14 2008, 21:10
- - YAM   Понятно, спасибо... Судя по всему IAR вообще не за...   Feb 15 2008, 08:06
- - YAM   Не, у вас doo в ОЗУ... Для IAR: <PRE> typede...   Feb 15 2008, 08:54
- - Diz   Да, насчет упаковки просто байтового массива я был...   Feb 15 2008, 10:40
|- - Alex B._   Цитата(Diz @ Feb 15 2008, 13:40) Попадани...   Feb 15 2008, 11:04
- - Diz   Попутно обнаружился забавный глюк: Кодtypedef str...   Feb 15 2008, 12:15
|- - Alex B._   Цитата(Diz @ Feb 15 2008, 15:15) Попутно ...   Feb 15 2008, 17:13
- - Diz   Должна быть 3.02 - точно смогу сказать в понедельн...   Feb 15 2008, 19:39
- - Diz   Да, 3.02: pic30-coff-gcc.exe (GCC) 4.0.3 (dsPIC30...   Feb 18 2008, 10:38
|- - Alex B._   Цитата(Diz @ Feb 18 2008, 13:38) Да, 3.02...   Feb 18 2008, 20:17
- - Diz   Спасибо за инфу. Недавно в 3.02 попался еще один...   Feb 19 2008, 07:31
|- - Alex B._   Цитата(Diz @ Feb 19 2008, 10:31) Если пол...   Feb 19 2008, 07:42
- - Diz   Воссоздать - убрать весь лишний мусор и оставить б...   Feb 19 2008, 11:18


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 08:02
Рейтинг@Mail.ru


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