【问题标题】:How do I get startup code that I have edited to compile?我如何获得我已经编辑编译的启动代码?
【发布时间】:2020-07-10 16:48:31
【问题描述】:

我正在尝试编辑 MCUXpresso LPC51U68 板的启动代码,以便我可以将增强图像刷写到板 See instructions in section 3.5.6 (pg. 17) of this user manual (NXP_LPC51U68_UM)。我更改了从 LPC51U68 板(在 NXP 网站上)的 SDK 下载的启动代码中用户手册中的粗体行。我还在启动代码中编写了用户手册中的 IMAGEHEADER_T 函数。

我对启动代码的编辑最终看起来像这样:

__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*) 0xEDDC9494,                // Enhanced image marker            (This was added)
    imageHeader,                       // Pointer to enhanced image header (This was added)
    SVC_Handler,                       // SVCall handler
    0,                                 // Reserved
    0,                                 // Reserved
    PendSV_Handler,                    // The PendSV handler
    SysTick_Handler,                   // The SysTick handler

这是图像标题的定义(应该与用户手册中的完全一致):

/*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 时,它不存在。我尝试在启动代码中输入一些垃圾,然后构建和编译以查看是否出现错误并且没有错误。 如何让我的启动代码编译???

【问题讨论】:

    标签: compilation boot lpc nxp-microcontroller


    【解决方案1】:

    如果我使用 MCUXpresso 创建一个默认的 LPC51U68 SDK 项目,则没有对上述结构和值的定义。所以你需要自己做。

        //*****************************************************************************
        //*****************************************************************************
        #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 */
    

    这应该可以编译。但是我不知道增强图像是干什么用的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多