大家好,我们的团队正在尝试合并应用程序和mcc生成的引导加载程序。结果很好,我们可以通过引导加载程序和我们编写的主机应用程序来更新应用程序。但是有一个新特性是我们的客户需要的。我们的新目标是:在更新期间和之后更新,不要丢失在一个特殊的GPIO引脚上的状态,但是对我来说很难。我已经尝试过一些实现,但是它们都不能工作。这是我们的工作流程:在应用程序中,一旦它接收到一个更新命令,它将禁用中断,并转到BOOTLOADER_Ini
tialize()地址,可以在引导加载器项目的映射文件中找到。s BOOTLOADER_Initialize()地址。BOOTLOADER_Initialize()将检查更新标志(由用户定义),如果需要更新,引导加载程序将转到Run_Bootloader(),这是一个while循环。这次,引导加载程序将不再进入Run_Bootloader()并将使用STKPTR=0x00;asm(“pagesel”str(NEW_RESET_VECTOR));asm(“go to”str(NEW_RESET_VECTOR));跳转到应用程序地址。非常顺利。但现在我想保存一个gpio管脚状态。如果我修改Check_Device_Reset()到omet.,那么这段代码将破坏while 1循环。我使用调试模式检查引导加载程序是否跳转到应用程序。看起来是这样,但是应用程序失去了它的特性,比如中断或gpio。我的问题是:我们有可能跳过新更新的应用程序而不重置吗?