Как мне получить код запуска, который я отредактировал для компиляции? - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь отредактировать код запуска для платы MCUXpresso LPC51U68, чтобы я мог передать sh улучшенное изображение на плату См. Инструкции в разделе 3.5.6 (стр. 17 ) данного руководства пользователя (NXP_LPC51U68_UM) . Я изменил выделенные жирным шрифтом строки из руководства пользователя в коде запуска, который я загрузил из SDK для платы LPC51U68 (на веб-сайте NXP). Я также написал функцию IMAGEHEADER_T из руководства пользователя в коде запуска. заголовок (должен быть точно таким, как указано в руководстве пользователя):

/*Image Header*/
const IMAGEHEADER_T imageHeader = {
    IMAGE_ENH_BLOCK_MARKER, //Required marker for image header
        IMG_NO_CRC, //No  CRC, makes development easier
        0x00000000, //crc32_len
        0x00000000, //crc32_val
        0x00000000  //version

ОДНАКО после внесения этих изменений я обнаружил, что код запуска не компилируется . Когда я проверил память по смещению 0x24, чтобы увидеть, получает ли она флаг расширенного изображения 0xEDDC9494, его там не было. Я попытался набрать мусор в коде запуска, а затем собрать и скомпилировать, чтобы увидеть, есть ли у меня ошибка и нет ли ошибки. Как мне заставить мой стартовый код скомпилировать ???

1 Ответ

0 голосов
/ 13 июля 2020

Если я создаю проект SDK LPC51U68 по умолчанию с помощью MCUXpresso, для упомянутых структур и значений нет определений. Так что вам нужно сделать это самостоятельно.

    //*****************************************************************************
    //*****************************************************************************
    #define IMAGE_SINGLE_ENH_SIG    0xEDDC9494
    #define IMAGE_ENH_BLOCK_MARKER  0xFEEDA5A5
    #define IMG_NORMAL              0
    #define IMG_NO_CRC              1

    typedef struct IMAGEHEADER_STRUCT
    {
        unsigned int header_marker;
        unsigned int img_type;
        unsigned int crc32_len;
        unsigned int crc32_val;
        unsigned int version;
    } IMAGEHEADER_T;

    /* Image header */
    const IMAGEHEADER_T imageHeader = {
        IMAGE_ENH_BLOCK_MARKER, /* Required marker for image header */
        IMG_NO_CRC,             /* No CRC, makes development easier */
        0x00000000,             /* crc32_len */
        0x00000000,             /* crc32_val */
        0x00000000              /* version */
    };

    //*****************************************************************************
    // The vector table.
    // This relies on the linker script to place at correct location in memory.
    //*****************************************************************************
    extern void (* const g_pfnVectors[])(void);
    extern void * __Vectors __attribute__ ((alias ("g_pfnVectors")));

    __attribute__ ((used, section(".isr_vector")))
    void (* const g_pfnVectors[])(void) = {
        // Core Level - CM0P
        &_vStackTop,                       // The initial stack pointer
        ResetISR,                          // The reset handler
        NMI_Handler,                       // The NMI handler
        HardFault_Handler,                 // The hard fault handler
        0,                                 // Reserved
        0,                                 // Reserved
        0,                                 // Reserved
        __valid_user_code_checksum,        // LPC MCU checksum
        0,                                 // ECRP
        (void*) IMAGE_SINGLE_ENH_SIG,      // Enhanced image marker            @0x24
        (void*) &imageHeader,              // Pointer to enhanced image header @0x28
        SVC_Handler,                       // SVCall handler
        0,                                 // Reserved
        0,                                 // Reserved
        PendSV_Handler,                    // The PendSV handler
        SysTick_Handler,                   // The SysTick handler

        // Chip Level - LPC51U68
        ...

    }; /* End of g_pfnVectors */

Это должно скомпилироваться. Однако я не знаю, для чего предназначено улучшенное изображение .

...