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

 
 
> CHECKSUM
meister
сообщение Jan 28 2008, 15:10
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Здравствуйте,

как можно заставить линковщик (IAR 4.42A) считать контрольную сумму только для указанных сегментов:

Код
PRGENTRY                           00002004 - 0000207F          7C   rel    2
ICODE                              00002080 - 00002633         5B4   rel    2
DIFUNCT                            00002634 - 00002637           4   rel    2
CODE                               00002638 - 0000F39F        CD68   rel    2
INITTAB                            0000F3A0 - 0000F3B7          18   rel    2
DATA_ID                            0000F3B8 - 0000F3BB           4   rel    2
DATA_C                             0000F3BC - 0001386F        44B4   rel    2


т.е. с начала PRGENTRY до конца DATA_C?

Я могу сам посчитать и записать, но тогда отлаживать проблематично - мой бутлоадер отвергает то, что сделал линковщик sad.gif

Спасибо.

Сообщение отредактировал meister - Jan 28 2008, 15:10
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
meister
сообщение Jan 28 2008, 17:20
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Ладно, пусть верхняя граница будет концом флэша и вычислять crc в два диапазаона 0x2004 до CRC и после CRC до конца флэш, считая, что там везде 0xFF.

Не сходится sad.gif

Все диапазоны сделаны на манер STL (поэтому конец флэш 0x40000, а не 0x3FFFF).

Код
-J2,crc16,,,,1,0=2004-3ffff


Код
    unsigned short slow_crc16(unsigned short sum, u8_t const * p, unsigned short len)
    {
        while (len--)
        {
            int i;
            unsigned char byte = *p++;
            
            for (i = 0; i < 8; ++i)
            {
                unsigned long osum = sum;
                sum <<= 1;
                
                if (byte & 0x80)
                    sum |= 1;
                
                if (osum & 0x8000)
                    sum ^= 0x1021;
                
                byte <<= 1;
            }
        }
        return sum;
    }    
    
    
    bool is_code_valid(void)
    {
        if (validate_write_address(bootloader_programm_size))
        {
            u8_t const * const programm_begin = reinterpret_cast<u8_t const *>(0x2004);
            u8_t const * const programm_end = reinterpret_cast<u8_t const *>(bootloader_programm_size);
            u8_t const * const flash_end = reinterpret_cast<u8_t const *>(0x40000);
            
            u8_t const zero[] = {0, 0};

            u16_t crc = 0;
            crc = slow_crc16(crc, programm_begin, programm_end - programm_begin);
            crc = slow_crc16(crc, programm_end + 2, flash_end - programm_end - 2);
            crc = slow_crc16(crc, zero, 2);
            
            u16_t linker_crc;
            my_memcpy(&linker_crc, programm_end, 2); // читается правильно
            
            return crc == linker_crc; // вообще не сходится, ни инвертирование, ни меняя endian.
        }
        else
        {
            return false;
        }
    }


Код
    MODULE    PROGRAMM_SIZE;
    PUBLIC  bootloader_programm_size;
    EXTERN  __checksum;
    RSEG    PRGSIZE:CODE:NOROOT(2);

bootloader_programm_size DC32 __checksum;

    ENDMOD;


Код
                ****************************************
                *                                      *
                *      SEGMENTS IN ADDRESS ORDER       *
                *                                      *
                ****************************************


SEGMENT              SPACE    START ADDRESS   END ADDRESS     SIZE  TYPE  ALIGN
=======              =====    =============   ===========     ====  ====  =====
PRGSIZE                            00002000 - 00002003           4   rel    2
PRGENTRY                           00002004 - 0000207F          7C   rel    2
ICODE                              00002080 - 00002633         5B4   rel    2
DIFUNCT                            00002634 - 00002637           4   rel    2
CODE                               00002638 - 00014ED7       128A0   rel    2
INITTAB                            00014ED8 - 00014EEF          18   rel    2
DATA_ID                            00014EF0 - 00014EF3           4   rel    2
DATA_C                             00014EF4 - 000194FE        460B   rel    2
CHECKSUM                           000194FF - 00019500           2   rel    0
?FILL2                             00019501 - 0003FFFF       26AFF   rel    0


                ****************************************
                *                                      *
                *              CHECKSUMS               *
                *                                      *
                ****************************************

Symbol      Checksum  Memory  Start      End       Initial value
------      --------  ------  -----      ---       -------------
__checksum    0xe424   CODE   00002004 - 000194FE            0x0
                       CODE   00019501 - 0003FFFF
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- meister   CHECKSUM   Jan 28 2008, 15:10
- - zltigo   Что за причуды? В начале прошивки указатель на сег...   Jan 28 2008, 15:50
|- - meister   Цитата(zltigo @ Jan 28 2008, 18:50) Что з...   Jan 28 2008, 15:55
|- - zltigo   Цитата(meister @ Jan 28 2008, 18:55) Чтоб...   Jan 28 2008, 16:22
- - zltigo   Цитата(meister @ Jan 28 2008, 20:20) Ладн...   Jan 28 2008, 17:29
- - meister   Цитата(zltigo @ Jan 28 2008, 20:29) от 0x...   Jan 28 2008, 18:31
- - zltigo   Цитата(meister @ Jan 28 2008, 21:31) Туда...   Jan 28 2008, 18:40
- - meister   Цитата(zltigo @ Jan 28 2008, 21:40) Зачем...   Jan 29 2008, 09:58
- - zltigo   Цитата(meister @ Jan 29 2008, 12:58) но я...   Jan 29 2008, 10:20
- - meister   Раньше отлично работало, а сегодня IAR сделал вот ...   Mar 27 2008, 16:58
- - zltigo   Цитата(meister @ Mar 27 2008, 19:58) Как ...   Mar 27 2008, 22:51
- - meister   Цитата(zltigo @ Mar 28 2008, 01:51) Убрат...   Mar 28 2008, 06:37
- - zltigo   Цитата(meister @ Mar 28 2008, 09:37) Хоче...   Mar 28 2008, 06:45
- - meister   Можно в пропроцессоре ассемблера в зависимости от ...   Mar 28 2008, 07:08
- - meister   Цитата(zltigo @ Mar 28 2008, 09:45) Это н...   Mar 28 2008, 08:32


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

 


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


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