gpt4 book ai didi

c - 如何检查引导加载程序项目中找到的应用程序请求

转载 作者:行者123 更新时间:2023-11-30 16:30:38 25 4
gpt4 key购买 nike

我正在为基于 ARM Cortex m0 的微 Controller 做一个引导加载程序,为此我已经浏览了 github 中的一些项目,但我不明白以下代码中的一些行。以下代码中的行 *(__IO uint32_t*)APP_ADDRESS) & ~(RAM_SIZE-1) 的含义是什么?如果有人解释这一点那就太好了。提前致谢。

#define APP_ADDRESS     (uint32_t)0x08008000
#define RAM_SIZE (uint32_t)0x00040000

uint8_t Bootloader_CheckForApplication(void)
{
return ( ((*(__IO uint32_t*)APP_ADDRESS) & ~(RAM_SIZE-1)) == 0x20000000 ) ? BL_OK : BL_NO_APP;
}

最佳答案

我相信您指的是这个项目 https://github.com/akospasztor/stm32-bootloader

Bootloader_CheckForApplication() 的用途是确定有效的应用程序是否位于 APP_ADDRESS0x0800 8000。该应用程序镜像的开头实际上是 vector table ,因此值 *(__IO uint32_t*)APP_ADDRESS 是堆栈指针 (SP) 的初始值。 (该链接讨论了 Cortex-M3,但 vector 表的前两个条目对于所有 Cortex-M 处理器都是相同的)

您可以在同一源文件 https://github.com/akospasztor/stm32-bootloader/blob/master/Src/bootloader.c 的函数 Bootloader_JumpToApplication() 中看到此初始 SP 和重置 vector 的使用。

注意,作者使用的是STM32L4,RAM的起始地址为0x2000 0000,最后地址为0x2003 FFFF,RAM大小为 >0x0004 0000。在本例中,Bootloader_CheckForApplication() 正在检查存储的初始 SP 是否在 RAM 区域内。

但是,如果初始 SP 恰好是 0x2004 0000(在这种情况下是最高有效值),则此检查将不正确。 (请注意,Cortex-M 处理器使用 full descending stack)

关于c - 如何检查引导加载程序项目中找到的应用程序请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51010255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com