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

 
 
> 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 19 2008, 11:18
Сообщение #2


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

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



Воссоздать - убрать весь лишний мусор и оставить баг в чистом виде :-)

Вот:

Код

typedef void *(*fptr_t)( uint);

fptr_t func2( uint Event)
{
    return (fptr_t) 0;
}

fptr_t func1( uint Event)
{
    switch ( Event)
    {
    case 1:                
        nop();
        return (fptr_t) 0;

    case 5:
        return (fptr_t) 0;

    case 6:        
        return (fptr_t) 0;
    }
    return (fptr_t) func2;
}

//
14312                      .global    _func2; export
14313                  _func2:
14336 000000  00 00 05         retlw    #0,w0
//
14359                      .global    _func1; export
14360                  _func1:
14383 000002  E1 0F 50         sub    w0,#1,[w15]
14385 000004  00 00 32         bra    z,.L7
14387 000006  00 00 31         bra    geu,.L13
14388                  .L6:
14390 000008  01 00 20         mov    #handle(_func2),w1
14392 00000a  00 00 06         return    
14393                  .L14:
14395                  .L13:
14397 00000c  65 00 50         sub    w0,#5,w0
14398 00000e  80 00 EB         clr    w1
14399 000010  E1 0F 50         sub    w0,#1,[w15]
14401 000012  00 00 3E         bra    gtu,.L6
14403 000014  01 00 78         mov    w1,w0
14404 000016  00 00 06         return    
14405 000018  00 00 37         bra    .L14
14406                  .L7:
14408 00001a  00 00 00         nop    
14409 00001c  00 00 20         mov.w    #0,w0
14411 00001e  00 00 06         return    
14412 000020  00 00 37         bra    .L14



//


Указатель на func2 возвращается в регистре w1 вместо w0 (а в w0 может быть все, что угодно).
Если, скажем, в case 5: добавить nop(), то все корректно (хотя и не оптимально, мягко скажем):

Код
14360                  _func1:
14383 000002  E5 0F 50         sub    w0,#5,[w15]
14385 000004  00 00 32         bra    z,.L8
14386 000006  80 00 EB         clr    w1
14387 000008  E6 0F 50         sub    w0,#6,[w15]
14389 00000a  00 00 32         bra    z,.L10
14391 00000c  01 00 20         mov    #handle(_func2),w1
14393 00000e  E1 0F 50         sub    w0,#1,[w15]
14395 000010  00 00 32         bra    z,.L14
14396                  .L10:
14398 000012  01 00 78         mov    w1,w0
14399 000014  00 00 06         return    
14400                  .L15:
14402                  .L8:
14404 000016  00 00 00         nop    
14405 000018  00 00 20         mov.w    #0,w0
14407 00001a  00 00 06         return    
14408 00001c  00 00 37         bra    .L15
14409                  .L14:
14411 00001e  00 00 00         nop    
14412 000020  00 00 20         mov.w    #0,w0
14414 000022  00 00 06         return    
14415 000024  00 00 37         bra    .L15
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
- - Diz   Плюс есть некоторые тонкости с упаковкой структур ...   Feb 14 2008, 21:34
|- - Alex B._   Цитата(Diz @ Feb 15 2008, 00:34) Плюс ест...   Feb 15 2008, 08:20
- - 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


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 17:15
Рейтинг@Mail.ru


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