Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Arm Cortex引导加载程序调试提示_Python_C_Uart_Bootloader - Fatal编程技术网

Python Arm Cortex引导加载程序调试提示

Python Arm Cortex引导加载程序调试提示,python,c,uart,bootloader,Python,C,Uart,Bootloader,我正在为定制板上的Cortex-M4 MCU()编写一个串行引导程序。我目前正在通过SWD使用Jlink进行闪烁/调试 当前架构:我有一个python脚本,它读取二进制文件,将其分解为512字节的块,通过UART发送到MCU,最后对整个过程执行CRC32,并检查以确保接收端的CRC匹配。这一切工作正常,发送数据,两端的CRC匹配 传入的二进制文件将保存到地址#定义应用程序_启动_地址0x8000。引导加载程序收到最后一个块后,将调用以下代码: void jumpToApplication(voi

我正在为定制板上的Cortex-M4 MCU()编写一个串行引导程序。我目前正在通过SWD使用Jlink进行闪烁/调试

当前架构:我有一个python脚本,它读取二进制文件,将其分解为512字节的块,通过UART发送到MCU,最后对整个过程执行CRC32,并检查以确保接收端的CRC匹配。这一切工作正常,发送数据,两端的CRC匹配

传入的二进制文件将保存到地址
#定义应用程序_启动_地址0x8000
。引导加载程序收到最后一个块后,将调用以下代码:

void jumpToApplication(void)
{
    uint32_t applicationMainStackPointer = *(volatile uint32_t *) (APPLICATION_START_ADDRESS);
    __set_MSP(applicationMainStackPointer);

    void (*applicationResetHandler)(void);
    uint32_t applicationResetHandlerAddress = *(volatile uint32_t *) (APPLICATION_START_ADDRESS + 4);
    applicationResetHandler = (void *) applicationResetHandlerAddress;
    applicationResetHandler();
}
问题:应用程序在引导加载程序之后没有运行。我应该看到一堆
你好,世界”弹出,但什么也没有发生

我认为在连接了JLink的情况下跳转到应用程序可能会导致问题,所以我尝试在没有连接JLink的情况下运行所有程序,但仍然无法运行

我的问题:

  • 这里可能出了什么问题?要继续调试此问题,我可以研究什么

  • 我已经测试了通过JLink闪烁发送的二进制文件,但是我实际闪烁的文件是
    .elf
    文件。据我所知,
    .bin
    文件应该也能正常工作,但也许这就是我出错的地方

  • 在Python中,我对二进制文件进行如下格式化:

  • 这会破坏二进制文件吗


    任何调试提示/建议/见解都将不胜感激

    ypu fprget是否更改了向量表?是否更改了应用程序链接器脚本?不,我没有。需要进行哪些更改?您的应用程序代码(矢量表)必须从应用程序开始地址开始。否则,所有地址都错误,中断处理程序错误等。更改链接器脚本有效。谢谢
       data = [x for x in open(path, 'rb').read()]
       blocks = [data[i:i + PAGE_SIZE] for i in range(0, len(data), PAGE_SIZE)]